

# Lambda 持久性函数
<a name="durable-functions"></a>

Lambda 持久性函数使您能够构建具有高韧性的多步骤应用程序和人工智能工作流，这些应用程序和工作流能够最长运行一年，并且即便出现中断也能保持稳定进展。当一个持久性函数运行时，这个完整的生命周期就被称为一次持久执行。它利用检查点来跟踪进度，并通过回放、重新从头开始执行并跳过已完成的工作的方式来自动从故障中恢复。

在每个函数中，您都将持久操作用作基础构建块。步骤通过内置的重试和进度跟踪功能执行业务逻辑，而等待会暂停执行但不会产生计算费用，因此非常适合长时间运行的流程，例如人工干预工作流程或轮询外部依赖项。无论您是在处理订单、协调微服务，还是在编排代理式人工智能应用程序，持久性函数都能自动维护状态，并在您使用熟悉的编程语言编写代码时从故障中自动恢复。

## 主要优势
<a name="durable-functions-benefits"></a>

**以自然的方式编写弹性代码：**借助熟悉的编程结构，您能够编写出能够自动处理故障的代码。内置的检查点机制、透明的重试功能以及自动恢复功能意味着您的业务逻辑能够保持清晰且专注。

**仅按实际用量付费：**在等待操作期间，您的函数会暂停运行，但不会产生计算费用。对于那些长时间运行数小时或数天的工作流程，您只需为实际的处理时间付费，而无需为闲置等待时间付费。

**操作简便性：**借助 Lambda 的无服务器模型，您可以实现自动扩缩（包括扩缩至零），而无需管理基础设施。持久性函数可自动处理状态管理、重试逻辑和故障恢复，从而减少操作开销。

## 何时使用持久性函数
<a name="durable-functions-use-cases"></a>

**短期协调：**在多个服务之间协调支付、库存和发货事宜，并在出现故障时自动进行回滚操作。通过验证、付款授权、库存分配和履行等环节来处理订单，并确保完成任务。

**放心处理付款事宜：**构建弹性支付流程，使其能够在出现故障时保持交易状态，并能自动处理重试操作。协调多步骤授权、欺诈检测以及跨支付提供商的结算操作，实现各步骤间的完全可审计性。

**构建可靠的 AI 工作流程：**创建多步骤 AI 工作流程，以将模型调用串联起来，纳入人类反馈，并在出现故障时以确定性的方式处理长时间运行的任务。自动在暂停后恢复运行，并且仅按实际执行时间收费。

**协调复杂的订单履行：**通过内置的弹性机制，实现库存、支付、发货和通知系统之间的订单处理协调。自动处理部分故障，即便出现中断也能保留订单状态，并且能够高效地等待外部事件而无需消耗计算资源。

**自动执行多步骤业务工作流程：**为员工入职、贷款审批以及涵盖数天或数周的合规流程构建可靠的工作流程。在人工审批、系统集成以及调度任务过程中保持工作流程状态的一致性，同时提供对流程状态和历史记录的完全可见性。

### 持久性函数与 Step Functions 相比如何
<a name="durable-functions-vs-step-functions"></a>

持久性函数和 Step Functions 两者都为工作流编排提供自动状态管理。主要区别在于它们的运行位置以及您如何定义工作流：
+ **持久性函数：**在 Lambda 中运行，使用标准编程语言，在 Lambda 环境中进行管理
+ **Step Functions：**独立服务、基于图形的 DSL 或视觉设计器，完全托管，零维护

持久性函数非常适合在 Lambda 中进行应用程序开发，其中工作流与业务逻辑紧密耦合。Step Functions 擅长跨 Amazon 服务进行工作流编排，您需要可视化设计、与 220 多种服务的本机集成以及零维护基础设施。

有关详细比较，请参阅[持久性函数或 Step Functions](durable-step-functions.md)。

## 工作原理
<a name="durable-functions-how-it-works"></a>

 在后台，持久性函数是使用检查点/回放机制的常规 Lambda 函数，该机制用于跟踪进度并通过用户定义的暂停点支持长时间运行的操作，通常被称为持久执行。当您的函数从暂停或中断中恢复后，系统会执行重放操作。在回放过程中，您的代码会从头开始运行，但会跳过已完成的检查点，会使用已存储的结果而不是重新执行已完成的操作。这种回放机制既能保证一致性，又能支持长时间的执行过程。

为了在您的应用程序中利用这种检查点与回放机制，Lambda 提供了一种持久执行 SDK。该 SDK 消除了管理检查点和重放的复杂性，只向您展示了一些称为持久操作的简单基元，您可以在代码中使用这些基元。该 SDK 可用于 JavaScript、TypeScript、Python 和 Java（预览版），可与您现有的 Lambda 开发工作流程无缝集成。

使用该 SDK 封装您的 Lambda 事件处理程序后，该处理程序会随事件提供一个 DurableContext。此上下文使您能够访问诸如步骤和等待之类的持久操作。您可以按照常规的顺序编写函数逻辑代码，但无需直接调用服务，而是将这些调用封装在步骤中以实现自动检查点机制和重试。当您需要暂停执行时，可以添加等待操作，这样可以暂停您的函数运行，而不会产生费用。该 SDK 可以在后台处理所有复杂的状态管理和重放，从而确保您的代码简洁易读。

 ![\[Filter for Amazon Inspector results related to Lambda functions\]](http://docs.amazonaws.cn/lambda/latest/dg/images/how_durable_works.png) 

## 后续步骤
<a name="durable-functions-next-steps"></a>
+ [开始使用持久性函数](durable-getting-started.md)
+ [探索持久执行 SDK](durable-execution-sdk.md)
+ [持久性函数或 Step Functions](durable-step-functions.md)
+ [监控和调试持久性函数](durable-monitoring.md)
+ [查看安全性和权限](durable-security.md)
+ [遵循最佳实践](durable-best-practices.md)