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
环境变量。 例如,若要启用名为 taskhub1
和 taskhub2
的两个任务中心,可运行以下命令:
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 存储库中提交问题。