Azure Functions 持久任务计划程序(预览版)

Durable Task Scheduler 在 Azure 中提供持久执行。 持久执行是运行代码的容错方法,它通过自动重试和状态持久性处理失败和中断。 持久化执行有助于以下场景:

  • 分布式事务
  • 多代理协调
  • 数据处理
  • 基础结构管理和其他。

业务流程框架

Azure 提供了两个面向开发人员的业务流程框架,可用于生成在任何计算环境中运行的有状态应用,而无需构建容错架构。 可以将 Durable Task Scheduler 与以下业务流程框架配合使用:

  • 持久性函数
  • 持久任务 SDK

了解哪些业务流程对项目效果更好。

建筑

对于所有 Durable Task Scheduler 业务流程框架,可以使用 Azure 资源管理器创建 类型为 Microsoft.DurableTask/scheduler 的计划程序 实例。 每个计划程序资源在内部有自身专用的计算和内存资源,并针对以下方面进行了优化

  • 调度业务流程协调程序、活动和实体工作项
  • 以最低的延迟大规模存储和查询历史记录
  • 通过 Durable Task Scheduler 仪表板提供丰富的监视体验

与 BYO 存储提供程序不同,Durable Task Scheduler 提供程序是一种专用构建的后端即服务,针对 Durable Task Framework 的特定需求进行了优化。

下图显示了 Durable Task Scheduler 后端的体系结构及其与连接的应用的交互。

持久任务计划程序体系结构的架构图。

操作性分离

持久任务计划程序在 Azure 中作为与应用分开的资源运行。 出于多种原因,这种隔离非常重要:

  • 减少资源消耗
    使用托管计划程序(例如 Durable Task Scheduler(而不是 BYO 存储提供程序)可减少管理分区和其他复杂状态存储交互开销导致的 CPU 和内存资源消耗。

  • 故障隔离
    将计划程序与应用分离可降低级联故障的风险,并提高连接应用中的整体可靠性。

  • 独立缩放
    计划程序资源可以独立于应用进行缩放,以便更好地进行基础结构资源管理和成本优化。 例如,多个应用可以共享相同的计划程序资源,这对具有多个团队或项目的组织很有用。

  • 改进了支持体验
    Durable Task Scheduler 是一项托管服务,为底层基础结构的问题提供简化的支持和诊断。

应用连接

您的应用通过 gRPC 连接至调度程序资源,连接通过 TLS 进行加密保护,并通过应用标识进行身份验证。 终结点地址的格式类似于 {scheduler-name}.{region}.durabletask.io。 例如,myscheduler-123.westus2.durabletask.io

工作项使用推送模型从计划程序流式传输到应用,从而提高端到端延迟,并消除轮询需求。 应用可以并行处理多个工作项,并在相应的业务流程、活动或实体任务完成时将响应发送回计划程序。

状态管理

持久任务计划程序在内部管理业务流程和实体的状态,而无需单独的存储帐户进行状态管理。 内部状态存储经过高度优化,可与 Durable Functions 和 Durable Task SDK 一起使用,从而提高持久性和可靠性并减少延迟。

计划程序使用内存中和持久性内部存储的组合来管理状态。

  • 内存存储用于短期状态。
  • 持久存储用于恢复和多实例查询作。

功能亮点

实现持久任务调度器的协调框架时,你可以从多个主要优势中受益。

持久任务计划程序仪表板

在创建计划程序资源时,系统会现成地提供相应的仪表板。 仪表板提供所有编排和实体实例的概览,并允许您执行以下操作:

  • 按不同的条件快速筛选。
  • 收集有关业务流程实例的数据,例如状态、持续时间、输入/输出等。
  • 钻取到实例,以获取有关子业务流程和活动的数据。
  • 执行管理操作,例如暂停、终止或重启编排实例。

对仪表板的访问受 标识和基于角色的访问控制保护。

有关详细信息,请参阅 使用 Durable Task Scheduler 仪表板调试和管理业务流程

多个任务中心

状态持久保存在 任务中心任务中心

  • 是业务流程和实体实例的逻辑容器。
  • 提供对状态存储进行分区的方法。

使用一个计划程序实例,可以创建多个可供不同应用使用的任务中心。 每个任务中心都获取其自己的 监视仪表板。 若要访问任务中心, 调用方的身份 必须 具有所需的基于角色的访问控制(RBAC)权限

创建多个任务中心可隔离可以独立管理的不同工作负荷。 例如,你能够:

  • 为每个环境(开发、测试、生产)创建任务中心。
  • 为组织内的不同团队创建任务中心。
  • 跨多个应用共享相同的计划程序实例。

当多个团队有需要协调的情况时,共享计划程序是优化成本的好方法。 尽管可以在一个计划程序实例中创建无限制的任务中心,但它们共享相同的资源;如果一个任务中心负载过大,则可能会影响其他任务中心的性能。

用于本地开发的模拟器

Durable Task Scheduler 模拟器是计划程序后端的轻型版本,可在 Docker 容器中本地运行。 借助它可以:

  • 开发和测试 Durable Function 应用,而无需将其部署到 Azure。
  • 像在 Azure 中一样监视和管理业务流程和实体。

默认情况下,模拟器会公开一个名为 default 的任务中心。 若要公开多个任务中心,请启动模拟器,并使用逗号分隔的任务中心名称列表指定 DTS_TASK_HUB_NAMES 环境变量。 例如,若要启用名为 taskhub1taskhub2 的两个任务中心,可运行以下命令:

docker run -d -p 8080:8080 -e DTS_TASK_HUB_NAMES=taskhub1,taskhub2 mcr.microsoft.com/dts/dts-emulator:latest

注释

模拟器在内部将业务流程和实体状态存储在本地内存中,因此不适合生产用途。

可以通过运行以下命令查看所有可用的模拟器版本:

curl -s https://mcr.microsoft.com/v2/dts/dts-emulator/tags/list

自动清除保留策略

应定期清除过时的业务流程数据,以确保高效使用存储。 Durable Task Scheduler 的自动清除功能提供了简化的可配置解决方案,用于自动管理协调实例清理。 详细了解如何为持久任务计划程序设置自动清楚保留策略。

限制和注意事项

  • 可用区域:

    目前可以在一部分 Azure 区域中创建持久任务计划程序资源。 可以运行以下命令来获取受支持区域的列表:

    az provider show --namespace Microsoft.DurableTask --query "resourceTypes[?resourceType=='schedulers'].locations | [0]" --out table
    

    请考虑对 Durable Functions 应用和 Durable Task Scheduler 资源使用相同的区域来优化性能和某些与网络相关的功能。

  • 计划程序配额:

    目前,最多可在每个区域为每个订阅创建 5 个计划程序

  • 最大有效负载大小:

    持久任务计划程序对以下 JSON 序列化数据类型具有最大有效负载大小限制:

    数据类型 最大大小
    业务流程协调程序输入和输出 1 MB
    活动输入和输出 1 MB
    外部事件数据 1 MB
    业务流程自定义状态 1 MB
    实体状态 1 MB
  • 功能对等:

    某些功能可能尚未在 Durable Task Scheduler 后端中使用,例如:

    注释

    随着持久任务计划程序后端不断接近正式版的推出,功能可用性随时会发生变化。 若要报告问题或请求新功能,请在 Durable Task Scheduler GitHub 存储库中提交问题。

后续步骤