Synchronous
Used when a caller needs an immediate answer (e.g. a query or a command that must confirm before responding).- Request/response over HTTP or gRPC.
- Simple to reason about, but couples caller availability to callee availability.
- Guarded with timeouts, retries, and circuit breakers.
Asynchronous
Used for events and work that can complete independently of the caller.- Messages/events published to a message broker.
- Decouples producers from consumers; absorbs load spikes.
- Enables event-driven workflows and the Saga pattern.
Prefer asynchronous events for cross-service state changes; reserve synchronous calls for
reads and operations that genuinely need an immediate result.