第 15 章 使用函数即服务的微服务 使用函数即服务的微服务
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
函数即服务(FaaS)是构建微服务的另一种方式。它是一种无服务器解决方案,可通过函数构件来构建、管理和部署应用程序,作为实现相对简单到适度复杂的事件驱动解决方案的一种手段,它具有重要价值。
函数是在特定触发条件发生时执行的一段代码。函数启动、运行直至完成,然后终止。扩展、状态和监控通常由 FaaS 框架提供,计算资源的征用和释放也是如此。FaaS 解决方案可根据负载情况轻松上下调整函数执行次数,为高度可变的负载提供密切跟踪。
将 FaaS 解决方案视为基本的消费者/生产者实施方案可能会有所帮助,但这种实施方案会在预定时间后定期、可预测地停止。在很多方面,FaaS 解决方案就像一个每隔几分钟就会崩溃的微服务,但它会将数据存储在外部数据存储区中,并在重新启动时从原处恢复。
为什么要使用功能即服务?
功能即服务(FaaS)解决方案消除了创建和管理微服务的开销,前提是你已经建立并运行了功能即服务框架。FaaS 的最大优势在于无服务器方面:您只需编写函数代码、指定触发时间并部署即可。FaaS 框架会处理剩下的事情。
FaaS 的常见用例包括
- 对事件的简单反应
-
例如,将数据加载到数据库或触发发送给客户的电子邮件。
- 执行工作流的顺序步骤
-
例如,通过事件接收图像,生成人工智能评估,并选择结果子集与循环中的人工智能进行验证。每一步都有自己的功能,并将结果提供给链中的下一步。
- 并行处理大量数据
-
例如,从 FTP 获取一个大型产品列表文件,然后将其拆分成单个事件写入事件流。
- 简单转换和验证
-
例如,屏蔽字段以符合 PII 要求并验证数据结构。
- 根据内容路由数据
-
例如,向多个服务、经纪人或数据存储发送数据。
FaaS 架构非常适合那些可以利用处理资源调配的按需、灵活特性的解决方案。简单的拓扑结构、无状态拓扑结构、不需要对多个事件流进行确定性处理的拓扑结构以及扩展性极强的拓扑结构(如基于队列的处理)都是很好的选择。任何具有高度可变容量的系统都可以从 FaaS 解决方案中受益,因为它们具有横向扩展能力和按需特性,可以快速调配和释放计算资源。
FaaS 解决方案可能包含许多不同的功能,其操作总和构成了有界上下文的解决方案。在不考虑并发性和确定性的情况下,它们的表现也非常出色。但是,一旦确定性开始发挥作用,就必须非常小心地确保事件流处理的正确性和一致性。与基本的消费者解决方案(参见第 11 章)一样,FaaS 解决方案也需要一个事件调度器来确保一致的处理结果,这一点与全功能的轻量级和重量级框架非常相似。
创建基于函数的解决方案有很多种方法,远非本章所能涵盖。但有一些通用原则可以帮助指导你完成整个过程。废话不多说,现在我们来看看如何使用函数构建微服务。
使用函数构建微服务
在使用基于函数的解决方案时,无论您使用的是 FaaS 框架还是事件代理,都必须考虑四个主要组件:
-
功能
-
输入事件流
-
触发逻辑
-
带元数据的错误和扩展策略
FaaS 实现的第一个组件是函数本身。它可以在 FaaS 框架支持的任何代码中实现:
publicintmyFunction(Event[]events,Contextcontext){println("hello world!");return0;}
events 参数包含要处理的单个事件数组,每个事件包含
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access