你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文帮助你根据托管平台、缩放需求和操作要求,在两个 Durable Task 托管模型—Durable Functions(Azure Functions)和 独立 Durable Task SDK(自托管)之间做出决定。
小窍门
已经知道你的托管平台了? 跳转到 平台查找表 以获取快速答案。
如 “什么是持久任务”中所述,Durable Task 支持两个托管模型:
- Azure Functions (通过 Durable Functions)
- 自承载(通过独立持久任务 SDK)。
这两个托管模型都提供相同的核心持久执行功能(业务流程、活动、计时器、外部事件等),但应用程序托管、缩放和部署的方式有所不同。
一般情况下,应用程序运行的位置决定了使用的托管模型。 如果要在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 集成还是直接部署 Functions 运行时。 因此,这两个平台都支持任一托管模型。 有关Azure Functions托管模型的详细信息,请参阅Azure Functions托管计划。
比较托管模型
下表总结了两个托管模型之间的主要差异:
| 持久函数(Azure Functions) | 独立持久任务 SDK(自托管) | |
|---|---|---|
| 托管 | Azure Functions(消耗、Flex 消耗、高级)、应用程序服务和容器应用(带 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) |
注释
当函数应用在空闲后启动时,会发生冷启动。 高级 和 专用 托管计划使实例保持温暖,以减少冷启动延迟。
Flex Consumption 托管计划提供“始终可用实例”的概念,以缓解冷启动问题。
详细了解 Azure Functions 托管模型。
内置的 HTTP API
Azure Functions为函数应用提供 HTTP 终结点,Durable Functions扩展利用它为通过 HTTP 进行实例管理提供内置支持。
使用持久任务 SDK 时,需要根据托管计算实现自己的 HTTP 终结点。
| 功能 | Durable Functions | 持久任务软件开发工具包 |
|---|---|---|
| 管理 HTTP API | ✅ 内置 | ❌ 实现自己的 |
| 自动状态 URL | ✅ 内置 | ❌ 实现自己的 |
Durable Functions HTTP 特性
Durable Functions会自动公开 HTTP 终结点,用于启动业务流程、查询状态、引发事件和终止实例。 这些 API 遵循异步 HTTP 轮询模式,可以轻松地与外部系统集成。
注释
如果您更倾向于不使用内置 HTTP API,Durable Functions 支持直接使用 DurableTaskClient 类。
了解详细信息: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 SDKs 在代码和环境变量(连接字符串/终结点)中配置任务中心。
了解详细信息: 任务中心
诊断和版本控制
| 功能 | 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 SDKs。
注释
Durable Task Framework (DTFx):Durable Task Framework 是一个社区维护的开源 .NET 库,用于持久化编排。 它在内部用作Durable Functions的依赖项,但不附带官方Microsoft支持。 如果要启动新项目,请改用新式 Durable Task SDK 或Durable Functions。
后续步骤
开始使用你所选择的框架:
然后,详细了解 Durable Task Scheduler 后端提供程序。