
亚马逊云科技最近宣布推出了面向Lambda的持久化函数(Durable Functions),这是一项新功能,使开发人员能够使用标准的 Lambda 函数构建复杂的多步骤应用程序(工作流)。
持久化函数的核心特性是它们能够跟踪进度,在失败时自动重试,并在定义的点上暂停执行最长达 1 年,而在等待期间不会产生空闲计算成本。
它的设计目标是允许开发人员在函数代码内完全表达有状态的应用程序逻辑,抽象掉底层的状态机。亚马逊云科技的首席开发人员倡导者 Donnie Prakoso解释说:
在启用函数的持久化执行后,会将新的开源持久化执行 SDK 添加到你的函数代码中。然后,你就可以使用 SDK 原语,如“steps”,为你的业务逻辑添加自动检查点和重试,以及“waits”以高效地暂停执行而不产生计算费用。
(图片来源:AWS文档)
Lambda 持久化函数引入了两个核心原语来处理状态管理和恢复。第一个是借助 context.step()方法的 Step,它为开发人员编写的业务逻辑添加了自动重试和检查点。完成一个 step 后,在重放时将跳过它。第二个是借助 context.wait()方法的 Wait,它会暂停执行给定的持续时间,终止函数、暂停和恢复执行均不产生计算费用。
一个持久化函数的示例可能如下所示:
该功能的宣布立即引发了与 AWS Step Functions 的比较,后者在传统上使用 YAML 定义来处理复杂的无服务器编排。DataDog 的主任工程师和 AWS 英雄 AJ Stuyvenberg 在 LinkedIn 上发帖说:
持久化函数与我们已经知道的 Step Functions 非常相似,但它完全以代码而不是 yaml 步骤定义的方式来进行表达。你可以在状态之间转换、重试失败,甚至暂停/恢复长达一年,所有这些都需要使用你已经熟悉的 Lambda 事件模型(你可能喜欢也可能不喜欢)。
社区中有人回应了这一观点,Hacker News 上的讨论中有一个回应者说:
基本上来讲,这只是一个具有步骤的应用程序,这些步骤在共享数据库中发生进展时会用到检查点(对你来讲,这部分已经抽象出去了)。它比等效的 Step Function 风格的实现要简单得多,没那么神奇,也更便宜。
此外,持久化函数还提供了其他操作,用于更复杂的模式,比如,create_callback()创建一个回调,开发人员可以使用它来等待外部事件的结果,如 API 响应或人工批准,wait_for_condition()暂停直到满足特定条件,如轮询 REST API 以完成处理,以及可用于高级并发场景的 parallel()或 map()操作。
Mike Roberts指出,该功能是如何解决长期架构挑战的:
在今天的功能宣布之前,我通常会推荐使用 Step Function。但一般来讲,如果你的大部分工作已经在你的应用程序代码中完成的话,这就很麻烦了。持久化函数借助可重入机制(AWS 将为同一请求多次运行 Lambda 函数),并且会处理以前已通过的状态来使你的代码回到需要的位置。所以现在,一个请求可以超过 15 分钟,只要 Lambda 函数每次调用的“活跃”时长不超过 15 分钟即可。
此外,Reply 的高级顾问 Alexey Vidanov提到,有了 Lambda 持久化函数,开发人员现在可以在 Lambda 内部运行缓慢或链式的 LLM 步骤,而无需等待成本、启动容器或管理额外的计算路径:
Lambda 持久化函数将编排直接带入 Lambda。这消除了基于时间的开销,并为 LLM、ML 和 Agent 工作流解锁了更清晰的模型。
对于更复杂的场景,持久化函数提供了额外的操作,包括 create_callback()(等待外部事件或人工批准的结果)、wait_for_condition()(暂停直到满足特定条件),以及可用于高级并发场景的 parallel()和 map()。
值得注意的是,竞争对手,尤其是 Microsoft Azure,已经提供了类似的能力,Azure Durable Functions已经发布好几年了。Jason Miles 在LinkedIn帖子中提到了这一背景:
持久化函数在 Azure 中已经存在一段时间了。它们确实有其适用的场景,但你应该评估 15 分钟的运行时间是否是正确的解决方案。偶尔出现尚可,但如果你需要经常等待,并且这是最常见的情况之一,那么你可能需要将其进行进一步分解。
目前,Lambda 持久化函数在美国东部(俄亥俄州)AWS 区域可用,并支持JavaScript/TypeScript(Node.js 22/24)和Python(3.13/3.14)。定价详情可以在专门的定价页面上找到。
原文链接:
AWS Introduces Durable Functions: Stateful Logic Directly in Lambda Code







评论