Skip to content

Commit 0971dff

Browse files
committed
edits pt 3
Signed-off-by: Hannah Hunter <[email protected]>
1 parent 610d292 commit 0971dff

File tree

2 files changed

+55
-44
lines changed

2 files changed

+55
-44
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
---
2+
title: Azure Functions Durable Task Scheduler work item throughput for Durable Functions (preview)
3+
description: Learn about how the Azure Functions Durable Task Scheduler provides high work item throughput for use with Durable Functions.
4+
ms.topic: conceptual
5+
ms.date: 04/10/2025
6+
---
7+
8+
# Azure Functions Durable Task Scheduler work item throughput (preview)
9+
10+
The Durable Task Scheduler was benchmarked against other storage providers, including the Azure Storage, MSSQL, and Netherite providers. The results show the Durable Task Scheduler provides better work item throughput than the other options, which translates into more orchestrator, entity, and activity tasks being processed in a given time period.
11+
12+
The following table shows the results of a series of benchmarks ran to compare the relative throughput of the Durable Task Scheduler provider vs. the default Azure Storage provider. The Azure Storage provider was chosen as the comparison because it's currently the default and most commonly used backend option for Durable Function apps.
13+
14+
:::image type="content" source="media/durable-task-scheduler/performance.png" alt-text="Bar chart comparing throughput of Durable Task Scheduler vs Azure Storage providers.":::
15+
16+
> [!NOTE]
17+
> The results shown in the chart are for an early preview version of the Durable Task Scheduler feature, configured with the lowest available scale settings. The results are expected to improve as the backend provider matures and gets closer to general availability.
18+
19+
To test the relative throughput of the backend providers, these benchmarks were run using a standard orchestrator function that calls five activity functions, one for each city, in a sequence. Each activity simply returns a "Hello, {cityName}!" string value and doesn't do any other work.
20+
21+
The intent of the benchmark is to measure the overhead of each backend without doing anything too complicated. This type of sequential orchestration was chosen due to its commonality in function apps that include Durable Functions.
22+
23+
### Test details
24+
25+
The test consists of the following criteria:
26+
27+
- The function app used for this test runs on **one to four Elastic Premium EP2 instances**.
28+
- The orchestration code was written in C# using the **.NET Isolated worker model on NET 8**.
29+
- The same app was used for all storage providers, and the only change was the backend storage provider configuration.
30+
- The test is triggered using an HTTP trigger which starts **5,000 orchestrations concurrently**.
31+
32+
After the test completes, the throughput is calculated by dividing the total number of completed orchestrations by the total execution time. The test was run multiple times for each storage provider configuration to ensure the results were consistent.
33+
34+
This benchmark showed that the Durable Task Scheduler is roughly **five times faster** than the Azure Storage provider. Your results might vary depending on:
35+
36+
- The complexity of your orchestrations and activities
37+
- The number of orchestrations running concurrently
38+
- The size of the data payloads being passed between orchestrations and activities
39+
- Other factors such as the virtual machine size.
40+
41+
> [!NOTE]
42+
> These results are meant to provide a rough comparison of the relative performance of the storage provider backends at the time the test was run. These results shouldn't be taken as definitive.

articles/azure-functions/durable-task-scheduler/durable-task-scheduler.md

Lines changed: 13 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -27,33 +27,37 @@ You can use the Durable Task Scheduler with the following orchestration framewor
2727

2828
## Architecture
2929

30-
For all Durable Task Scheduler orchestration frameworks, instances of the Durable Task Scheduler can be created using Azure Resource Manager and are of type [Microsoft.DurableTask/scheduler](/azure/templates/microsoft.durabletask/schedulers). Each *scheduler* resource internally has its own dedicated compute and memory resources optimized for:
30+
For all Durable Task Scheduler orchestration frameworks, you can create instances of the Durable Task Scheduler of type [Microsoft.DurableTask/scheduler](/azure/templates/microsoft.durabletask/schedulers) using Azure Resource Manager. Each *scheduler* resource internally has its own dedicated compute and memory resources optimized for:
3131

3232
- Dispatching orchestrator, activity, and entity work items
3333
- Storing and querying history at scale with minimal latency
3434
- Providing a rich monitoring experience through [the Durable Task Scheduler dashboard](./durable-task-scheduler-dashboard.md)
3535

