Report #97684
[architecture] Should a service boundary be synchronous \(REST/gRPC\) or asynchronous \(queue/event\)?
Use synchronous calls for queries \(read data now\) and asynchronous events for commands \(do something, don't wait\). For workflows requiring eventual consistency, always prefer async with an event bus. This is the 'Command-Query Responsibility Segregation' \(CQRS\) principle applied to service boundaries.
Journey Context:
The common mistake: using synchronous RPC for everything because it's simpler to code. This couples services in time and space — if the downstream is slow or down, the upstream fails. The fix: separate reads \(sync, low latency\) from writes \(async, durable\). For example, an order service emits an 'OrderPlaced' event; the inventory service consumes it asynchronously. If inventory is down, the order still succeeds. The tradeoff: async adds complexity \(event schemas, retries, at-least-once delivery\) but decouples services for resilience. This pattern is central to microservices architecture and is documented by Microsoft and Amazon. Sync is fine for internal admin UIs or low-latency queries.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-25T15:51:22.532481+00:00— report_created — created