前端与后端
我们还没有讨论前端(frontend)与后端(backend)这些术语,因为我不想预先附加太多信息。
前端应用可能是用户在浏览器看到的所有东西(e.g. website, web application, SPA)。因此你将会看到前端开发者经常与 html/css 或像 React.js 这样的库打交道。相反,后端经常是幕后的逻辑:从数据库读写的逻辑,与其他应用对话的逻辑和最常见的提供 API 的逻辑。
前后端两个实体造就了 client-server 架构,然而 后端的业务逻辑(或与第三方数据源建立敏感连接的逻辑,比如数据库)不应该以源代码的方式暴露给前端应用,否则在任何人都将可以在浏览器访问它们。

但是,不要在这里把 client 应用始终认为是前端程序,把 server 应用认为是后端程序。这些术语不能如此轻易地被交互。前端应用通常就是浏览器上能看到的,后端通常表现的是不会暴露给浏览器的业户逻辑和数据库连接。
但是,相反而言,client 和 server 这些术语只是角度的问题。一个后端应用有时会消费另一个后端应用的服务,对于另一个后端 server 来说第一个后端变成了 client 应用。然而第一个后端仍然还是其他 client 应用(比如 前端应用)的 server。

如果你想要回答 client-server 问题,如果有人问你一个实体在 client-server 架构中扮演了什么角色,请始终问自己谁(server)为谁(client)服务,以及谁(client)使用谁(server)的功能。
微服务
举例子来说,微服务是一种把 big 后端(也叫单体架构 monolith💩)分割成更小的后端(microservices)的架构。每一个更小的后端应该有特定领域的功能,但毕竟它们都服务于一个前端(或多个后端)。但是,一个后端也能使用另一个后端,这时前一个后端成为了 client,后一个后端成为了 server。

在一个微服务架构中,每一个后端应用可以使用不同的语言编写,同时所有的后端彼此之间都能够通过 API 进行交流。它们选择使用什么 API 规范并不重要,无论是 REST API 或者 GraphQL API,只要 clients 能够与它们的 servers 都能够理解 API 的 约定。这也会出现一个前端不只与一个后端对话,而是并排(side-by-side)与多个后端对话的情况。
BaaS (Backend-As-A-Service)
从传统的意义上来讲,只服务一个前端应用的单个后端应用经常连接到一个数据库。这是一个典型的全栈应用。然而,大多数的后端应用除了从数据库读写,允许确定的用户做确定的行为(授权 authorization),或者认证(e.g. login logout register)之外不会做太多事情。如果是这种情况,通常不需要自己实现后端应用。
Firebase(by Google)是一个 backend-as-a-service 的解决方案:提供数据库,认证和授权等作为开箱即用的后端服务。开发者可以只实现连接 backend-as-a-server 的前端应用(e.g. React application)。

BaaS(backend-as-a-service)比如 Firebase 允许开发者非常快速地启动并允许它们的前端应用。所有认证、授权和数据库已经为你准备好了。除此之外,大多数的 BaaS 也提供托管服务(host),比如你的 React 应用能也被托管到 Firebase。因此 Firebase 既能够服务于你的 React 应用(browser),也允许应用与之提供的功能交流(e.g. authentication, database)。Supabase 是 Firebase 流行的开源的平替品。
云计算
也许我们还经常看到这些 XaaS 结尾的术语,它们其实都是云计算的模型:
- 基础设施即服务 (IaaS):提供虚拟化的计算、存储、网络等基础设施作为服务。
- 平台即服务 (PaaS):提供开发环境和工具,让用户可以在云平台上开发、运行和管理自己的应用程序。
- 软件即服务 (SaaS):提供基于云平台的软件应用程序,用户可以直接使用这些应用程序,而无需购买和维护软件系统。
- 云存储服务:提供各种不同类型的存储服务,包括容器存储、对象存储、文件存储等。
- 云安全服务:提供各种不同类型的云安全服务,包括身份验证、数据加密、安全审计等。
- 云数据库服务:提供各种不同类型的数据库服务,包括关系型数据库、NoSQL 数据库等。
- 混合云服务:将公有云和私有云结合起来,以便更好地满足企业的需求。
- 服务器无状态计算服务 (Serverless):一种新型的云计算模型,提供按需执行代码的服务。
IaaS
IaaS(基础设施即服务 Infrastructure as a Service)是一种云计算模型,它提供了一个虚拟化的计算基础设施,包括计算、存储、网络和其他与基础设施相关的资源。在 IaaS 中,用户可以根据自己的需求通过网络访问这些资源,并按照使用量付费。这使得用户无需购买和维护自己的硬件和基础设施,在需要时可以随时调整资源规模以满足业务需求。IaaS 为用户提供了高度的灵活性和可扩展性,使其成为构建应用程序和处理数据的理想平台。例如,用户可以在 IaaS 上创建虚拟服务器、存储和网络,以构建自己的 Web 应用程序或托管数据库等关键业务应用程序。
PaaS
PaaS(平台即服务 Platform as a Service)是一种云计算模型,它允许开发人员创建、测试和部署应用程序而无需建立和维护底层基础设施。PaaS 提供了一个平台,其中包含操作系统、开发工具、数据库管理系统、Web 服务器和应用程序框架等组件,使开发人员可以快速构建和部署应用程序。开发人员可以使用自己的代码和工具,在 PaaS 上构建应用程序,并将它们托管在云端。这种模型可帮助企业节省大量时间和成本,因为他们不必担心基础设施的管理和维护。
SaaS
SaaS 是指软件即服务 (Software as a Service)。它是一种云计算模型,提供了基于互联网的软件应用程序作为服务。在 SaaS 模型中,软件应用程序托管在云端,用户可以通过互联网访问这些应用程序,而无需购买和维护软件系统。
SaaS 可以为个人用户和企业用户提供各种不同类型的应用程序,包括办公软件、客户关系管理软件、财务软件、人力资源管理软件等。相对于传统的软件部署方式,SaaS 提供了更低的成本、更高的可用性、更高的灵活性和更快的上线速度。因此,SaaS 已经成为当今最流行的云计算模型之一,并得到了广泛的应用。
FaaS
FaaS(函数即服务 Function as a Service)是一种云计算模型,它允许开发人员编写和部署独立的、事件驱动的应用程序功能。在 FaaS 中,开发人员只需编写函数代码,并上传到云端平台,该平台会负责运行这些代码并处理传入的请求。当请求触发函数时,云平台会动态分配计算资源来运行函数,并将结果返回给请求方。 FaaS 模型具有高度的弹性和可扩展性,使得开发人员可以更快速地构建和部署应用程序功能,而无需担心底层基础设施的管理和维护。
FaaS 是一种云计算模型,它提供了一种按需执行代码的服务。与传统的基础设施即服务 (IaaS) 不同,FaaS 不需要用户维护和管理服务器。在 FaaS 模型中,开发者只需要上传待执行代码到云平台,并设置触发器来响应事件。因为 FaaS 是在 IaaS 和 Serverless 模型的基础上发展而来的,所以有时也被称为 Serverless 函数。