什么是后台基础设施?

Back4app 后端基础设施覆盖

在设计后端时,选择合适的后端基础架构至关重要。它会影响后端的性能、灵活性和可维护性等等。

在本文中,我们将解释什么是后端基础架构,探讨不同类型的后端基础架构,并讨论在做出决定时需要记住的重要因素。

此外,我们还将了解如何使用Back4app 创建后台基础设施。

目标

本文结束时,您将能够

  • 解释什么是后台基础设施
  • 讨论不同类型的后端基础设施(包括 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 图表将如下所示:

Back4app 电子商务 ER 图表

我们将用最少的代码创建后台,并演示如何在客户端使用(通过SDK、REST API 和 GraphQL API)。

创建应用程序

要了解更多信息,您需要一个Back4app 帐户。需要吗?今天就注册!

登录 Back4app 账户后,您将看到应用程序列表。点击 “构建应用程序 “按钮,开始应用程序构建过程。

Back4app 创建应用程序

接下来,选择 “BaaS”,因为我们要建立一个后台。

Back4app 后端即服务

选择应用程序名称,选择 “NoSQL”,然后创建应用程序。

Back4app BaaS 配置

Back4app 需要一些时间来设置一切。它将处理应用层、数据库、备份、扩展等。

应用程序创建完成后,您将进入应用程序的实时数据库。

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

Back4app 创建数据库类

添加以下字段:

+-----------------------------+-------------+---------------+----------+
| 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 文件:

  1. ProductCategory.json
  2. Product.json
  3. _Join꞉categories꞉Product.json
  4. 订单.json
Back4app 导入类数据

完成后,您的数据库中应该会有一些产品、类别和订单。这一步是必需的,因为我们需要一些数据来在后一阶段测试后台。

确保数据库安全

默认情况下,数据库类是以 “保护模式 “创建的。在保护模式下,交互和管理对象的唯一方法就是使用主密钥。这并不是最佳方式,因为我们无法从客户端获取或管理对象。

要做到这一点,我们必须放宽一些限制。Back4app/Parse 有两种限制机制:

  1. 类级权限(CLP)
  2. 访问级权限(ACL)

CLP 允许我们在类级别上实施限制,而 ACL 允许我们在对象级别上实施限制。这两种机制都能将类或对象限制为特定角色用户

选择侧边栏上的产品类别,然后点击屏幕上方的 “受保护 “文本。然后修改 CLP:

Back4app 产品类别和产品 CLP

ProductCategory模型执行相同的步骤。

然后更新订单类的 CLP:

Back4app 订购 CLP

注意图片。在这里,我们还启用了创建权限。

新的 CLP 将允许未经身份验证的用户获取、查询和统计 “产品“(Products)和 “产品类别"(ProductCategoryies),但不能修改它们。订单类也是如此,但用户也可以创建新订单。

要了解更多信息,请查看我们的Parse 服务器安全文章

管理应用程序

目前,管理数据库中对象的唯一方法是使用数据库视图。虽然这对开发人员有用,但对非技术用户来说并不直观。此外,它给了用户过多的控制权,容易造成人为错误。

幸运的是,Back4app 可以让您轻松启用 “管理应用程序 “功能。管理应用程序是为您的数据库类量身定制的易用管理面板。

首先导航到侧边栏上的 “更多 > 管理应用程序”,启用它。然后点击 “启用”:

Back4app 启用管理应用程序

Back4app 会提示您选择用户名、密码和子域。我决定采用以下方式:

user:        root
pass:        complexpassword123
subdomain:   https://binfra.admin.back4app.com/

很好,这就是你要做的。

您可以点击 “管理应用程序 URL “访问管理面板。点击后会打开一个新的浏览器窗口,并要求您输入管理凭据。登录后,您可以创建、更新和删除对象。

试着玩一玩仪表盘,熟悉一下。

Back4app 管理应用程序控制面板

云代码

Back4app 允许您通过所谓的云代码(Cloud Code)运行自定义 JavaScript 代码。通过云代码,您可以定义由 Parse、HTTP 请求触发或定期运行的函数。此外,云代码还可用于使用 Express 构建网络应用程序。

云代码功能

假设我们需要一个计算当前销售额的云代码函数。

首先,导航至侧边栏上的 “云代码 > 功能与虚拟主机”。您会发现云代码视图分为两部分。左侧是目录结构,右侧是代码。

Back4app 云代码

然后,打开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);
  }
});
  1. 我们定义了一个名为calculateSales() 的云代码函数。该函数循环处理所有订单,获取相应的产品并计算其价格。
  2. 我们定义了一个名为printSales() 的云代码任务,允许我们从 Parse 面板运行该函数,并定期对其进行调度。

最后,点击 “部署 “来部署云代码。

导航到侧边栏上的 “云代码 > 作业”,然后运行printSales()作业,确保作业正常运行。如果一切运行正常,在查看日志时,您应该会看到一条信息,例如销售额:1440 美元

云代码调度

要安排工作,必须导航到侧边栏上的 “应用程序设置 > 服务器设置”。向下滚动到 “后台作业”,点击 “安排作业”,然后填写表格。

Back4app 日程安排

为确保它能正常工作,请再次检查日志。

客户端

您可以通过多种方式与基于 Back4app 的后台进行交互:

  1. 解析 SDK
  2. RESTful API(自动生成)
  3. GraphQL API(自动生成)

根据经验,如果 Parse SDK 适用于您的平台,您就应该始终使用 Parse SDK。如果没有,可以使用 RESTful API 或 GraphQL API。如何选择应用程序接口取决于您的数据。

查看文档,了解如何将 Parse SDK 与各种框架结合使用。

不过,让我们使用内置的 REST 控制台来测试我们的后台。

导航至侧边栏上的 “API > REST”,然后尝试填写表格查询所有产品:

Back4app 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"
            }
        },
    // ...
}

请尝试执行以下查询:

  1. 获取所有价格高于 50 的产品
  2. 获取所有尚未交付的订单
  3. 创建新产品并为其添加类别
  4. 删除订单

结论

总之,您现在已经知道什么是后台基础架构,熟悉各种类型的后台基础架构,并知道如何为您的项目选择合适的基础架构。

除此之外,您还学会了如何在 Back4app 上创建后端基础架构。您已经掌握了数据库、数据库安全、自定义代码、作业调度和 API 测试。

有关为基于 Back4app 的后台创建客户端的指导,请浏览我们的其他文章:

  1. 如何托管前台和后台?
  2. 如何开发社交媒体应用程序?
  3. 如何使用 React 构建聊天机器人?

其他文章资源已在GitHub repo 上开源。


Leave a reply

Your email address will not be published.