使用 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 USD。适用于订单处理、审批流程、数据管道等需要执行历史审计且执行频率相对较低的工作负载。Express 工作流不持久化执行历史,专为最长 5 分钟的短时间执行而设计。费用基于执行次数和执行时间,在大量短时间执行场景下比 Standard 工作流成本大幅降低。适用于 IoT 设备事件处理、API Gateway 后端、流数据转换等高吞吐量短时间工作负载。
错误处理与并行处理
Step Functions 的 Retry 字段可以按错误类型声明式地定义重试次数、初始等待时间和退避率。例如,对 Lambda.ServiceException 最多重试 3 次并使用指数退避,对业务逻辑错误不重试而通过 Catch 转换到其他状态。Catch 字段捕获的错误可在回退状态中执行通知发送或清理处理。Map 状态对数组的每个元素并行执行相同处理。分布式 Map 模式可以将 S3 存储桶中的 CSV 或 JSON 文件作为输入,以最多 10,000 个并行执行来处理大规模批处理任务。 如需拓展无服务器知识,可参考Amazon 的专业书籍。
Step Functions 的定价
Standard 工作流每次状态转换约 0.000025 美元,4,000 次状态转换约 0.10 美元。Express 工作流按执行次数(每百万次约 1.00 美元)和执行时间(每 GB-秒约 0.00001667 美元)的组合计费。对于每秒数千次执行的高吞吐量工作负载,Standard 工作流的状态转换费用会急剧增加,因此 Express 成本大幅降低。相反,对于每天仅执行几次的长时间工作流,Standard 更为经济。免费额度为 Standard 工作流每月 4,000 次状态转换,Express 每月 25,000 次执行。
总结
Step Functions 是管理无服务器架构中工作流复杂性的服务。它将 Lambda 函数间的协调逻辑从代码中分离,通过声明式工作流定义实现可视化和管理。通过 Standard 与 Express 的合理选择优化成本,通过 Retry/Catch 标准化错误处理,从而构建健壮的无服务器应用程序。