SDI.
All Concepts
SystemsarchitectureRESTgRPCevent-drivencouplinglatencyresiliencechoreographyorchestration

Synchronous vs Asynchronous Communication

Synchronous communication blocks the caller until the response arrives (HTTP, gRPC), while asynchronous communication decouples the sender from the receiver via an intermediary (queues, events) — and the choice determines your system's latency profile, failure modes, and coupling characteristics.

In synchronous communication (REST, gRPC), Service A calls Service B and waits for a response. The call chain is simple to reason about, supports request-response patterns naturally, and gives immediate feedback. But if Service B is slow or down, Service A is stuck.

In asynchronous communication (message queues, event buses), Service A publishes a message and moves on. Service B processes it whenever it can. The services are decoupled in time — A doesn't wait, B doesn't need to be online. But the system is harder to debug, eventual consistency is the norm, and you lose the immediate response.

Most production systems use both: synchronous for user-facing request paths where latency matters, and asynchronous for background processing where resilience and throughput matter.

Tradeoffs

Synchronous — Strengths

  • Simple request-response mental model
  • Immediate feedback — know if the operation succeeded
  • Strong consistency is achievable
  • Easy to debug — follow the call chain
  • Standard tooling (HTTP clients, gRPC, Postman)

Synchronous — Weaknesses

  • Temporal coupling — caller blocks until response arrives
  • Cascading failures — one slow service affects everything upstream
  • Throughput limited by slowest service in the chain
  • Retry storms during outages can amplify failures

Asynchronous — Strengths

  • Temporal decoupling — producer and consumer don't need to be online simultaneously
  • Natural backpressure via queue depth
  • Failure isolation — one consumer's issues don't affect others
  • Higher throughput — batch processing, parallel consumers
  • Built-in audit trail when using event logs (Kafka)

Asynchronous — Weaknesses

  • Eventual consistency — stale reads during consistency window
  • Harder to debug — distributed tracing across event flows
  • More infrastructure (message brokers, DLQs, monitoring)
  • No immediate feedback — user may not know if operation succeeded
  • Ordering complexity — messages may arrive out of order

Likely Follow-Up Questions

  • How would you handle a saga that partially fails?
  • When would you use synchronous communication between microservices despite the coupling risk?
  • How do circuit breakers prevent cascading failures in synchronous architectures?
  • How would you ensure data consistency across services using asynchronous events?
  • What's the difference between orchestration and choreography, and when would you use each?
  • How does eventual consistency affect the user experience, and how do you mitigate it?

Source: editorial — Synthesized from production patterns at Uber, Stripe, Shopify, Netflix, and Amazon

Command Palette

Search for a command to run...