Microservices

Independent services communicating over well-defined APIs.

Microservices decompose an application into small, independently deployable services that communicate over well-defined APIs (REST, gRPC, or message queues).

Architecture

┌──────────┐    ┌──────────┐    ┌──────────┐
│ User Svc │    │ Order Svc│    │ Pay Svc  │
│  ┌────┐  │    │  ┌────┐  │    │  ┌────┐  │
│  │DB  │  │    │  │DB  │  │    │  │DB  │  │
│  └────┘  │    │  └────┘  │    │  └────┘  │
└────┬─────┘    └────┬─────┘    └────┬─────┘
     │               │               │
     └───────────────┼───────────────┘
                     │
              ┌──────┴──────┐
              │ API Gateway │
              └──────┬──────┘
                     │
                  Clients

When to Use

When to Avoid

Key Decisions

Decision Options Trade-off
Communication REST, gRPC, messaging Sync vs. async coupling
Data Shared DB, DB per service Consistency vs. autonomy
Discovery DNS, service mesh, registry Simplicity vs. observability
Deployment Containers, serverless Control vs. convenience

Challenges

  1. Distributed data — no ACID across services; plan for eventual consistency
  2. Network failures — design for retries, circuit breakers, timeouts
  3. Observability — distributed tracing is essential (OpenTelemetry, Jaeger)
  4. Testing — contract tests replace integration tests across service boundaries

Next: Event-Driven Architecture