如 “什么是持久任务”中所述,Durable Task 支持两个托管模型:
- Azure Functions (通过 Durable Functions)
- 自承载 (通过 独立的持久任务 SDK)。
这两个托管模型都提供相同的核心持久执行功能(业务流程、活动、计时器、外部事件等),但应用程序托管、缩放和部署的方式有所不同。
一般情况下,应用程序运行的位置决定了使用的托管模型。 如果要在Azure Functions上进行构建,请使用Durable Functions。 如果要构建任何其他计算平台,请使用独立的 Durable Task SDK。
基于托管平台进行选择
如果已经知道应用程序的托管平台,下表可帮助你确定要使用的托管模型:
| 托管平台 | 托管模型 |
|---|---|
| Azure Functions (消耗量、高级版) | 持久函数 |
| Azure 容器应用(带Azure Functions运行时) | 任一个 |
| Azure 应用服务(带Azure Functions运行时) | 任一个 |
| Azure Kubernetes 服务 (AKS) | 独立持久任务 SDK |
| 虚拟机或本地 | 独立持久任务 SDK |
注释
Azure 应用服务和Azure 容器应用可以通过完全托管的Azure Functions集成或直接部署 Functions 运行时来承载Azure Functions运行时。 因此,这两个平台都支持任一托管模型。 有关Azure Functions托管模型的详细信息,请参阅Azure Functions托管计划。
比较托管模型
下表总结了两个托管模型之间的主要差异:
| Durable Functions(Azure Functions) | 独立持久任务 SDK(自托管) | |
|---|---|---|
| 托管 | Azure Functions(消耗、高级)、应用服务和容器应用(使用 Functions 运行时) | 任何平台:Azure 容器应用、AKS、应用服务、VM、本地 |
| 缩放 | 自动,由Azure Functions托管规模基础结构管理 | 自行管理缩放或使用平台原生自动缩放(例如 Kubernetes 上的 KEDA ) |
| 触发器 | 对 HTTP、队列、计时器、事件网格和其他 Azure Functions 触发器 的内置支持 | 定义自己的入口点(例如 HTTP 终结点、消息使用者等) |
| 状态存储 | 可优化任务计划程序(建议),Azure 存储,MSSQLNetherite | 持久任务计划程序 |
| 语言 | .NET (C#/F#)、JavaScript/TypeScript、Python、Java、PowerShell | .NET (C#/F#)、JavaScript/TypeScript、Python、Java |
| 监控 | 与 Azure 门户 Application Insights 的内置集成 | 设置自己的监视解决方案(例如,Azure Monitor、Prometheus 或 Grafana) |
内置的 HTTP API
Azure Functions为函数应用提供 HTTP 终结点,Durable Functions扩展利用它为通过 HTTP 进行实例管理提供内置支持。
使用持久任务 SDK 时,需要根据托管计算实现自己的 HTTP 终结点。
| 功能 | 持久函数 | 持久任务软件开发工具包 |
|---|---|---|
| 管理 HTTP API | ✅ 内置 | ❌ 实现自己的 |
| 自动状态 URL | ✅ 内置 | ❌ 实现自己的 |
Durable Functions HTTP 功能
Durable Functions会自动公开 HTTP 终结点,用于启动业务流程、查询状态、引发事件和终止实例。 这些 API 遵循异步 HTTP 轮询模式,可以轻松地与外部系统集成。
注释
如果您更希望直接使用 DurableTaskClient 类而不是内置 HTTP API,Durable Functions 也支持这种用法。
了解详细信息:HTTP 功能,请参阅 Durable Functions | HTTP API 参考
持久任务 SDK 管理
使用 Durable Task SDK,可以直接使用 DurableTaskClient 类来管理业务流程实例。 如果需要 HTTP 终结点,请使用首选 Web 框架自行实现这些终结点。
了解详细信息: 管理业务流程实例
存储后端
Durable Functions支持多个存储后端,而 Durable Task SDK 则独占使用 Durable Task 计划程序。
小窍门
持久任务计划程序是处理编排状态的持久性和执行的完全托管Azure服务。 它被配置为一个独立的 Azure 资源,并拥有自己的 pricing。 它是 Durable Functions 推荐的后端,也是 Durable Task SDK 唯一支持的后端。
| 存储提供商 | 持久函数 | 持久任务软件开发工具包 |
|---|---|---|
| 持久任务计划程序 | ✅ 推荐 | ✅ 必填 |
| Azure 存储 | ✅ 受支持 | ❌ 不支持 |
| Microsoft SQL Server | ✅ 受支持 | ❌ 不支持 |
| Netherite | ⚠️ 受支持,但已停用 | ❌ 不支持 |
了解详细信息: 存储提供程序
任务中心配置
Durable Functions在 host.json 文件中配置任务中心。 Durable Task SDK 在代码和环境变量(连接字符串/终结点)中配置任务中心。
了解详细信息: 任务中心
诊断和版本控制
| 功能 | 持久函数 | 持久任务软件开发工具包 |
|---|---|---|
| 持久任务计划程序仪表板 | ✅ 是 | ✅ 是 |
| Application Insights | ✅ 内置 | 手动安装 |
| 零停机时间部署 | ✅ 函数插槽 | 特定于平台 |
这两种托管模型都支持 Durable Task Scheduler 作为状态存储后端,后者同时提供状态存储和额外的监视功能。 Durable Functions还支持多个自备(BYO)存储方案,适用于需要这些方案的各种情况。 有关详细信息,请参阅 存储提供程序。
更多注意事项
在两个托管模型之间进行选择时,请考虑以下因素:
| 请选择 Durable Functions 如果... | 选择独立的持久任务 SDK(如果... |
|---|---|
| 需要内置Azure Functions触发器(HTTP、队列、计时器等)。 | 你希望完全控制容器及其入口点。 |
| 你已熟悉Azure Functions托管模型。 | 您首选轻量级 SDK,避免 Azure Functions 运行时的额外开销。 |
| 您希望Azure门户集成用于函数管理。 | 你希望相同的代码可以跨容器平台(AKS、应用服务等)移植。 |
| 需要从 多个存储后端中进行选择。 | 你已有要与之集成的非 Functions 应用程序代码。 |
| 你需要可以缩减至零的 无服务器、事件驱动应用 。 | 您需要始终在线、低延迟的工作负载,无需冷启动延迟。 |
| 您想选择消耗计划 按执行付费定价。 | 需要针对批处理进行优化的 高吞吐量方案 。 |
| 需要使用声明性触发器和绑定快速制作原型。 | 已有 容器化或 Kubernetes 应用程序。 |
Migration
如果已使用Durable Functions并且想要迁移到基于容器的部署,或者利用 Durable Task SDK 的托管灵活性,则迁移非常简单。 这两个框架之间的业务流程代码非常相似。
有关详细的迁移指南,请参阅 从 Durable Functions 迁移到 Durable Task SDK。
Durable Task Framework (DTFx)
Durable Task Framework(DTFx)是一个社区维护的开源.NET库,用于持久化协调。 它提供与现代 Durable Task SDK 类似的编排原语,并且仍在包括 Microsoft 在内的许多团队中积极用于生产环境。 值得注意的是,DTFx 在内部用作Azure Durable Functions的依赖项,这是它继续维护的原因之一。 但是,它并不附带官方Microsoft支持-bug 和功能请求是尽最大努力解决的。 它还要求你自己管理托管和操作基础结构。
如果要启动新项目或需要官方Microsoft支持,我们建议改用新式 Durable Task SDK 或Durable Functions。
后续步骤
开始使用你所选择的框架:
然后,详细了解 Durable Task Scheduler 后端提供程序。