Serverless 架构设计:从传统应用到 Serverless 重构

阅读时长 7 分钟读完

前言

Serverless 是一个新兴的架构设计模式,它强调无服务器 (Serverless) 的概念,即应用不需要任何服务器来运行,而是通过将应用逻辑分布在多个云服务上来实现功能。

与传统的应用架构相比,Serverless 架构拥有更高的可扩展性和弹性,可以在需要时快速地调整资源,并且可以大大减少业务成本。在今天的云计算时代,Serverless 架构已经成为了前端开发领域的趋势之一。

本文将介绍 Serverless 架构的设计思路,从传统的应用架构到 Serverless 架构的重构之路,并通过实例和代码展示 Serverless 架构的实现和应用。

传统应用架构

在传统的应用架构中,我们通过在一台或多台服务器上部署应用程序来提供服务。这些服务器通常由企业自己购买和维护,需要人工管理和维护,而且很难动态地扩展应用程序,这意味着我们必须预测最大负载并按需购买足够的服务器。

传统的应用架构通常由如下组成:

  • 服务器:用于部署应用程序和存储数据
  • 数据库:用于存储和管理数据
  • 缓存:用于缓存数据以提高响应速度
  • 负载均衡器:用于平衡请求流量
  • 安全防护:用于保护应用程序和服务器安全

传统的应用架构存在几个问题:

  1. 手动扩展服务器需要额外的人工管理和维护。
  2. 预测最大负载需要额外的成本和资源。
  3. 当负载不均衡或服务器崩溃时,系统容易出现故障。

这些问题都可以在 Serverless 架构中得到解决。

Serverless 架构

Serverless 架构在传统的应用架构上引入了一些新概念,其中最重要的概念是函数式计算 (Function as a Service, FaaS)。在 Serverless 架构中,应用程序被拆分成小型的、独立的函数,这些函数可以在需要时自动运行,且只有在需要时才会产生计费。

Serverless 架构与传统的应用架构相比,具有以下的优点:

  1. 动态伸缩:Serverless 架构可以按需自动扩展,且只会产生和使用需要的资源。
  2. 高可靠性:Serverless 架构将应用程序拆分成独立的函数,提高了应用程序的可靠性和弹性。
  3. 低成本:Serverless 架构可以按需分配资源,大大减少了成本。

Serverless 架构需要以下几个组件:

  • Function:Serverless 架构中的基本逻辑单元,即一个函数。
  • API Gateway:用于将请求路由到正确的函数。
  • 数据存储:用于存储需要的数据。
  • 事件触发器:用于触发函数运行的事件。

下面我们将以一个简单的网站应用为例来展示如何进行 Serverless 架构的设计和重构。

Serverless 网站应用

一个典型的网站应用通常由如下组成:

  • 前端:用于展示和与用户交互。
  • 后端 API:用于处理数据和业务逻辑。
  • 数据库:用于存储和管理数据。

以一个简单的 Todo List 应用为例,我们将使用 Serverless 架构进行设计和重构。

传统应用的实现

在传统的应用架构中,我们可以通过如下的方式实现一个 Todo List 应用:

  1. 使用 React.js 构建前端页面。
  2. 使用 Node.js 构建后端 API,包括用户验证、Todo item 管理等业务逻辑。
  3. 使用 MongoDB 存储和管理 Todo 数据。
  4. 使用 Nginx 或 Apache 等负载均衡器经过域名解析进行服务器部署。

这个应用的架构如下图所示:

但是该架构存在以下几个问题:

  1. 手动扩展服务器需要额外的人工管理和维护。
  2. 预测最大负载需要额外的成本和资源。
  3. 当负载不均衡或服务器崩溃时,系统容易出现故障。
  4. 部署需要更多的时间和资源。

这些问题都可以使用 Serverless 架构解决。

Serverless 应用的实现

在 Serverless 架构中,我们可以通过如下的方式实现一个 Todo List 应用:

  1. 使用 React.js 构建前端页面。
  2. 使用 AWS Lambda 构建后端 API,包括用户验证、Todo item 管理等业务逻辑。
  3. 使用 Amazon DynamoDB 存储和管理 Todo 数据。
  4. 使用 Amazon API Gateway 作为 API 的入口。
  5. 使用 Amazon CloudFront 作为 CDN 来加速网页的访问。

这个应用的架构如下图所示:

在 Serverless 架构中,我们将 Todo List 应用拆分成了独立的函数,每个函数都可以独立且自动运行,这让应用程序变得更加灵活和弹性。

其中,我们使用了 AWS Lambda 来运行后端 API,使用 Amazon DynamoDB 来存储和管理数据,使用 Amazon API Gateway 作为 API 的入口,使用 Amazon CloudFront 作为 CDN 来加速网页的访问。

这个应用的优点如下:

  1. 无需手动扩展服务器,Serverless 架构会自动扩展资源,只会使用需要的资源。
  2. 高可靠性,每个函数都是独立的,避免了整个应用的故障风险。
  3. 低成本,只有在需要时才会计费,可以大大减少成本。
  4. 快速部署,无需手动部署,只需要在代码提交后等待 Lambda 自动部署即可。

下面是一个使用 Serverless 架构实现的 Todo List 应用的示例代码:

-- -------------------- ---- -------
-- --- ------ --------
--------------- - ----- --------------- -------- -
  -------------------- -
    ---- -----------
      -- --- --- ----- ---- --------
      ------ ----- -----------
    ---- -------------
      -- ------ - --- ---- ----
      ------ ----- ------------------------
    ---- -------------
      -- ------ - ---- ---- -- --
      ------ ----- ---------------------
    --------
      ----- --- -------------- ------- ------------------
  -
-

----- -------- ---------- -
  -- ----- --- ----- ---- --------
  ----- -------- - ----- -------------- ---------- ------- -------------
  -- --- -------- ---- ----- -- ---- -----
  ------ ----------------------- -- -- --- -------- ------ ---------- ----
-

----- -------- ----------------- -
  -- -------- - --- ---- --- --- ---- ----
  ----- -- - ---------
  -- ------ --- --- ---- ---- ---- --------
  ----- ------------ ---------- -------- ----- - --- ----- - -------------
  -- ------ --- --- ---- ----
  ------ - --- ----- --
-

----- -------- -------------- -
  -- ------ --- ---- ---- -- -- ---- --------
  ----- --------------- ---------- -------- ---- - -- - -------------
  -- ------ --- ------- ---- ---- --
  ------ - -- --
-

结论

Serverless 架构已经成为了前端领域的一种趋势。通过将大型应用程序拆分成小型、独立的函数,Serverless 架构提高了可靠性、弹性和可扩展性,并可以大大减少成本。对于前端开发者来说,Serverless 架构是一种非常值得学习和探索的新的架构模式。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6775088e6d66e0f9aaf3241e

纠错
反馈