36-
Unlike [the BYO storage providers](../durable/durable-functions-storage-providers.md), the Durable Task Scheduler provider is a purpose-built backend-as-a-service optimized for the specific needs of the Durable Task Framework.
36+
Unlike [the BYO storage providers](../durable/durable-functions-storage-providers.md), the Durable Task Scheduler provider is a purpose-built backend-as-a-service optimized for the specific needs of the [Durable Task Framework](https://github.com/Azure/durabletask).
3737

3838
The following diagram shows the architecture of the Durable Task Scheduler backend and its interaction with connected apps.
3939

4040
:::image type="content" source="media/durable-task-scheduler/architecture.png" alt-text="Diagram of the Durable Task Scheduler architecture.":::
4141

42-
### Separation of concerns
42+
### Operational separation
4343

44-
The Durable Task Scheduler runs in Azure as a separate resource from the app. This separation allows the scheduler to scale independently of the app and provides better isolation between the two components. This isolation is important for several reasons:
44+
The Durable Task Scheduler runs in Azure as a separate resource from your app. This isolation is important for several reasons:
4545

46-
- **Reduced resource consumption:** BYO storage providers can consume a significant amount of CPU and memory resources. This resource consumption is due to the overhead of managing partitions and other complex state store interactions. Using a managed scheduler instead of a BYO storage provider allows your app instances to run more efficiently and with less resource contention.
46+
- **Reduced resource consumption**
47+
Using a managed scheduler like Durable Task Scheduler reduces CPU and memory resource consumption caused by the overhead of managing partitions and other complex state store interactions. Using a managed scheduler (instead of a BYO storage provider, for example) allows your app instances to run more efficiently with less resource contention.
4748

48-
- **Fault isolation:** Stability or availability issues in the Durable Task Scheduler won't affect the stability or availability of your connected apps. With BYO storage providers, instability in the backend provider (which is a complex component) can create instability in the app logic. By separating the scheduler from the app, you can reduce the risk of cascading failures and improve overall reliability.
49+
- **Fault isolation**
50+
when Durable Task Scheduler experiences stability or availability issues, it won't affect the stability or availability of your connected apps. By separating the scheduler from the app, you can reduce the risk of cascading failures and improve overall reliability.
4951

50-
- **Independent scaling:** The scheduler resource can be scaled independently of the app, allowing for better infrastructure resource management and cost optimization. For example, multiple apps can share the same scheduler resource, improving overall resource utilization. This capability is especially useful for organizations with multiple teams or projects that require Durable Functions.
52+
- **Independent scaling**
53+
The scheduler resource can be scaled independently of the app, allowing for better infrastructure resource management and cost optimization. For example, multiple apps can share the same scheduler resource, improving overall resource utilization. This capability is especially useful for organizations with multiple teams or projects.
5154

52-
- **Improved support experience:** The Durable Task Scheduler is a managed service, which means that Azure can provide better support and diagnostics for issues related to the scheduler. When using a BYO storage provider, you might need to troubleshoot issues related to the backend provider, which can be complex and time-consuming. A managed service allows Azure to take care of the underlying infrastructure and provide a more streamlined support experience.
55+
- **Improved support experience**
56+
The Durable Task Scheduler is a managed service, providing a more streamlined support and diagnostics for issues regarding the underlying infrastructure.
5357

5458
### App connectivity
5559

56-
Your Durable Function apps connect to the scheduler resource via a gRPC connection. The endpoint address is in the form `{scheduler-name}.{region}.durabletask.io`. For example, `myscheduler-123.westus2.durabletask.io`. The connection is secured using TLS and the app's identity is used to authenticate the connection.
60+
Your apps connect to the scheduler resource via a gRPC connection, secured using TLS and authenticated by the app's identity. The endpoint address is in a format similar to `{scheduler-name}.{region}.durabletask.io`. For example, `myscheduler-123.westus2.durabletask.io`.
5761

5862
Work items are streamed from the scheduler to the app using a push model, removing the need for polling and improving end-to-end latency. Your apps can process multiple work items in parallel and send responses back to the scheduler when the corresponding orchestration, activity, or entity task is complete.
5963

@@ -92,41 +96,6 @@ docker run -d -p 8080:8080 -e DTS_TASK_HUB_NAMES=taskhub1,taskhub2 mcr.microsoft
9296
> [!NOTE]
9397
> The emulator internally stores orchestration and entity state in local memory, so it isn't suitable for production use.
9498
95-
## Work item throughput
96-
97-
The Durable Task Scheduler was benchmarked against other storage providers, including the Azure Storage, MSSQL, and Netherite providers. The results show the Durable Task Scheduler provides better work item throughput than the other options, which translates into more orchestrator, entity, and activity tasks being processed in a given time period.
98-
99-
The following table shows the results of a series of benchmarks ran to compare the relative throughput of the Durable Task Scheduler provider vs. the default Azure Storage provider. The Azure Storage provider was chosen as the comparison because it's currently the default and most commonly used backend option for Durable Function apps.
100-
101-
:::image type="content" source="media/durable-task-scheduler/performance.png" alt-text="Bar chart comparing throughput of Durable Task Scheduler vs Azure Storage providers.":::
102-
103-
> [!NOTE]
104-
> The results shown in the chart are for an early preview version of the Durable Task Scheduler feature, configured with the lowest available scale settings. The results are expected to improve as the backend provider matures and gets closer to general availability.
105-
106-
To test the relative throughput of the backend providers, these benchmarks were run using a standard orchestrator function that calls five activity functions, one for each city, in a sequence. Each activity simply returns a "Hello, {cityName}!" string value and doesn't do any other work.
107-
108-
The intent of the benchmark is to measure the overhead of each backend without doing anything too complicated. This type of sequential orchestration was chosen due to its commonality in function apps that include Durable Functions.
109-
110-
### Test details
111-
112-
The test consists of the following criteria:
113-
114-
- The function app used for this test runs on **one to four Elastic Premium EP2 instances**.
115-
- The orchestration code was written in C# using the **.NET Isolated worker model on NET 8**.
116-
- The same app was used for all storage providers, and the only change was the backend storage provider configuration.
117-
- The test is triggered using an HTTP trigger which starts **5,000 orchestrations concurrently**.
118-
119-
After the test completes, the throughput is calculated by dividing the total number of completed orchestrations by the total execution time. The test was run multiple times for each storage provider configuration to ensure the results were consistent.
120-
121-
This benchmark showed that the Durable Task Scheduler is roughly **five times faster** than the Azure Storage provider. Your results might vary depending on:
122-
123-
- The complexity of your orchestrations and activities
124-
- The number of orchestrations running concurrently
125-
- The size of the data payloads being passed between orchestrations and activities
126-
- Other factors such as the virtual machine size.
127-
128-
> [!NOTE]
129-
> These results are meant to provide a rough comparison of the relative performance of the storage provider backends at the time the test was run. These results shouldn't be taken as definitive.
13099

131100
## Limitations and considerations
132101

0 commit comments

Comments
 (0)