Azure 容器应用中的工作流

注释

术语 工作流 通常具有多个含义。 在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,可以获得以下好处:

人工智能代理的持久执行

那些能连续运行数小时、调用外部工具、并应对基础设施故障的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 运行时

如需详细指导,请参见 “选择您的编排框架”。

后续步骤