Skip to content

Commit 7ae2c0a

Browse files
Merge pull request #312597 from hhunter-ms/final-copyedit
[Durable] Copyedit
2 parents cd13069 + 115ed67 commit 7ae2c0a

38 files changed

Lines changed: 220 additions & 140 deletions

articles/azure-functions/durable/TOC.yml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,12 @@
55
items:
66
- name: What is Durable Task?
77
href: what-is-durable-task.md
8-
- name: Choose your programming model
8+
- name: Choose your hosting model
99
href: choose-orchestration-framework.md
10+
- name: About Durable Functions
11+
href: durable-functions-overview.md
12+
- name: About the Durable Task SDKs
13+
href: ./durable-task-scheduler/durable-task-overview.md
1014
- name: Quickstarts
1115
items:
1216
- name: Durable Functions
@@ -227,8 +231,6 @@
227231
href: https://azure.microsoft.com/updates/?product=functions&updatetype=&platform=
228232
- name: Durable Task SDKs
229233
items:
230-
- name: Overview
231-
href: ./durable-task-scheduler/durable-task-overview.md
232234
- name: Tutorials
233235
items:
234236
- name: Configure autoscale for Azure Container Apps hosting

articles/azure-functions/durable/choose-orchestration-framework.md

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
title: Choose your programming model
2+
title: Choose your hosting model
33
description: Learn how your hosting platform determines whether to use Durable Functions for Azure Functions or the standalone Durable Task SDKs for self-hosted scenarios.
44
author: cgillum
55
ms.author: cgillum
@@ -9,20 +9,24 @@ ms.topic: concept-article
99
ms.service: azure-functions
1010
ms.subservice: durable
1111
titleSuffix: Durable Task
12-
#Customer intent: As a developer, I want to understand which Durable Task programming model to use based on my hosting platform.
12+
#Customer intent: As a developer, I want to understand which Durable Task hosting model to use based on my hosting platform.
1313
---
1414

15-
# Choose your programming model
15+
# Choose your hosting model
1616

17-
As described in [What is Durable Task?](what-is-durable-task.md), the Durable Task framework supports two hosting models: **Azure Functions** (via Durable Functions) and **self-hosted** (via the standalone Durable Task SDKs). Both hosting models provide the same core durable execution capabilities (orchestrations, activities, timers, external events, and more) but differ in how your application is hosted, scaled, and deployed.
17+
As described in [What is Durable Task?](what-is-durable-task.md), the Durable Task framework supports two hosting models:
18+
- **Azure Functions** (via [Durable Functions](./durable-functions-overview.md))
19+
- **Self-hosted** (via [the standalone Durable Task SDKs](./durable-task-scheduler/durable-task-overview.md)).
1820

19-
In general, where your application runs determines which programming model you use. If you're building on Azure Functions, you use Durable Functions. If you're building on any other compute platform, you use the standalone Durable Task SDKs.
21+
Both hosting models provide the same core durable execution capabilities (orchestrations, activities, timers, external events, and more) but differ in how your application is hosted, scaled, and deployed.
22+
23+
In general, where your application runs determines which hosting model you use. If you're building on Azure Functions, you use Durable Functions. If you're building on any other compute platform, you use the standalone Durable Task SDKs.
2024

2125
## Choosing based on hosting platform
2226

23-
If you already know your application's hosting platform, the following table can help you determine which programming model to use:
27+
If you already know your application's hosting platform, the following table can help you determine which hosting model to use:
2428

25-
| Hosting platform | Programming model |
29+
| Hosting platform | Hosting model |
2630
| - | - |
2731
| **Azure Functions** (Consumption, Flex Consumption, Premium) | Durable Functions |
2832
| **Azure Container Apps** (with Azure Functions runtime) | Either |
@@ -31,11 +35,11 @@ If you already know your application's hosting platform, the following table can
3135
| **Virtual machines or on-premises** | Standalone Durable Task SDKs |
3236

