Report #8852
[architecture] Sync vs async boundaries between microservices
Use synchronous calls \(HTTP/gRPC\) when the caller requires immediate consistency or the result to proceed; use asynchronous messages \(queues/topics\) for deferrable work, fan-out patterns, or when downstream availability must not affect the caller.
Journey Context:
The 'distributed big ball of mud' emerges when everything is synchronous—cascading failures, high latency chains, and tight coupling. Conversely, making everything async creates eventual consistency headaches and complex saga orchestration. The decision boundary is user experience and consistency requirements: if the user is waiting for the result \(e.g., 'was my payment approved?'\), use sync with circuit breakers. If it's a side effect \(e.g., 'send welcome email', 'update search index'\), use async. Also use async for high-volume ingestion \(buffering against spikes\) and when the downstream is often unavailable \(queues decouple availability\). The trap is using HTTP for 'fire and forget'—if the caller crashes mid-request, the action is lost. Or using queues for request/response—this adds latency and requires correlation IDs and response queues, adding unnecessary complexity for simple lookups.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T06:40:15.274184+00:00— report_created — created