什么是后台基础设施?
在设计后端时,选择合适的后端基础架构至关重要。它会影响后端的性能、灵活性和可维护性等等。
在本文中,我们将解释什么是后端基础架构,探讨不同类型的后端基础架构,并讨论在做出决定时需要记住的重要因素。
此外,我们还将了解如何使用Back4app 创建后台基础设施。
Contents
目标
本文结束时,您将能够
- 解释什么是后台基础设施
- 讨论不同类型的后端基础设施(包括 IaaS、PaaS 和 BaaS)
- 为项目选择合适的后台基础设施
- 使用Back4app构建自己的后台
什么是后台基础设施?
后端基础设施是支持后端系统的软件和硬件组件的组合。其中包括服务器、容器、网络组件、防火墙和其他资源。
后端基础设施负责高可用性、扩展、负载平衡、安全、路由等。后端基础设施的设计必须能够提供无缝的用户体验。
选择后端基础设施时需要考虑什么?
让我们来讨论一下在选择后台基础设施时需要考虑的基本因素。
速度
速度是后台基础设施的关键特性之一。您的用户希望应用程序尽可能流畅地运行。因此,您需要优化客户端与后台的通信。
为了减轻通信延迟的影响,可以使用一些巧妙的技巧。例如,可以在用户界面上设置骨架屏幕、加载条,并显示提示和技巧。
速度也是搜索引擎优化中最关键的因素之一。
灵活性
灵活性是指后端基础架构支持哪些编程语言、框架和其他技术(如数据库)。在选择后端基础架构时,应确保其支持多种技术。
可扩展性
从开始构建应用程序的那一刻起,您就应该考虑可扩展性。想想您的应用程序将如何使用。您会拥有稳定的用户数量,还是用户数量有时会激增?
您的后端基础架构需要以适应极端工作负载的方式构建。为了最大限度地减少服务器开支,您的应用程序实例应能即时创建和销毁。
可维护性
开发和发布应用程序只是工作的 80%。之后,您还需要投入大量时间来维护应用程序。更新服务器软件和部署安全补丁应该尽可能简单。
选择内置 CI/CD 系统的后端基础架构,或自行实施。
DevOps 要求
某些类型的后端基础设施更难使用。请选择您有时间和资源来管理的后端基础架构。如果决定使用 IaaS 等低级后端基础架构,则需要专门的 DevOps 团队来管理。
安全
您有责任确保用户数据的安全。随着网络攻击数量的增加,您必须确保您的后台基础设施符合最新的安全标准。
使用强大的自动生成密码、设置防火墙、不在服务器上运行不受信任的软件、定期进行安全检查,等等。
后端基础设施类型
您可以使用自己的服务器(所谓的传统基础设施)或利用云基础设施来部署后端。
在过去十年中,许多公司已经转向云模式,因为这可以让他们节省时间和金钱。
让我们来分析几种最流行的方法。
基础设施即服务或 IaaS
基础设施即服务(IaaS)是抽象程度最低的云计算模式。在这种模式中,云供应商在虚拟化环境中提供计算资源,如服务器、存储、操作系统和网络组件。
IaaS 早在 2010 年就已存在,目前仍是最流行的云计算模式。它的优点包括强大的可扩展性、高级控制和价格效率。反之,缺点是管理复杂,维护成本高于其他云计算模式。
平台即服务或 PaaS
平台即服务(PaaS)是一种云计算模式,提供用户友好的应用程序开发、管理和交付环境。它包括各种内置应用程序开发工具,使您可以轻松启动和运行应用程序。
PaaS 可简化基础设施管理,提供更快的市场进入速度、更强的安全性、成本节约、可扩展性、高可用性和更少的编码。另一方面,它可能会将您与供应商的能力捆绑在一起,带来锁定供应商的风险,并限制灵活性和控制力。
后台即服务或 BaaS
后端即服务(BaaS)实现了服务器端开发和云基础设施管理的自动化。它提供实时数据库、用户管理、身份验证、通知、社交媒体集成等功能。
BaaS 将开发人员从后端问题中解放出来,让他们专注于前端和核心业务。BaaS 将 IaaS 和 PaaS 的优势与后端抽象结合在一起,从而加快了产品上市速度并节约了成本。缺点是缺乏控制,有被供应商锁定的风险,而且成本相对较高。
容器即服务或 CaaS
容器即服务(CaaS)是一种用于上传、构建、扩展和管理容器的云计算模型。CaaS 通常包括容器运行时、容器注册表、自动扩展功能、内置 CI/CD 系统、负载平衡等!
CaaS 简化了容器处理,消除了对底层基础设施的担忧。它鼓励敏捷开发,促进微服务架构,并加快创建高度可扩展的应用程序。
如何创建后台基础设施?
在本文的这一部分,我们将使用Back4app 创建后台基础架构。
什么是 Back4app?
Back4app 是一个卓越的后端即服务(BaaS)平台。它能让您快速构建网络和移动应用程序的后端。
该平台采用开源技术构建,功能众多。其功能包括类似电子表格的数据库、文件存储、用户管理、身份验证、自动生成的应用程序接口、通知等!
Back4app 可帮助您大大加快产品上市时间。利用它,您可以专注于核心业务,而不必担心后台或底层基础设施。
您不需要专门的 DevOps 工程师,维护成本也会降低。
Back4app 最棒的地方在于它有一个免费层。免费层是测试平台或托管宠物项目的绝佳选择。如果您的应用程序获得成功,您就可以升级到高级层。
要了解有关 Back4app 的更多信息,请查看Back4app 是什么?
项目概述
为了展示如何创建后台,我们将建立一个简单的电子商务后台服务。该后台将允许我们管理产品、类别和订单。
我们项目的 ER 图表将如下所示:
我们将用最少的代码创建后台,并演示如何在客户端使用(通过SDK、REST API 和 GraphQL API)。
创建应用程序
要了解更多信息,您需要一个Back4app 帐户。需要吗?今天就注册!
登录 Back4app 账户后,您将看到应用程序列表。点击 “构建应用程序 “按钮,开始应用程序构建过程。
接下来,选择 “BaaS”,因为我们要建立一个后台。
选择应用程序名称,选择 “NoSQL”,然后创建应用程序。
Back4app 需要一些时间来设置一切。它将处理应用层、数据库、备份、扩展等。
应用程序创建完成后,您将进入应用程序的实时数据库。
设置数据库
既然我们已经创建了应用程序,那就来处理一下数据库吧。
我们首先要创建一个类,用于在数据库中存储数据。你可以把类看成表格(SQL 术语)或模型(ORM 术语)。每个类默认有以下四个字段:
+-------------+-------------+------------------------------------------+
| Type | Name | Description |
+-------------+-------------+------------------------------------------+
| String | objectId | Object's unique identifier |
+-------------+-------------+------------------------------------------+
| Date | updatedAt | Date time of the last update |
+-------------+-------------+------------------------------------------+
| Date | createdAt | Date time of creation |
+-------------+-------------+------------------------------------------+
| ACL | ACL | Access Control List |
+-------------+-------------+------------------------------------------+
如项目概述所述,我们的项目将有三个类。点击侧边栏上的 “创建类 “按钮,创建第一个类。将其命名为ProductCategory
:
添加以下字段:
+-----------------------------+-------------+---------------+----------+
| Type | Name | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String | name | <leave blank> | yes |
+-----------------------------+-------------+---------------+----------+
| String | description | <leave blank> | no |
+-----------------------------+-------------+---------------+----------+
对产品
类执行相同步骤:
+-----------------------------+-------------+---------------+----------+
| Type | Name | Default value | Required |
+-----------------------------+-------------+---------------+----------+
| String | name | <leave blank> | yes |
+-----------------------------+-------------+---------------+----------+
| String | description | <leave blank> | no |
+-----------------------------+-------------+---------------+----------+
| Relation -> ProductCategory | categories | <leave blank> | no |
+-----------------------------+-------------+---------------+----------+
| Number | price | 0 | yes |
+-----------------------------+-------------+---------------+----------+
我们使用
关系
数据类型来处理多对多关系。
最后,创建订单
类:
+-----------------------------+------------+---------------+----------+
| Data type | Name | Default value | Required |
+-----------------------------+------------+---------------+----------+
| Pointer -> Product | product | <leave blank> | yes |
+-----------------------------+------------+---------------+----------+
| String | cFirstName | <leave blank> | yes |
+-----------------------------+------------+---------------+----------+
| String | cLastName | <leave blank> | yes |
+-----------------------------+------------+---------------+----------+
| String | cAddress | <leave blank> | yes |
+-----------------------------+------------+---------------+----------+
| Number | delivered | false | yes |
+-----------------------------+------------+---------------+----------+
我们使用
指针
数据类型来处理一对多的关系。
完成后,您就可以在侧边栏看到课程。
填充数据库
接下来,让我们填充数据库。
首先创建一些产品类别、产品和订单(按此顺序)。如果您没有想法,请随时导入此固定装置。
要导入 JSON 文件,请使用 “更多选项 > 导入 > 类数据 > 选择文件”。确保按以下顺序导入 JSON 文件:
- ProductCategory.json
- Product.json
- _Join꞉categories꞉Product.json
- 订单.json
完成后,您的数据库中应该会有一些产品、类别和订单。这一步是必需的,因为我们需要一些数据来在后一阶段测试后台。
确保数据库安全
默认情况下,数据库类是以 “保护模式 “创建的。在保护模式下,交互和管理对象的唯一方法就是使用主密钥。这并不是最佳方式,因为我们无法从客户端获取或管理对象。
要做到这一点,我们必须放宽一些限制。Back4app/Parse 有两种限制机制:
- 类级权限(CLP)
- 访问级权限(ACL)
CLP 允许我们在类级别上实施限制,而 ACL 允许我们在对象级别上实施限制。这两种机制都能将类或对象限制为特定角色
或用户
。
选择侧边栏上的产品类别
,然后点击屏幕上方的 “受保护 “文本。然后修改 CLP:
对ProductCategory
模型执行相同的步骤。
然后更新订单
类的 CLP:
注意图片。在这里,我们还启用了
创建
权限。
新的 CLP 将允许未经身份验证的用户获取、查询和统计 “产品
“(Products
)和 “产品类别"(ProductCategoryies
),但不能修改它们。订单
类也是如此,但用户也可以创建新订单。
要了解更多信息,请查看我们的Parse 服务器安全文章。
管理应用程序
目前,管理数据库中对象的唯一方法是使用数据库视图。虽然这对开发人员有用,但对非技术用户来说并不直观。此外,它给了用户过多的控制权,容易造成人为错误。
幸运的是,Back4app 可以让您轻松启用 “管理应用程序 “功能。管理应用程序是为您的数据库类量身定制的易用管理面板。
首先导航到侧边栏上的 “更多 > 管理应用程序”,启用它。然后点击 “启用”:
Back4app 会提示您选择用户名、密码和子域。我决定采用以下方式:
user: root
pass: complexpassword123
subdomain: https://binfra.admin.back4app.com/
很好,这就是你要做的。
您可以点击 “管理应用程序 URL “访问管理面板。点击后会打开一个新的浏览器窗口,并要求您输入管理凭据。登录后,您可以创建、更新和删除对象。
试着玩一玩仪表盘,熟悉一下。
云代码
Back4app 允许您通过所谓的云代码(Cloud Code)运行自定义 JavaScript 代码。通过云代码,您可以定义由 Parse、HTTP 请求触发或定期运行的函数。此外,云代码还可用于使用 Express 构建网络应用程序。
云代码功能
假设我们需要一个计算当前销售额的云代码函数。
首先,导航至侧边栏上的 “云代码 > 功能与虚拟主机”。您会发现云代码视图分为两部分。左侧是目录结构,右侧是代码。
然后,打开cloud/main.js,粘贴以下代码:
// cloud/main.js
Parse.Cloud.define("calculateSales", async (request) => {
const orderClass = Parse.Object.extend("Order");
const orderQuery = new Parse.Query(orderClass);
let sales = 0;
try {
const orders = await orderQuery.find();
for (var i = 0; i < orders.length; i++) {
let order = orders[i];
let productId = order.get("product")["id"];
const productClass = Parse.Object.extend("Product");
const productQuery = new Parse.Query(productClass);
const product = await productQuery.get(productId);
sales += product.get("price");
}
return {
sales: sales,
};
} catch (error) {
console.error("Error calculating the sales: " + error.message);
return {
sales: 0,
}
}
});
Parse.Cloud.job("printSales", async (request, status) => {
try {
const result = await Parse.Cloud.run("calculateSales");
console.log("Sales: " + result.sales + "$");
} catch (error) {
console.error("Error calculating the sales: " + error.message);
}
});
- 我们定义了一个名为
calculateSales() 的
云代码函数。该函数循环处理所有订单,获取相应的产品并计算其价格。 - 我们定义了一个名为
printSales()
的云代码任务,允许我们从 Parse 面板运行该函数,并定期对其进行调度。
最后,点击 “部署 “来部署云代码。
导航到侧边栏上的 “云代码 > 作业”,然后运行printSales()
作业,确保作业正常运行。如果一切运行正常,在查看日志时,您应该会看到一条信息,例如销售额:1440 美元
。
云代码调度
要安排工作,必须导航到侧边栏上的 “应用程序设置 > 服务器设置”。向下滚动到 “后台作业”,点击 “安排作业”,然后填写表格。
为确保它能正常工作,请再次检查日志。
客户端
您可以通过多种方式与基于 Back4app 的后台进行交互:
- 解析 SDK
- RESTful API(自动生成)
- GraphQL API(自动生成)
根据经验,如果 Parse SDK 适用于您的平台,您就应该始终使用 Parse SDK。如果没有,可以使用 RESTful API 或 GraphQL API。如何选择应用程序接口取决于您的数据。
查看文档,了解如何将 Parse SDK 与各种框架结合使用。
不过,让我们使用内置的 REST 控制台来测试我们的后台。
导航至侧边栏上的 “API > REST”,然后尝试填写表格查询所有产品:
你应该会得到类似的答复:
{
"results": [
{
"objectId": "4ZyHH3X0RQ",
"name": "Fitness Tracker Watch",
"description": "...",
"price": 80,
"createdAt": "2023-10-17T20:03:55.424Z",
"updatedAt": "2023-10-17T20:24:12.322Z",
"categories": {
"__type": "Relation",
"className": "ProductCategory"
}
},
{
"objectId": "cDqlGJzT5U",
"name": "Organic Fruit Basket",
"description": "...",
"price": 40,
"createdAt": "2023-10-17T20:04:10.063Z",
"updatedAt": "2023-10-17T20:24:00.382Z",
"categories": {
"__type": "Relation",
"className": "ProductCategory"
}
},
// ...
}
请尝试执行以下查询:
- 获取所有价格高于 50 的产品
- 获取所有尚未交付的订单
- 创建新产品并为其添加类别
- 删除订单
结论
总之,您现在已经知道什么是后台基础架构,熟悉各种类型的后台基础架构,并知道如何为您的项目选择合适的基础架构。
除此之外,您还学会了如何在 Back4app 上创建后端基础架构。您已经掌握了数据库、数据库安全、自定义代码、作业调度和 API 测试。
有关为基于 Back4app 的后台创建客户端的指导,请浏览我们的其他文章:
其他文章资源已在GitHub repo 上开源。