3337
> [!NOTE]
34-
> Azure App Service and Azure Container Apps can both host the Azure Functions runtime, either through [fully managed Azure Functions integration](../functions-scale.md#overview-of-plans) or by deploying the Functions runtime directly. Thus, both platforms support either programming model. For more information on Azure Functions hosting options, see [Azure Functions hosting plans](../functions-scale.md).
38+
> Azure App Service and Azure Container Apps can both host the Azure Functions runtime, either through [fully managed Azure Functions integration](../functions-scale.md#overview-of-plans) or by deploying the Functions runtime directly. Thus, both platforms support either hosting model. For more information on Azure Functions hosting models, see [Azure Functions hosting plans](../functions-scale.md).
3539
36-
## Comparing the programming models
40+
## Comparing the hosting models
3741

38-
The following table summarizes the key differences between the two programming models:
42+
The following table summarizes the key differences between the two hosting models:
3943

4044
| | Durable Functions (Azure Functions) | Standalone Durable Task SDKs (self-hosted) |
4145
| - | - | - |
@@ -51,7 +55,7 @@ The following table summarizes the key differences between the two programming m
5155
>
5256
> The [Flex Consumption](../flex-consumption-plan.md) hosting plan offers [an "always read instances" concept](../flex-consumption-plan.md#always-ready-instances) as cold start mitigation.
5357
>
54-
> Learn more about [Azure Functions hosting options](../functions-scale.md).
58+
> Learn more about [Azure Functions hosting models](../functions-scale.md).
5559
5660
### Built-in HTTP APIs
5761

@@ -60,7 +64,7 @@ Azure Functions provides HTTP endpoints for your functions app, which the Durabl
6064
When using the Durable Task SDKs, you need to implement your own HTTP endpoints depending on your hosting compute.
6165

6266
| Feature | Durable Functions | Durable Task SDKs |
63-
|---------|-------------------|-------------------|
67+
| ------- | ----------------- | ----------------- |
6468
| **Management HTTP APIs** | ✅ Built-in | ❌ Implement your own |
6569
| **Automatic status URLs** | ✅ Built-in | ❌ Implement your own |
6670

@@ -84,10 +88,10 @@ Learn more: [Manage orchestration instances](durable-functions-instance-manageme
8488
Durable Functions supports multiple storage backends, while the Durable Task SDKs exclusively use the Durable Task Scheduler.
8589

8690
> [!TIP]
87-
> The **Durable Task Scheduler** is a fully managed Azure service that handles orchestration state persistence and execution. It's provisioned as a separate Azure resource with its own [pricing](./durable-task-scheduler/durable-task-scheduler-dedicated-sku.md). It's the recommended backend for Durable Functions and the only supported backend for the Durable Task SDKs.
91+
> The **Durable Task Scheduler** is a fully managed Azure service that handles orchestration state persistence and execution. It's provisioned as a separate Azure resource with its own [pricing](./durable-task-scheduler/durable-task-scheduler-billing.md). It's the recommended backend for Durable Functions and the only supported backend for the Durable Task SDKs.
8892
8993
| Storage provider | Durable Functions | Durable Task SDKs |
90-
|------------------|-------------------|-------------------|
94+
| ---------------- | ----------------- | ----------------- |
9195
| **Durable Task Scheduler** | ✅ Recommended | ✅ Required |
9296
| **Azure Storage** | ✅ Supported | ❌ Not supported |
9397
| **Microsoft SQL Server** | ✅ Supported | ❌ Not supported |
@@ -104,23 +108,23 @@ Learn more: [Task hubs](durable-functions-task-hubs.md)
104108
### Diagnostics and versioning
105109

106110
| Feature | Durable Functions | Durable Task SDKs |
107-
|---------|-------------------|-------------------|
111+
| ------- | ----------------- | ----------------- |
108112
| **Durable Task Scheduler dashboard** | ✅ Yes | ✅ Yes |
109113
| **Application Insights** | ✅ Built-in | Manual setup |
110114
| **Zero-downtime deployment** | ✅ Functions slots | Platform-specific |
111115

112116
Learn more: [Diagnostics](durable-functions-diagnostics.md) | [Versioning](durable-functions-versioning.md)
113117

114-
Both programming models support the **[Durable Task Scheduler](./durable-task-scheduler/durable-task-scheduler.md)** as a state storage backend, which provides both state storage and extra monitoring capabilities. Durable Functions also supports several bring-your-own (BYO) storage options for scenarios that require them. For more information, see [Storage providers](durable-functions-storage-providers.md).
118+
Both hosting models support the **[Durable Task Scheduler](./durable-task-scheduler/durable-task-scheduler.md)** as a state storage backend, which provides both state storage and extra monitoring capabilities. Durable Functions also supports several bring-your-own (BYO) storage options for scenarios that require them. For more information, see [Storage providers](durable-functions-storage-providers.md).
115119

116120
## More considerations
117121

118-
When choosing between the two programming models, consider the following factors:
122+
When choosing between the two hosting models, consider the following factors:
119123

120124
| Choose Durable Functions if... | Choose standalone Durable Task SDKs if... |
121125
| - | - |
122126
| You want built-in Azure Functions triggers (HTTP, Queue, Timer, etc.). | You want full control over your container and its entry points. |
123-
| You're already familiar with the Azure Functions programming model. | You prefer a lightweight SDK without the Azure Functions runtime overhead. |
127+
| You're already familiar with the Azure Functions hosting model. | You prefer a lightweight SDK without the Azure Functions runtime overhead. |
124128
| You want Azure portal integration for function management. | You want the same code to be portable across container platforms (AKS, App Service, etc.). |
125129
| You need to choose from [multiple storage backends](durable-functions-storage-providers.md). | You have existing non-Functions application code to integrate with. |
126130
| You need **serverless, event-driven apps** that scale to zero. | You need **always-on, low-latency workloads** without cold start delays. |
@@ -139,7 +143,7 @@ All Durable Task SDKs are open source and available on GitHub. However, some SDK
139143

140144
### Durable Task Framework (Legacy)
141145

142-
The [Durable Task Framework](https://github.com/Azure/durabletask) (DTFx) is an older, open-source .NET Durable Task library. While it provides similar orchestration primitives, it predates the modern Durable Task SDKs and doesn't include official Microsoft support or the latest features. It also requires you to manage hosting, operational infrastructure, and long-term maintenance themselves.
146+
The [Durable Task Framework](https://github.com/Azure/durabletask) (DTFx) is an older, open-source .NET Durable Task library. While it provides similar orchestration primitives, it predates the modern Durable Task SDKs and doesn't include official Microsoft support or the latest features. It also requires you to manage hosting, operational infrastructure, and long-term maintenance yourself.
143147

144148
If you're starting a new project, we recommend using the modern Durable Task SDKs or Durable Functions instead.
145149

@@ -152,15 +156,12 @@ The [Durable Task SDK for Go](https://github.com/Azure/durabletask-go) is a comm
152156
153157
## Next steps
154158

155-
Once you've decided which framework to use, get started with the appropriate quickstart:
156-
157-
- **Durable Functions**: [Create your first Durable Functions app](durable-functions-isolated-create-first-csharp.md)
158-
- **Durable Task SDKs**: [Create an app with Durable Task SDKs](durable-task-scheduler/quickstart-durable-task-scheduler.md)
159-
160-
For more in-depth information:
159+
Get started with the framework you chose:
161160

162161
> [!div class="nextstepaction"]
163-
> [Durable Functions overview](what-is-durable-task.md)
162+
> [Durable Functions overview](durable-functions-overview.md)
164163
165164
> [!div class="nextstepaction"]
166-
> [Durable Task Scheduler overview](durable-task-scheduler/durable-task-scheduler.md)
165+
> [Durable Functions overview](./durable-task-scheduler/durable-task-overview.md)
166+
167+
Then, learn more about the [Durable Task Scheduler backend provider](durable-task-scheduler/durable-task-scheduler.md).

articles/azure-functions/durable/durable-functions-azure-storage-provider.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ Storing payloads to local disks is *not* recommended, since on-disk state isn't
165165

166166
## Configuring the Azure storage provider
167167

168-
The Azure Storage provider is the default storage provider and doesn't require any explicit configuration, NuGet package references, or extension bundle references. You can find the full set of **host.json** configuration options [here](durable-functions-bindings.md#durable-functions-settings-in-hostjson), under the `extensions/durableTask/storageProvider` path.
168+
The Azure Storage provider is the default storage provider and doesn't require any explicit configuration, NuGet package references, or extension bundle references. You can find the full set of [Durable Functions host.json configuration options](durable-functions-bindings.md#durable-functions-settings-in-hostjson) under the `extensions/durableTask/storageProvider` path.
169169

170170
### Connections
171171

@@ -178,15 +178,16 @@ If the configured value is both an exact match for a single setting and a prefix
178178

179179
### Identity-based connections
180180

181-
If you are using [version 2.7.0 or higher of the extension](https://github.com/Azure/azure-functions-durable-extension/releases/tag/v2.7.0) and the Azure storage provider, instead of using a connection string with a secret, you can have the app use an [Microsoft Entra identity](../../active-directory/fundamentals/active-directory-whatis.md). To do this, you would define settings under a common prefix which maps to the `connectionName` property in the trigger and binding configuration.
181+
If you are using [version 2.7.0 or higher of the extension](https://github.com/Azure/azure-functions-durable-extension/releases/tag/v2.7.0) and the Azure storage provider, instead of using a connection string with a secret, you can have the app use an [Microsoft Entra identity](/entra/fundamentals/what-is-entra). To do this, you would define settings under a common prefix which maps to the `connectionName` property in the trigger and binding configuration.
182182

183183
To use an identity-based connection for Durable Functions, configure the following app settings:
184184

185-
|Property | Environment variable template | Description | Example value |
186-
|-|-----------------------------------------------------|--------------------------------------------|------------------------------------------------|
187-
| Blob service URI | `<CONNECTION_NAME_PREFIX>__blobServiceUri`| The data plane URI of the blob service of the storage account, using the HTTPS scheme. | https://<storage_account_name>.blob.core.windows.net |
188-
| Queue service URI | `<CONNECTION_NAME_PREFIX>__queueServiceUri` | The data plane URI of the queue service of the storage account, using the HTTPS scheme. | https://<storage_account_name>.queue.core.windows.net |
189-
| Table service URI | `<CONNECTION_NAME_PREFIX>__tableServiceUri` | The data plane URI of a table service of the storage account, using the HTTPS scheme. | https://<storage_account_name>.table.core.windows.net |
185+
| Property | Environment variable template | Description | Example value |
186+
| -------- | ----------------------------- | ----------- | ------------- |
187+
| Blob service URI | `<CONNECTION_NAME_PREFIX>__blobServiceUri` | The data plane URI of the blob service of the storage account, using the HTTPS scheme. | `https://<storage_account_name>.blob.core.windows.net` |
188+
| Queue service URI | `<CONNECTION_NAME_PREFIX>__queueServiceUri` | The data plane URI of the queue service of the storage account, using the HTTPS scheme. | `https://<storage_account_name>.queue.core.windows.net` |
189+
| Table service URI | `<CONNECTION_NAME_PREFIX>__tableServiceUri` | The data plane URI of a table service of the storage account, using the HTTPS scheme. | `https://<storage_account_name>.table.core.windows.net` |
190+
<!-- markdownlint-enable MD044 -->
190191

191192
Additional properties may be set to customize the connection. See [Common properties for identity-based connections](../functions-reference.md#common-properties-for-identity-based-connections).
192193

@@ -231,7 +232,7 @@ Keep these considerations in mind when choosing the storage account for your Dur
231232

232233
- For performance-sensitive workloads, configure a storage account other than the default account (`AzureWebJobsStorage`). Since Durable Functions uses Azure Storage heavily, using a dedicated storage account isolates Durable Functions storage usage from the internal usage by the Azure Functions host.
233234
- You need standard general purpose Azure Storage accounts when using the Azure Storage provider. All other storage account types aren't currently supported.
234-
- Legacy v1 general purpose storage accounts for Durable Functions is recommended. The newer v2 storage accounts can be more expensive for Durable Functions workloads. [Learn more about Azure Storage account types](../../storage/common/storage-account-overview.md).
235+
- Legacy v1 general purpose storage accounts for Durable Functions are recommended. The newer v2 storage accounts can be more expensive for Durable Functions workloads. [Learn more about Azure Storage account types](../../storage/common/storage-account-overview.md).
235236

236237
## Orchestrator scale-out
237238

@@ -373,7 +374,7 @@ The following table shows the [expected *maximum* throughput numbers for the sce
373374
| External event processing | 50 events per second, per instance |
374375
| Entity operation processing | 64 operations per second |
375376

376-
If you aren't seeing the throughput numbers you expect and your CPU and memory usage appears healthy, check whether the cause is related to [the health of your storage account](../../storage/common/storage-monitoring-diagnosing-troubleshooting.md#troubleshooting-guidance). The Durable Functions extension can put significant load on an Azure Storage account, and sufficiently high loads may result in storage account throttling.
377+
If you aren't seeing the throughput numbers you expect and your CPU and memory usage appears healthy, check whether the cause is related to [the health of your storage account](/troubleshoot/azure/azure-storage/blobs/alerts/storage-monitoring-diagnosing-troubleshooting#troubleshooting-guidance). The Durable Functions extension can put significant load on an Azure Storage account, and sufficiently high loads may result in storage account throttling.
377378

378379
> [!TIP]
379380
> In some cases, you can increase the throughput of external events, activity fan-in, and entity operations by increasing the value of the `controlQueueBufferThreshold` setting in your `host.json`. Increasing this value beyond its default causes the Durable Task Framework storage provider to use more memory to prefetch these events more aggressively, reducing delays associated with dequeueing messages from the Azure Storage control queues. For more information, see the [host.json](durable-functions-bindings.md#host-json) reference documentation.

0 commit comments

Comments
 (0)