serversim
LearnSimulatorTemplatesPricing
…
…
Open menu
Learn↗Simulator↗Templates↗Pricing↗
My DocumentsDocs
BLOG

MSA vs Monolith — compared with a real load simulator

2026-05-14·8 min·
MSAarchitectureinterviewsystem design

Is service decomposition always the right answer? Same workload, monolith single server vs MSA chain — compare throughput, latency, and operational cost. Core whiteboard interview discussion.

One-line conclusion

Monolith is faster — until your team and traffic shape forces decomposition. MSA pays for organizational scale, not for throughput.

The experiment

Same workload, two topologies:

  • Monolith: NGINX → Spring (single service) → MySQL
  • MSA: NGINX → Gateway → 4 microservices in a chain → MySQL each

Drive 1000 RPS into both. Watch p99 latency, throughput, and CPU.

Result

Monolith: ~50ms p99, full throughput. MSA: ~120ms p99 (added hop latency × 4), slightly lower throughput, but each service can scale independently — and a slow downstream only affects one chain instead of the whole app.

When does MSA pay off?

  • Different services have wildly different scale needs (recommendation vs payment).
  • Different teams own different domains and want independent deploys.
  • Different SLAs — payment must not be brought down by analytics.
  • Different languages / runtimes — image processing in Go, ML in Python.

When monolith wins

  • Small team (< 10 engineers) — coordination cost dominates.
  • Low traffic — one DB is enough.
  • Tightly coupled domain — distributed transactions become a tax.
  • Early product — schema and boundaries are still moving.

Common mistakes

  1. Starting with MSA: you pay distributed-system cost from day one with no organizational benefit. Start monolith, modularize, then extract services once boundaries are clear.
  2. Sharing a DB across services: services depend on each other’s schema. Now you have distributed-system pain and monolith coupling.
  3. Sync chain calls: A → B → C → D. p99 sums up. Use async or CQRS where you can.
  4. No saga / outbox: distributed transactions break on first failure. Pick an eventual-consistency pattern up front.

Whiteboard answer

“I would start with a monolith. Once a domain shows clear ownership and scale signals — payment requiring tighter SLA, recommendation needing GPU instances — I would extract it as a service with its own DB and the Saga / Outbox patterns. Throughput gain alone never justifies the operational cost.”

Try it in the simulator

The scenarios in this post are runnable in the simulator. Turn the knobs and watch the result change.

Open simulator →
← Back to blog
© 2025-2026 serversim · Architecture simulation tool