用 AWS Step Functions 设计的工作流编排 - Standard 与 Express 如何选择

明确 Standard 工作流与 Express 工作流的选择标准,并介绍基于 Retry/Catch 的声明式错误处理和借助分布式 Map 的大规模并行处理。

Step Functions 的基本概念

Step Functions 是无服务器的工作流编排服务。将工作流定义为状态机,每个状态执行 AWS 服务的调用、条件分支和并行处理。串联 Lambda 函数时,需要在各个函数内实现函数之间的调用顺序、错误处理和重试逻辑。相比之下,在 Step Functions 中,这些内容以声明方式写在工作流定义(ASL)中。在可视化编辑器中可以通过拖放构建工作流,并以图形实时查看执行状况。

Standard 工作流与 Express 工作流的选择

Standard 工作流在每次状态转换时持久保存执行历史,支持最长 1 年的长时间执行。费用为每次状态转换约 0.000025 美元(截至 2026 年 8 月)。它适合订单处理、审批流程、数据管道等需要审计执行历史、执行频率相对较低的工作负载。Express 工作流不持久保存执行历史,专门用于最长 5 分钟的短时间执行。费用基于执行次数和执行时间,在大量短时间执行的情况下,费用远低于 Standard 工作流。它最适合来自 IoT 设备的事件处理、API Gateway 的后端、流数据的转换等高吞吐量 / 短时间的工作负载。

错误处理与并行处理

在 Step Functions 的 Retry 字段中,可以按错误类型以声明方式定义重试次数、初始等待时间和退避率。例如,可以进行这样的控制:对 Lambda.ServiceException 以指数退避最多重试 3 次,而对业务逻辑的错误不重试,通过 Catch 转换到其他状态。对于 Catch 字段捕获的错误,可以在回退状态中执行通知发送或清理处理。Map 状态对数组的每个元素并行执行相同的处理。在分布式 Map 模式下,可以将 S3 存储桶中的 CSV 或 JSON 文件作为输入,以最多 10,000 个并行执行来运行大规模批处理。

Step Functions 的费用

Standard 工作流每次状态转换约 0.000025 美元,4,000 次状态转换约为 0.10 美元。Express 工作流按执行次数(每 100 万次约 1.00 美元)和执行时间(每 GB-秒约 0.00001667 美元)的组合计费。在每秒执行数千次的高吞吐量工作负载中,Standard 工作流的状态转换费用会急剧增加,因此 Express 的费用低得多。反过来,对于每天执行数次的长时间运行的工作流,Standard 更便宜。免费套餐为 Standard 工作流每月 4,000 次状态转换,Express 每月 25,000 次执行。

服务集成与调用模式

Step Functions 的优势在于能够用少量代码连接众多 AWS 服务。不仅是 Lambda 的调用,写入数据库、发送消息等各种服务都可以从工作流的步骤中直接调用。有等待处理完成后再进入下一步的同步调用、只启动而不等待的异步调用、等待外部处理完成的回调等,可以根据情况选择调用方式。由于无需编写粘合代码就能组合服务,可以专注于处理流程本身的设计,构建易于维护的工作流。

状态管理与数据传递

在工作流中,一边在各步骤之间传递数据一边推进处理。Step Functions 具备将上一步的输出加工后传给下一步作为输入的机制,可以只提取或整理所需的部分。由此可以以声明方式控制步骤之间的数据流。不过,步骤之间可传递的数据大小有上限,因此采用将大容量的数据放在存储中、只传递引用的设计。通过明确设计数据流,各步骤会可靠地收到所需的信息,即使是复杂的处理也能保持工作流清晰易懂。

可观测性与调试

Step Functions 的一大优点是可以直观地掌握工作流的执行状况。对于每次执行,都会记录哪个步骤在何时执行、成功还是失败的历史。在以图表示的工作流上,可以一眼看出处理进行到哪里、在哪里停止,因此便于定位问题。还可以跟踪各步骤的输入和输出,找出因意外数据而失败的原因。将执行的日志和跟踪与监控结合起来,就可以检测生产环境中的异常。能够将复杂的处理流程可视化,在开发和运维两方面都有帮助。

典型用例

Step Functions 在希望按顺序可靠地执行多个处理的场景中发挥作用。依次进行数据提取 / 转换 / 加载的 ETL 编排、连接多个微服务的处理协调、中途插入人工审批的业务流程等是典型例子。也可以加入补偿处理,在一系列处理中的一部分失败时撤销之前的操作,以保持一致性。它也支持并行处理大量数据的用途。能够以高可靠性组装单个函数无法完全表达的、带有状态的多步骤处理,这正是它作为工作流平台的价值。

总结

Step Functions 是在无服务器架构中管理工作流复杂性的服务。它将 Lambda 函数之间的集成逻辑从代码中分离出来,并可以通过声明式的工作流定义进行可视化 / 管理。通过分别使用 Standard 与 Express 来优化成本,并通过 Retry/Catch 将错误处理标准化,可以构建稳健的无服务器应用程序。

参考资料(AWS 官方)

本页的第一手信息来源是 AWS 官方网站及官方文档。最新的规格与价格请以下列官方页面为准。

如本页内容与官方文档不一致,请以官方文档为准。

分享