使用 Durable Functions 或 Durable Task SDK 生成工作流时,业务流程需要一个位置来存储其状态。 存储提供程序通过将业务流程历史记录、实体状态和内部消息保存到所选后端来处理此问题。 这种持久存储使工作流变得可靠—它们可以暂停、缩放、重启和恢复,而不会丢失进度。
Durable Functions支持各种后端存储提供程序。 可以将应用配置为使用 Durable Task 可用的两种类型的存储提供程序:
- 由 Azure 托管
- 持久任务计划程序(建议)
- “自带存储”(BYO)
- Azure 存储
- Netherite
- Microsoft SQL Server (MSSQL)
注意
目前,无法将数据从一个存储后端提供程序迁移到另一个存储后端提供程序。 如果想要使用新提供程序,请创建一个配置了新提供程序的新应用。
Durable Task SDK 支持 Azure 托管 Durable 任务调度器作为存储提供程序。
持久任务计划程序
Durable Task Scheduler 是一种完全托管的高性能后端提供程序,旨在与 Microsoft Research 协作开发。 它旨在提供管理、可观测性、性能和安全性等方面的最佳用户体验。
Durable Task Scheduler 的主要优势包括:
- 与 BYO 后端提供程序相比,管理和操作开销更低
- 可观测性和管理 仪表板。
- 支持当今所有后端的最高吞吐量。
- 支持使用托管标识进行身份验证。
现有Durable Functions和 Durable Task SDK 用户可以利用计划程序,无需更改代码。 详细了解 Durable Task Scheduler 以及如何 开始使用。
可以在 GitHub 上找到持久任务计划程序的示例。
Azure 存储
Azure Storage是Durable Functions的“自备”存储提供程序之一。 它使用队列、表和 Blob 来保存协调和实体状态,并使用 Blob 许可来管理分区。 Azure Storage提供程序内置于Durable Functions扩展中,没有任何其他依赖项。
Azure 存储提供程序的主要优势包括:
- 无需设置 - 可以使用通过函数应用设置体验创建的存储帐户。
- 成本最低的无服务器计费模型 - Azure 存储基于消耗的定价模型完全基于使用情况(详细信息)。
- 最佳工具支持 - Azure 存储提供跨平台的本地仿真,并与 Visual Studio、Visual Studio Code 和 Azure Functions Core Tools 集成。
- 最成熟 - Azure 存储是最早的、适用于 Durable Functions 的且久经考验的存储后端。
- 支持使用身份而不是机密来连接到存储提供程序。
Azure 存储提供程序不需要任何显式配置、NuGet 包引用或扩展捆绑包引用。 有关详细的配置选项,包括连接、基于标识的身份验证和 host.json 设置,请参阅适用于 Durable FunctionsAzure Storage 提供程序
Microsoft SQL Server (MSSQL)
MSSQL 存储提供程序将所有状态保存到 MSSQL 数据库中。 它与 SQL Server 的本地部署和云托管部署(包括 Azure SQL 数据库)兼容。
MSSQL 存储提供程序的主要优势包括:
- 支持断开连接的环境;使用SQL Server安装时,无需Azure连接。
- 可跨多个环境和云(包括 Azure 托管的和本地)进行移植。
- 强大的数据一致性,支持备份/还原和故障转移,而不会丢失数据。
- 对自定义数据加密(这是 SQL Server 的一种功能)的本机支持。
- 通过内置的存储过程与现有数据库应用程序集成。
详细了解 MSSQL 存储提供程序:
Netherite
注意
将 Netherite 存储后端与 Durable Functions 一起使用的支持将于 2028 年 3 月 31 日结束。 建议评估当前使用 Netherite 的工作负荷的 Durable Task Scheduler 。
Netherite 存储后端由 Microsoft Research 设计和开发。 它在 Azure 页 Blob 的基础上使用 Azure 事件中心和 FASTER 数据库技术。
Netherite 存储提供程序的主要优势包括:
- 与其他存储提供程序相比,吞吐量明显更高,且成本更低。
- 支持性价比优化,使你可以根据需要扩展性能。
- 最多支持 32 个数据分区,其中包含事件中心基本和标准 SKU。
- 与其他提供商相比,在处理高吞吐量工作负载时更具成本效益。
详细了解 Netherite 存储提供程序:
- Netherite 文档。
- Netherite 存储提供程序的源代码。
- 更深入地评估 Netherite 存储提供程序:使用 Durable Functions 和 Netherite 的无服务器工作流。
比较存储供应商
可以使用下表了解各种支持的存储提供程序之间的重大权衡,并确定哪种存储提供程序最适合你的需求。
| 功能 | 持久任务计划程序 | Azure 存储 | MSSQL | Netherite |
|---|---|---|---|---|
| 官方支持状态 | ✅ 正式发布 (GA) | ✅ 正式发布 (GA) | ✅ 正式发布 (GA) | ✅ 正式发布 (GA) |
| 外部依赖关系 | 不适用 | Azure 存储帐户(常规用途 v1) | SQL Server 2019 或 Azure SQL 数据库 | Azure 事件中心 Azure 存储帐户(常规用途) |
| 本地开发和仿真选项 | 持久任务计划程序模拟器 | Azurite v3.12+ (跨平台) | SQL Server Developer Edition (支持 Windows、 Linux 和 Docker 容器) | 支持任务中心内存中仿真(详细信息) |
| 任务中心配置 | 显式 | 显式 | 默认情况下隐式(详细信息) | 显式 |
| 最大吞吐量 | 非常高 | 中等 | 中等 | 非常高 |
| 最大业务流程/实体横向扩展(节点) | 不适用 | 16 | 不适用 | 32 |
| 最大活动性水平扩展(节点) | 不适用 | 不适用 | 不适用 | 32 |
| Durable Entities 支持 | ✅ 完全支持 | ✅ 完全支持 | ⚠ ️受支持,但使用 .NET 独立时除外 | ✅ 完全支持 |
|
KEDA 2.0 缩放支持 (详细信息) |
即将推出! | ❌ 不支持 | ✅ 支持使用 MSSQL 缩放程序 (详细信息) | ❌ 不支持 |
| 支持 扩展捆绑包 (建议用于 non-.NET 应用) | 即将推出! | ✅ 完全支持 | ✅ 完全支持 | ✅ 完全支持 |
| 性价比可配置? | 即将推出! | ❌ 否 | ✅ 是(SQL vCPUs) | ✅ 是(事件中心 TU 和 CU) |
| 脱机环境支持 | ❌ 需要 Azure 连接 | ❌ 需要 Azure 连接 | ✅ 完全支持 | ❌ 需要 Azure 连接 |
| 基于标识的连接 | ✅ 完全支持 | ✅ 完全支持 | ⚠ 需要运行时驱动的缩放 | ❌ 不支持 |