Skip to content
Sadiq Khan

october 16, 2025 · 1 min read · backend, performance, rust, go, elixir

One million requests, six backend stacks

Stress-testing Rust, Go, Node.js, Erlang and Elixir at a million concurrent requests, and what runtime design does to performance.

What happens when you throw a million concurrent requests at six different backend stacks? I found out, and the results challenged a lot of what I thought I knew about performance.

While building a product at Suprdense, I stress-tested how different backend ecosystems hold up when pushed to the edge: a million concurrent POST requests across Rust (Axum and Actix), Go, Node.js, Erlang and Elixir with Phoenix, on AWS. What I found wasn't just raw speed differences, but how runtime design fundamentally shapes performance, scalability and reliability.

The numbers

StackPeak throughputNotes
Rust + Actix214,000 RPSFastest, with more boilerplate
Rust + Axum189,000 RPSSlightly slower, much easier to set up
Go140,000 RPSNot the fastest, but steady
Erlang + Cowboy60,000 RPSThe BEAM's proven concurrency model
Elixir + Phoenixn/aPrioritised stability; solid under stress
Node.js45,000 RPSStruggled under sustained load (single-threaded limits)

Elixir with Phoenix prioritised stability over speed. The BEAM's actor model stayed solid under stress, proving that "let it crash" works for distributed systems.

My take, after working with all six

  • Erlang and Elixir: unmatched for systems that need to stay alive. When reliability matters more than raw speed, nothing else comes close.
  • Rust + Axum: modern async performance with a nice developer experience. The compiler is strict, but it catches problems before they reach production.
  • Rust + Actix: slightly higher performance, but the added boilerplate feels daunting next to Axum.
  • Go: the sweet spot for most production applications. It balances performance, maintainability and team productivity better than the alternatives.
  • Node.js: excellent for rapid prototyping and MVPs, but needs care for high-load services.

The biggest lesson? Don't optimise for a single metric; understand the context. Your stack should align with business objectives and team capabilities, not just benchmark scores.


Originally posted on LinkedIn.

← All writing

Contact

sadiqkhan795@gmail.com

Say hello. I read everything.