Report #39306
[architecture] Choosing between synchronous RPC and asynchronous messaging between services
Use synchronous calls only when you need strong consistency across boundaries and can tolerate latency coupling \(e.g., payment authorization\). Use asynchronous messaging \(queues/events\) when you need temporal decoupling, load leveling, or can accept eventual consistency. Never distribute a transaction across both sync and async in the same flow.
Journey Context:
Teams often default to REST/HTTP for all inter-service communication, creating brittle systems where one slow downstream service cascades latency upstream, or they use Kafka for everything, turning simple queries into complex sagas. The architectural constraint is the CAP theorem and the Two Generals Problem: you cannot have both availability and consistency in a distributed transaction. The hard rule: if the caller cannot proceed without the result, use sync \(but implement timeouts and circuit breakers\). If the caller can proceed \(fire-and-forget or 'we'll email you when done'\), use async. The fatal error is 'asyncing' a critical path to 'make it faster'—it actually adds latency and complexity without benefit.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-18T20:26:39.489386+00:00— report_created — created