This is the multi-page printable view of this section. Click here to print.
Performance and scalability statistics of Dapr
1 - Longhaul performance and stability
This article provides longhaul performance and stability benchmarks for Dapr on Kubernetes.
The longhaul tests are designed to run for a period of a week, validating the stability of Dapr and its components, while measuring resource utilization and performance over time.
Public Dashboard
You can access the live longhaul test results on the public Grafana dashboard. This dashboard is updated in near real-time, showing the latest results from the longhaul tests.
System overview
The longhaul environment is run on a 3 node managed Azure Kubernetes Service (AKS) cluster, using standard D2s_v5 nodes running 2 cores and 8GB of RAM, with network acceleration.
Test Applications
- Feed generator
- Hashtag Actor
- Hashtag counter
- Message Analyzer
- Pubsub Workflow
- Streaming Pubsub Publisher / Producer
- Streaming Pubsub Subscriber / Consumer
- Snapshot App
- Validation Worker App
- Scheduler Jobs App
- Workflow Gen App
- Scheduler Actor Reminders - Client
- Scheduler Actor Reminders - Server
- Scheduler Workflow App
Redeployments
The longhaul test environment is redeployed every 7 days (Fridays at 08:00 UTC).
Test Infrastructure
The test infrastructure is sourced from this GitHub repository.
It is a mixture of Bicep IaC templates and Helm charts to deploy the test applications and Dapr.
2 - Performance results
The charts below show the performance benchmarks for the Dapr APIs on this version of Dapr, per API. Each section leads with a throughput per resource table (iterations/sec against the CPU and memory consumed by the app and its Dapr sidecar combined) followed by the latency, throughput, resource and data-volume charts for every scenario.
To view the results for a different Dapr version, use the version selector at the top of the docs.
How this data is produced
Benchmarks run in the dapr-perf suite for each Dapr release. The raw report is the source of truth and is committed to the dapr/dapr repository; the rendered charts are published to the perf-charts branch and pulled into this page automatically. Nothing on this page is version-specific, the results shown always match the Dapr version you are viewing.
Test environment: Azure AKS, 3x Standard_D2s_v6 (2 vCPU, 8 GiB) Linux nodes. Results for Dapr v1.18.0.
Service invocation (2 scenarios)
HTTP
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestServiceInvocationHTTPPerformance | 999.97 | 43 | 14 | 17 | 48 | 16666.1 | 16482.6 |
TestServiceInvocationHTTPPerformance (14 charts)

gRPC
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestServiceInvocationGrpcPerformance | 999.96 | 91 | 14 | 51 | 49 | 7042.0 | 16075.5 |
TestServiceInvocationGrpcPerformance (9 charts)

State management (2 scenarios)
HTTP
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestStateGetHTTPPerformance | 999.97 | 87 | 30 | 94 | 49 | 5524.7 | 13024.5 |
TestStateGetHTTPPerformance (14 charts)

gRPC
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestStateGetGrpcPerformance | 999.98 | 15 | 30 | 4 | 44 | 52630.7 | 13824.2 |
TestStateGetGrpcPerformance (9 charts)

Publish and subscribe (14 scenarios)
HTTP
TestPubsubPublishHttpPerformance (6 charts)

gRPC
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestPubsubPublishGrpcPerformance | 999.98 | 86 | 33 | 106 | 51 | 5208.3 | 12113.4 |
TestPubsubPublishGrpcPerformance (9 charts)

Bulk / HTTP
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestPubsubBulkPublishSubscribeHttpPerformance_kafka-messagebus | 67.55 | 24 | 19 | 2 | 37 | 2598.2 | 1230.4 |
TestPubsubBulkPublishBulkSubscribeHttpPerformance_kafka-messagebus (8 charts)

TestPubsubBulkPublishHttpPerformance_memory-broker_b100_s1KB_bulk (6 charts)

TestPubsubBulkPublishHttpPerformance_memory-broker_b100_s1KB_normal (6 charts)

TestPubsubBulkPublishHttpPerformance_memory-broker_b10_s1KB_bulk (6 charts)

TestPubsubBulkPublishHttpPerformance_memory-broker_b10_s1KB_normal (6 charts)

TestPubsubBulkPublishHttpPerformance_variants_duration (1 chart)

TestPubsubBulkPublishSubscribeHttpPerformance_kafka-messagebus (8 charts)

