持久任务是Microsoft实现的持久执行,这是一种行业范围内通过自动持久化进程来使普通代码容错的方法。 它是一个构建容错工作流和编排的框架,类似于普通代码。 你无需管理复杂的重试逻辑、状态机或消息队列,而是将业务逻辑写成直接的函数,而 Durable Task 则为你处理状态持久化、自动恢复和分布式协调。
持久任务工作流可以运行数小时、数天甚至数月,在发生任何崩溃、重启或重新部署后,能够可靠地从上一个完成的步骤恢复。 常见用例包括分布式事务、多代理 AI 业务流程、数据处理管道和基础结构管理。
本文其余部分将解释Durable Task的定位、支持的语言和托管模型,以及它的结构,以便你决定如何利用它构建容错应用。
持久任务包括哪些内容
持久任务包括:
- 自行托管应用程序的 持久任务 SDK。
- Durable Functions 用于 Azure Functions 上的无服务器托管。
- Durable Task Scheduler,这是专为持久工作负荷而构建的完全托管的后端服务。
关键持久任务用例
当应用程序需要跨分布式服务进行可靠且长时间运行的工作流协调时,请使用 Durable Task。 常见方案包括:
- 长时间运行进程:持久任务能够管理长时间运行的进程的状态和进度,即使存在中断或错误。 示例包括订单处理、数据管道、机器学习模型训练和长时间运行的模拟。
- 并行与扇出/扇入场景:Durable Task可以协调多个工人在不同机器上并行运行的工作,并汇总结果。 示例包括图像处理、映射化简作业和 ETL 工作流。
- 协调微服务和 API:Durable Task 可以通过复杂的控制流和错误处理协调分布式服务、API 和计算机的工作。 Durable Task 还支持采用 Saga 模式的分布式事务,其中每个步骤都包含补偿逻辑,并会在后续步骤失败时自动运行。
- 业务流程自动化:持久任务可以自动化复杂且确定性的业务流程,这些流程涉及多步骤、依赖关系、人机操作和长期错误处理。 示例包括供应链管理、文档评审、客户载入和身份验证。
- 基础结构自动化:Durable Task 可以使用复杂的依赖项和错误处理来管理基础结构预配、配置和部署。 示例包括云资源管理和 CI/CD 管道。
- 多智能体编排:Durable Task 可以协调多个 AI 代理的工作,确保在长时程内可靠地遵循任务要求,并在复杂的多步骤 AI 流程中高效利用令牌。 示例包括用于深入研究、编码和客户支持的 AI 代理。
这些场景的一个共同点是,它们涉及的工作过于复杂、运行时间过长或过于分散,无法用临时代码可靠管理。 Durable Task提供了底层保证——持久性、容错性和有状态协调——因此你可以用直接的代码表达这些工作。
支持的语言和持久任务托管模型
Durable Task支持两种托管模式中的多种编程语言:Azure Functions(通过Durable Functions扩展)和自托管(通过独立的Durable Task SDK支持)。 Azure Functions托管模型提供完全托管的无服务器计算环境,内置扩展和编排功能,而自托管模型支持在任何计算平台上运行持久应用,如Azure 容器应用、Azure Kubernetes 服务,Azure 应用服务, or virtual machines.
| 语言 | Azure Functions | 自承载 |
|---|---|---|
| .NET (C#/F#) | 是的 | 是的 |
| JavaScript/TypeScript | 是的 | 是的 |
| Python | 是的 | 是的 |
| Java | 是的 | 是的 |
| PowerShell | 是的 | 否 |
注意
Durable Task Go SDK 也作为社区支持的开源自托管场景选项提供,但目前处于实验阶段,尚未推荐用于生产环境。
有关在Azure Functions和自承载之间进行选择的指导,请参阅选择托管模型。
持久任务架构:SDK 与状态存储后端
Durable Task 有两个主要层:在应用程序代码中使用的 SDK 和用于管理状态 的状态存储后端 。
Durable Task SDK
你可以使用Durable Task SDK在应用代码中编写编排、活动和实体。 它内部处理持久执行的机制——重放编排器功能、管理本地执行上下文,并与状态存储后端通信。 Durable Task在支持的语言和两种托管模式——Azure Functions和自托管——中提供了多种SDK选项。
有关在这些选项之间进行选择的指导,请参阅 “选择托管模型”。
状态存储后端
状态存储后端保持编排状态,维护执行历史,并协调跨计算实例的分布式扩展。
推荐的状态存储选项是持久任务调度器——一个完全托管的Azure服务,专为持久任务工作负载设计并高度优化。 它适用于Durable Functions和独立的 Durable Task SDK,并提供最丰富的功能集,无需管理存储基础结构。
或者,Durable Functions支持多种用户自选(BYO)存储选项。 这些选项让你对状态存储位置有更多控制权,但需要你自己配置和管理底层基础设施。 目前,BYO 存储后端仅适用于 Durable Functions。
有关存储选项的详细信息,请参阅 存储提供程序。
额外的持久任务资源
研究出版物
Microsoft与Microsoft Research合作开发了Durable Task。 因此,团队产出了研究论文和研究成果,包括:
- Durable Functions:有状态无服务器语义(OOPSLA'21)
- 具有 Durable Functions 和 Netherite 的无服务器工作流(预打印)
视频概述
以下视频重点介绍了Durable Functions的优势:
后续步骤
- 从以下选项入手:
- 持久任务计划程序