Skip to main content

Catalyst Workflows benchmarks

This page presents the results of a benchmark campaign measuring Catalyst Workflows throughput, latency, and reliability under sustained load, overload, and failure injection. It also shows how Catalyst compares with Dapr open source running on identical infrastructure, so you can judge what the platform delivers beyond a self-managed deployment.

Headline results

MetricResult
Sequential workflow throughput (5 activities per workflow)530 workflows/sec sustained
End-to-end workflow completion latency, warmp50 25ms / p99 31ms
End-to-end latency at 350/sec sustainedp50 33ms / p99 54ms
Completion ratio under fault injection (~1.7M workflows)100%
Durable timers and external events under fault injection30,000/30,000, zero loss

Test environment

  • Two identical Amazon EKS clusters in a single availability zone, so cross-zone variance is eliminated by design.
  • System under test: 3x m7i.2xlarge nodes (8 vCPU / 32 GiB) running 3 sidecar replicas, plus a dedicated m7i.2xlarge PostgreSQL node.
  • Storage: io2 Block Express volumes with 10,000 provisioned IOPS.
  • Load generation: an isolated m7i.xlarge injector node using open-loop arrivals with 30-60s ramps; the load generator never shares CPU with the system under test.
  • Payloads are 128 bytes unless a table says otherwise.

The benchmarks use three workflow shapes:

  • Noop: create and complete a workflow with no activities.
  • Sequential 1xN: N activities executed one after another, each echoing the payload.
  • Fanout-W: W activities executed in parallel, each echoing the payload.

Measurement methodology

Every published number comes from a gate-clean window: completion ratio at or above 0.995, zero arrival drops on the load generator, and fresh state between windows (state store reset, scheduler queue truncation, full restart of the system under test, and a settle period). Windows are preceded by a warm phase. Latency is the end-to-end complete-workflow time observed by the client, from the schedule call to the observed terminal state, not an engine-internal number.

note

Max sustainable rate (MSR) is the highest arrival rate that passes the gate on a fresh 4-minute window and whose next tested rung fails the gate. It measures sustained steady-state behavior under continuous arrivals, not short-burst tolerance.

Throughput by workflow shape

ShapeMax sustainable rateObserved result
Noop1,500/secp50 12ms / p99 26ms
Sequential 1x5530/secratio 1.0000, zero drops
Sequential 1x2590/secratio 1.0000
Fanout-10280/secp50 28ms / p99 66ms
Fanout-5075/sec (ceiling not reached)p50 48ms / p99 112ms
Fanout-10055/secp50 137ms / p99 426ms at 45/sec

Fanout-50 at 75/sec is 3,750 activity executions per second with a flat latency tail.

Latency under load

Sustained rate (sequential 1x5)p50p99
10/sec (warm)25ms31ms
350/sec33ms54ms
460/sec55ms1.4s

Payload scaling

Sequential 1x5, payload carried as workflow input and every activity result:

PayloadRateCompletion ratiop50
128B460/sec0.998855ms
1KB460/sec1.000070ms
8KB300/sec1.000042ms

Endurance and overload

  • A 30-minute soak at 370/sec completes with ratio 0.9998, p50 49ms, no latency drift, and no restarts.
  • Under 2x overload (1,060/sec offered against a 530/sec ceiling), the platform sheds excess load at intake, completes all accepted work, drains cleanly with zero restarts, and returns to normal latency immediately. There is no collapse and no recovery period.

Reliability under failure

A fault-injection campaign of ~1.7M workflows ran against the same environment: sidecar kills mid-execution, repeated kills targeting freshly booted replacements, scheduler member kills with leadership churn, and hard PostgreSQL outages.

ScenarioResult
No-fault control at 300/sec99.997% completion, p50 34ms / p99 102ms
Sidecar kill mid-executionreplacement ready in 6s, no loss
Repeated kill into a booting replacementzero ghost instances, zero duplicate executions
Scheduler member kill and leadership churnfull recovery, no lost work
PostgreSQL outage (11-25s)platform survives and reconnects
Rolling restart under load99.997% completion
Durable timers and external events with concurrent kills30,000/30,000 delivered, every timer fired, zero timeouts

Comparison with Dapr open source

The same clusters, storage, node layout, load harness, and measurement gates were rerun against Dapr open source v1.18, deployed with its Helm chart in high-availability mode and a PostgreSQL actor state store tuned identically to Catalyst's: the same volume class, the same server tuning, the same memory budget, and the same dedicated database node. One structural difference favors open source in latency cells: its clients reach the sidecar directly, while the Catalyst numbers include its managed network entry point.

BenchmarkCatalyst resultAdvantage over Dapr OSS
Noop throughput1,500/sec1.5x
Sequential 1x5 throughput530/sec1.6x
Latency at max sustained ratep50 79ms~5x lower
Fanout-10 throughput280/sec1.6x
Deep chain 1x25 throughput90/sec~1.9x
Fanout-50 throughput75/sec2.5-3x
Fanout-100 throughput55/sec3.4x
Warm latency (10/sec)p50 25ms / p99 31ms2x lower
p99 latency under 2x overload4.4s, no collapse~10x lower

The pattern is mechanistic, not incidental: Catalyst's advantage grows with the number of durable events per workflow, from 1.5x on the event-light noop shape to 3.4x on 100-wide fanouts, because Catalyst eliminates per-event scheduler round trips. Both platforms degrade gracefully under 2x overload and neither loses accepted work; Catalyst's tail latency under overload is roughly ten times lower.

For a feature-level comparison beyond performance, see Dapr OSS vs Catalyst.