Synchronous communication: caller sends a request and waits for the response (e.g. HTTP/gRPC). Asynchronous: caller sends a message and doesn’t wait (e.g. queue, event bus); the other service processes later and may reply via another channel.
| Aspect | Sync | Async |
|---|---|---|
| Coupling | Caller knows callee, needs to be up | Decoupled; queue absorbs load |
| Latency | Wait for response | No wait; processing later |
| Failure | Timeout, retry, cascade | Retry via queue; backpressure |
| Use case | Need immediate result (e.g. get user) | Fire-and-forget, events, eventual consistency |
Use sync when the caller needs the result to continue (e.g. auth check, fetch user). Use async for notifications, background work, or when you want to decouple and avoid cascading failures.