# 无服务器架构下的 5 类设计模式

- 作者：知晓云
- 发布时间：2022-05-18 19:38
- 原文：https://www.ifanr.com/minapp/1489518

![](https://s3.ifanr.com/wp-content/uploads/2022/05/1-1d0fdcce-apidays-sidney.png)

> 编者按：本文详细介绍无服务器架构下的 5 类设计模式，帮助您思考如何利用知晓云作为这些设计模式的移动端，更好更高效服务您的客户和用户。

根据 AWS 解决方案架构师 [Cassandra Bonner](https://www.linkedin.com/in/cassandralbonner/) 在悉尼举行的 APIdays 澳大利亚会议上的演讲，Amazon Web Services 看到了适合采用无服务器架构的五种主要产品和设计模式。

Bonner 总结当前无服务器技术的成熟度，顾问 Ken Fromm 最近在[ A Cloud Guru 的 Medium 博客上写道](https://read.acloud.guru/thinking-serverless-how-new-approaches-address-modern-data-processing-needs-part-1-af6a158a3af1#.cwr6goc32)，无服务器架构允许开发人员专注于管理他们的应用程序和系统需要做的事情，而不是他们后端计算资源的物理算力、限制条件和复杂的基础设施设置。这使得产品功能或业务模块成为在无服务器环境中规模化拓展的基本单元，而不是更底层的计算资源。

这意味着，软件的计算任务往往是异步的、无状态的和短暂的，或者正如 Fromm 所说：「任务处理本质上变成了容器处理，容器在逐个任务的基础上按需配置和删除。」

在 APIdays，Bonner 表示 AWS 团队认为无服务器包含四个主要原则：

1. 简单但可用的最小元素（即小的、可用的基础组件）
2. 随使用量而弹性缩放（服务器代表用户自动缩放）
3. 用多少付费多少（客户只需为使用服务的时间付费）
4. 内置可用性和容错（即 NoOps）

在 APIdays 活动的早些时候，澳大利亚 Amazon Web Services 解决方案架构高级经理 Peter Stanski 曾表示，AWS 在澳大利亚和新西兰市场（与世界大部分地区一样）的传统采用路径在于中型企业。

在过去的一两年里，虽然初创公司通常从一开始就对无服务器服务「照单全收」，但拥有遗留系统的成熟企业通常会从开发和概念验证测试来构建新应用程序，加入分析监控功能，然后开始迁移一些他们的遗留系统上云，最终专注于将任务关键型应用程序迁移到 AWS。

![](https://s3.ifanr.com/wp-content/uploads/2022/05/2-92470cfc-peter-stanski-at-apidays.png)

AWS 的 Peter Stanski 在澳大利亚 APIdays 上发表演讲。Stanski 说，今年（2017年），各种规模的企业从一开始就倾向于「全力投入」云计算。他们将着手迁移现有遗留技术栈，同时直接在云服务上构建新的应用程序。

Bonner 描述了采用无服务器架构的类似趋势：虽然新应用程序可能正在利用无服务器架构开发和托管，但在大多数情况下，企业正在采用混合模式托管软件，在无服务器环境中构建新功能，然后融入并逐步脱离现有的企业软件托管环境。

「这就是我们看到很多客户开始的方式，」Bonner 指出一个常见的例子：一家企业可能有一个管理图像数据的现有工作流程，现在正在添加一个在无服务器中运行的图像识别功能环境，然后将分类结果通过构建数据管道传回到现有的（遗留）企业软件工作流中，该工作流可能就托管于用户的云环境中。

Bonner 在无服务器架构下，为不同行业和用例定义了五种结合无服务器架构的产品设计模式：

1. 事件驱动的数据处理
2. 网络应用程序
3. 移动和物联网应用程序
4. 应用生态系统
5. 事件工作流

## 用例 #1：事件驱动的数据处理

![](https://s3.ifanr.com/wp-content/uploads/2022/05/3-da1eb122-use-case-1.jpeg)

无服务器环境最常见的应用之一是在事件发生后触发某个数据操作。Bonner 给出了将图像对象添加到 Amazon S3 存储桶的示例。这可能会触发 lambda 函数，例如，运行压缩任务，以便将图像以标准尺寸格式重新归档到 S3 中。

这种风格的用例也非常适合传统云和无服务器云混合使用的趋势。在这种趋势中，无服务器被用来在更广泛的托管环境中执行特定功能。

## 用例 #2：无服务器 Web 应用程序

![](https://s3.ifanr.com/wp-content/uploads/2022/05/4-ba77658a-use-case-2.jpeg)

在无服务器 Web 应用程序中，可能会组合运行进程来确定用户的上下文和用户个性化信息，以提供满足用户请求的内容和功能。例如，在此用例中，静态内容可能存储在 S3 中，以便在浏览器中打开应用程序时显示。

同时，通过应用程序的 API 网关启动处理以运行确定应用程序用户上下文的 Lambda 函数。然后使用通过 lambda 函数生成并作为动态数据存储在 DynamoDB 中的更多动态内容来增强静态内容。

## 用例 #3：移动和物联网应用

![](https://s3.ifanr.com/wp-content/uploads/2022/05/5-d32899b2-use-case-3-1024x768-1024x768.jpeg)

与 Web 应用程序用例类似，构建在无服务器环境中的移动和物联网应用程序正在寻求根据用户的上下文决定向用户提供哪些内容。无服务器身份验证用于确保用户（无论是人还是机器）获得适当授权以访问信息或函数。然后 Lambda 执行函数并与 DynamoDB 中的数据交互以满足用户的需求。

## 用例 #4：无服务器应用生态系统

![](https://s3.ifanr.com/wp-content/uploads/2022/05/6-d6065481-use-case-4.jpeg)

在应用程序生态系统中，应用程序或工作流是在无服务器环境中创建的，并结合了 AWS 功能和产品以及第三方服务商 API。

Bonner 举了一个例子，有人告诉 Amazon Echo，他们正在做演示，然后语音数据触发 lambda 函数，通过 Slack API 将该消息传递给远程团队。然后在无服务器环境中轮询确定团队何时做出响应并向 Echo 发送反馈信息。

## 用例 #5：事件工作流

![](https://s3.ifanr.com/wp-content/uploads/2022/05/7-c7b46890-use-case-5-768x1024-768x1024.jpeg)

最近发布的 AWS Step Functions 现在为无服务器工作流程的可能性增加了更复杂的功能。可以在 Step Functions 中创建决策树，然后与 Lambda 和 AWS 产品对齐以执行工作流分支操作（尽管 Amazon Web Services 在澳大利亚突出显示 Step Functions 令人困惑，因为它在澳大利亚尚不可用）。

例如，使用发布/订阅消息传递模型，可以通过状态机可视化并拥有所有函数和分布式组件。用户可以通过 Step Functions 和 lambdas 映射客户入职流程、进入 CRM、购物车订购和订单履行，并自动添加 AWS 工具以确保工作流程能够完成。

因此，虽然 Fromm 谈到无服务器主要是异步、无状态和短暂的，但一旦进入更复杂的工作流和应用程序，一些持久状态和进行同步调用的能力就会发挥作用。

Step Functions 提供状态机，以便 Lambda 函数可以为业务流程提供一定程度的即时状态，其中无服务器应用程序可能需要结合同步和异步调用链。

但是，像 [iRobots](http://www.irobot.com/) 的 [Ben Kehoe](https://github.com/benkehoe) 这样的无服务器高级用户认为，Step Functions 当前的定价结构过于苛刻，无法在无服务器环境的生产中使用它。此外，默认节流限制表明其预期用途不包括弹性缩放，只包括瞬态事件调度。

「我希望状态即服务成为一种服务范式，可以用于无服务器架构中 FaaS 所需的低级瞬态状态，无论是通过 Step Functions 还是其他服务，」Kehoe 在 Step Functions 首次发布之后在自己博客中[写道](https://serverless.zone/faas-is-stateless-and-aws-step-functions-provides-state-as-a-service-2499d4a6e412#.wnf8htfg1)。

## 身份验证的选择

在无服务器环境中，还可以为实施中的无服务器设计模式和用例选择最适合的用户身份验证和身份管理工作流。身份验证方法可能会根据来自一个组织的多个用户是否需要具有不同权限角色的访问权限、用户是否主要是客户或合作伙伴是否具有某些访问权限而改变。

Jim Tran 和 Justin Pirtle 于去年 11 月在 AWS Re:Invent 上发表的视频更详细地描述了无服务器环境中可用的一些身份验证选择：[AWS re:Invent 2016：无服务器身份验证和授权：身份管理 (MBL306)](https://www.youtube.com/watch?v=n4hsWVXCuVI)。

## 不断成熟中的无服务器工具和生态

虽然还没接近成熟期，无服务器有机会成为企业通过云平台交付产品和服务的主要力量。

随着 serverless 的成熟并越来越多地被新项目和混合应用所采用，随着企业开始选择将现有应用程序迁移到 serverless 架构，企业数字和上云的发展轨迹很可能会在无服务器市场重复，尽管 serverless 目前的市场占有率还较小。虽然面向企业和企业的关键任务软件可能尚未出现，但一些安全功能和整体生态系统工具仍需成熟，但无服务器的用例表明，除了初创公司之外，无服务器的可能性越来越大就像今天成熟的云计算一样，成为值得企业数字化「全面采用」的新一代云计算架构。

（原文：[Serverless Architecture: Five Design Patterns](https://thenewstack.io/serverless-architecture-five-design-patterns/)）
