无服务器架构通过将长时间运行的进程分解为更小、有时限的任务,并使用编排工具来管理工作流程来处理它们。像 AWS Lambda 这样的平台施加了严格的超时限制(通常为 15 分钟),因此无法长时间运行单个函数。为了解决这个问题,开发人员将任务分成多个步骤,以便在这些限制范围内完成,并使用 AWS Step Functions 或 Azure 中的持久函数等服务来协调执行。例如,处理大型数据集可能涉及 Lambda 函数,该函数处理一块数据,将进度保存到数据库,并触发下一次迭代,直到完成。这种方法使单个函数保持简短,同时保持端到端的工作流程连续性。
编排工具对于管理长时间运行的无服务器工作流程中的状态和重试至关重要。Step Functions 允许定义状态机,跟踪进度、处理错误并在 Lambda 调用之间传递数据。例如,视频编码作业可以分为多个阶段:拆分文件、并行编码片段以及合并结果。每个阶段都作为单独的 Lambda 调用运行,Step Functions 管理依赖关系,并在某个步骤失败时进行重试。同样,Azure Durable Functions 使用“协调器”模式来检查点进度,并在中断后从上次已知状态恢复。这些工具抽象了跨短期函数跟踪执行的复杂性。
开发人员还使用带有队列或流的异步事件驱动模式来处理长时间运行的任务。例如,初始 Lambda 函数可能会将消息放入 Amazon SQS 或写入 DynamoDB 表,以触发后续处理。每条消息可能代表一个工作单元,例如调整图像大小或聚合日志,由单独的函数处理。诸如 AWS Batch 或 Fargate 之类的服务可以补充无服务器,用于计算密集型任务,但纯无服务器解决方案优先考虑无状态的、事件触发的步骤。虽然这增加了管理状态和错误处理的复杂性,但它避免了服务器维护并自动扩展。关键是设计尊重平台限制的工作流程,同时通过分解和编排保持可靠性。