Used in complex applications that require short release cycles and high scalability and availability.
Note
Each service typically:
- Implements one functionality
- Is deployed independently
- May have its own database
- Is managed by an orchestrator

The server-to-server connectors (often RPC) is a large part of this system. This architectural pattern introduces a large amount of complexity.
Note
Microservices are organized around business capabilities, not technical layers.

Vs Streaming
The advantage of this over a monolith is primarily organizational scalability through loose coupling. When it comes to orchestrating several services synchronously through gRPC, think about using a stream join in Stream Processing which is faster since we only need to query a local database which also makes us robust to service failure at query time. In general, subscribing to a stream of changes, rather than querying current state when needed is the cleaner approach.