注释
术语 工作流 通常具有多个含义。 在Durable Functions的上下文中,你可能会看到工作流称为编排。 为避免与容器业务流程有任何混淆,本文改用术语工作流。
工作流程是一个多步骤操作,通常按特定顺序进行,或涉及长期执行的任务。 需要工作流的实际方案包括:
- 订单处理
- AI 代理业务流程
- 基础结构管理
- 数据处理pipelines
临时基础结构故障或依赖项停机等事件通常可能会中断工作流执行。 为防止中断,使用 持久执行,从故障点继续执行,而非重启。
持久执行
持久执行提供了一种容错方法来运行代码,并通过自动重试和状态持久性正常处理故障。 持久执行基于三个核心原则构建:
- 增量执行: 每个操作都独立执行,并依次进行。
- 状态持久性: 保存每个步骤的输出以确保进度不会丢失。
- 容错: 如果步骤失败,则会从上一个成功步骤重试该作,跳过之前完成的步骤。
持久化执行有利于需要进行有状态操作链的场景。 它简化了复杂、长时间运行、有状态和容错应用程序模式的实现。
可以使用Azure托管的工作流框架之一在Azure 容器应用中实现持久执行。
Azure中面向开发人员的工作流框架
Azure提供了两个面向代码的工作流框架,可用于生成在Azure 容器应用上运行的应用:
- 持久任务软件开发工具包
- Durable Functions
这些框架专为开发人员设计,以多种编程语言提供。
持久任务 SDK
持久任务 SDK 是轻型客户端 SDK,提供对创作工作流无特定倾向性的编程模型。 与与 Functions 计算紧密耦合的Durable Functions不同,这些便携式 SDK 与任何计算分离。 它们使您的应用可以连接到托管在 Azure 中的工作流引擎,称为 Durable Task Scheduler。
为了确保持久执行,Durable Task SDK 需要一个storage后端才能在应用运行时保留工作流状态。 持久任务计划程序后端在应用运行时持续检查工作流状态,并自动处理重试以确保持久执行。 计划程序负责以下内容:
- 计划和管理工作流任务执行。
- 存储和维护工作流状态。
- 处理持久性、失败和重试。
- 对容器应用大规模执行业务流程进行负载均衡。
SDK 可用性
| 语言 | 地位 |
|---|---|
| .NET (C#) | GA |
| Python | GA |
| Java | GA |
| JavaScript/TypeScript | Preview |
注释
JavaScript / TypeScript 持久任务 SDK 目前处于预览阶段。 了解建议使用哪个框架供生产使用。
Durable Functions
作为Azure Functions的一项功能,Durable Functions继承其许多特征,作为Azure中面向代码的工作流框架产品/服务。 例如,使用 Durable Functions,可以获得以下好处:
- 通过 Azure Functions 的触发器和绑定,集成与其他 Azure 服务
- 本地开发体验
- 无服务器定价模型
人工智能代理的持久执行
那些能连续运行数小时、调用外部工具、并应对基础设施故障的AI代理,是持久执行的自然选择。 持久任务编程模型解决了生产代理工作负载中常见的挑战:
- 每个大型语言模型(LLM)调用都检查点:如果工作流中途发生故障,代理会从上一个检查点恢复,而不是重新消耗令牌并重复已完成的工作。
- 人工参与审批:暂停代理工作流程,等待人员批准或拒绝步骤,并可配置超时。
- 重试不稳定的工具和模型调用:内置的重试策略带回退功能,可处理来自LLM API和外部服务的暂时性故障。
- 生存舱重启:在容器应用中,扩展事件和部署可以回收副本。 持久执行会在新副本上准确地从代理中断的地方继续执行。
为何选择 Azure 容器应用 用于工作流
Azure 容器应用 提供了多种平台功能,以补充持久执行:
- 扩展到零:当没有待处理的工作流程任务时,工作容器应用会缩减到零副本,因此你只为活跃计算付费。
- 基于事件驱动的KEDA扩展:基于编排和活动待办列表,使用 KEDA缩放器扩展工作者副本,将计算量与工作负载需求匹配。
- 托管身份:使用托管身份为你的容器应用认证到持久任务调度器及其他 Azure 服务,无需管理凭证。
- 入口与网络:用 内置入口 暴露你的客户端容器应用,同时保持工作应用内部。
如何选择
你可以托管使用 Durable Task SDK 或 Durable Functions 在 Azure 容器应用 中构建的应用。 下表提供了快速对比,帮助您做出决定:
| Feature | 持久任务 SDK | Durable Functions |
|---|---|---|
| 计算耦合 | 脱钩——可运行在任何集装箱平台上 | 与 Azure Functions 运行时耦合 |
| 语言(GA) | .NET,Python,Java | .NET、Python、Java、JavaScript、PowerShell |
| 语言(预览) | JavaScript/TypeScript | 不可用 |
| 触发条件与绑定 | 你自己定义切入点 | 内置 Azure Functions 触发器(HTTP、Queue、Timer、Event Grid 等) |
| 存储后端 | 持久任务计划程序 | Durable Task Scheduler, Azure 存储, MSSQL, Netherite |
| 定价模型 | 为您的容器应用计算资源付费 | 无服务器(消耗计划)或容器应用计算 |
| 可移植性 | Runs unchanged on Azure Kubernetes Service (AKS)、Azure 应用服务 及 virtual machines (VMs) | 需要 Azure Functions 运行时 |
如需详细指导,请参见 “选择您的编排框架”。