选择 Durable Task 托管模型

本文帮助你根据托管平台、缩放需求和操作要求,在两个 Durable Task 托管模型—Durable Functions(Azure Functions)和 独立 Durable Task SDK(自托管)之间做出决定。

Tip

已经知道你的托管平台了? 跳转到 平台查找表 以获取快速答案。

如 “什么是持久任务”中所述,Durable Task 支持两个托管模型:

这两个托管模型都提供相同的核心持久执行功能(业务流程、活动、计时器、外部事件等),但应用程序托管、缩放和部署的方式有所不同。

一般情况下,应用程序运行的位置决定了使用的托管模型。 如果要在Azure Functions上进行构建,请使用Durable Functions。 如果要构建任何其他计算平台,请使用独立的 Durable Task SDK。

基于托管平台进行选择

如果已经知道应用程序的托管平台,下表可帮助你确定要使用的托管模型:

托管平台 托管模型
Azure Functions (消耗量、高级版) Durable Functions
Azure 容器应用(带Azure Functions运行时) 任一个
Azure 应用服务(带Azure Functions运行时) 任一个
Azure Kubernetes 服务 (AKS) 独立持久任务 SDK
虚拟机或本地 独立持久任务 SDK

注意

Azure 应用服务 和 Azure 容器应用 可以通过 完全托管的 Azure Functions 集成 或直接部署 Azure Functions 运行时来托管其运行时。 因此,这两个平台都支持任一托管模型。 有关Azure Functions托管模型的详细信息,请参阅Azure 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)

注意

当函数应用在空闲后启动时,会发生冷启动。 高级 和 专用 托管计划使实例保持温暖,以减少冷启动延迟。

详细了解 Azure Functions 托管模型。

内置的 HTTP API

Azure Functions为函数应用提供 HTTP 终结点,Durable Functions扩展利用它为通过 HTTP 进行实例管理提供内置支持。

使用持久任务 SDK 时,需要根据托管计算实现自己的 HTTP 终结点。

Feature Durable Functions 持久任务软件开发工具包
管理 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 Task Scheduler —— 一个用于业务流程状态持久性和执行的完全托管的 Azure 服务(pricing)。 Durable Functions还支持自带存储后端(Azure 存储、MSSQL 和 Netherite)。 Durable Task SDK 仅使用 Durable Task Scheduler。

了解详细信息: 存储提供程序

任务中心配置

Durable Functions在 host.json 文件中配置任务中心。 Durable Task SDK 在代码和环境变量(连接字符串/终结点)中配置任务中心。

了解详细信息: 任务中心

诊断和版本控制

Feature Durable Functions 持久任务软件开发工具包
持久任务计划程序仪表板 ✅ 是的 ✅ 是的
Application Insights ✅ 内置 手动安装
零停机时间部署 ✅ 函数插槽 特定于平台

了解详细信息: 诊断 | 版本控制

何时选择每个模型

在两个托管模型之间进行选择时,请考虑以下因素:

请选择 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 是一个社区维护的开源 .NET 库,用于持久化编排。 它在内部用作Durable Functions的依赖项,但不附带官方Microsoft支持。 如果要启动新项目,请改用新式 Durable Task SDK 或Durable Functions。

后续步骤

开始使用你所选择的框架:

然后,详细了解 Durable Task Scheduler 后端提供程序。