Bulk / gRPC
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestBulkPubsubPublishGrpcPerformance_In-memory_with_with_cloud_event | 199.94 | 476 | 41 | 1126 | 77 | 124.8 | 1726.1 |
| TestBulkPubsubPublishGrpcPerformance_In-memory_without_cloud_event_(raw_payload) | 199.95 | 372 | 44 | 1000 | 76 | 145.7 | 1701.8 |
| TestBulkPubsubPublishGrpcPerformance_Kafka_with_cloud_event | 199.94 | 564 | 42 | 1676 | 94 | 89.3 | 1497.7 |
| TestBulkPubsubPublishGrpcPerformance_Kafka_without_cloud_event_(raw_payload) | 199.94 | 758 | 43 | 1545 | 94 | 86.8 | 1493.1 |
TestBulkPubsubPublishGrpcPerformance_In-memory_with_with_cloud_event (9 charts)

TestBulkPubsubPublishGrpcPerformance_In-memory_without_cloud_event_(raw_payload) (9 charts)

TestBulkPubsubPublishGrpcPerformance_Kafka_with_cloud_event (9 charts)

TestBulkPubsubPublishGrpcPerformance_Kafka_without_cloud_event_(raw_payload) (9 charts)

TestBulkPubsubPublishGrpcPerformance_variants_duration (1 chart)

Actors (5 scenarios)
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestActorActivate | 499.98 | 662 | 891 | 106 | 65 | 651.0 | 535.6 |
| TestActorDoubleActivation | 770.87 | 206 | 14 | 419 | 204 | 1233.4 | 3614.8 |
| TestActorIdStress | 13497.43 | 101 | 35 | 413 | 241 | 26259.6 | 49935.8 |
| TestActorReminderRegistrationPerformance | 1415.09 | 1 | 8 | 29 | 56 | 47169.8 | 22794.7 |
| TestActorTimerWithStatePerformance | 219.98 | 138 | 1192 | 155 | 65 | 750.8 | 179.2 |
TestActorActivate (13 charts)

TestActorDoubleActivation (8 charts)

TestActorIdStress (8 charts)

TestActorReminderRegistrationPerformance (14 charts)

TestActorTimerWithStatePerformance (14 charts)

Workflows (6 scenarios)
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestDelayWorkflowsAtScale | 35.58 | 402 | 939 | 162 | 101 | 63.1 | 35.0 |
| TestParallelWorkflowWithMaxVUs | 110.24 | 14 | 608 | 2 | 36 | 6890.0 | 175.3 |
| TestSeriesWorkflowWithMaxVUs | 92.97 | 13 | 610 | 2 | 39 | 6197.7 | 146.7 |
| TestWorkflowWithConstantIterations | 62.62 | 14 | 608 | 2 | 37 | 3834.1 | 99.5 |
| TestWorkflowWithConstantVUs | 53.41 | 58 | 626 | 3 | 49 | 875.6 | 81.0 |
| TestWorkflowWithDifferentPayloads | 9.29 | 19 | 616 | 2 | 35 | 442.6 | 14.6 |
TestDelayWorkflowsAtScale (8 charts)

TestParallelWorkflowWithMaxVUs (8 charts)

TestSeriesWorkflowWithMaxVUs (8 charts)

TestWorkflowWithConstantIterations (9 charts)

TestWorkflowWithConstantVUs (9 charts)

TestWorkflowWithDifferentPayloads (9 charts)

Jobs (1 scenario)
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestJobSchedulingPerformance | 870.79 | 62 | 27 | 102 | 80 | 5309.7 | 8344.7 |
TestJobSchedulingPerformance (14 charts)

Configuration (4 scenarios)
HTTP
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestConfigurationGetHTTPPerformance | 9697.99 | 1 | 39 | 2 | 35 | 3232664.4 | 132479.0 |
| TestConfigurationSubscribeHTTPPerformance | 2074.52 | 1 | 73 | 57 | 87 | 35767.6 | 13307.4 |
TestConfigurationGetHTTPPerformance (8 charts)

TestConfigurationSubscribeHTTPPerformance (8 charts)

gRPC
Throughput per resource
Iterations/sec relative to the CPU and memory consumed by the app and its Dapr sidecar combined. Resource figures are point-in-time samples taken at the end of each run.
| Test | Iterations/sec | App CPU (m) | App Mem (MB) | Sidecar CPU (m) | Sidecar Mem (MB) | Iter/s per core | Iter/s per GB |
|---|---|---|---|---|---|---|---|
| TestConfigurationGetGRPCPerformance | 14369.91 | 1 | 73 | 1 | 76 | 7184956.9 | 99023.6 |
| TestConfigurationSubscribeGRPCPerformance | 4038.77 | 1 | 83 | 2 | 75 | 1346257.7 | 26268.1 |
TestConfigurationGetGRPCPerformance (8 charts)

TestConfigurationSubscribeGRPCPerformance (8 charts)
