<arch.design/>
Principles/Microservices Architecture
SystemArchitectureadvanced2011distributed-systemssoaindependent-deploymentscalability

Microservices Architecture

Decompose an application into small, independently deployable services that communicate over a network.

5/5
Operates at: System level

System topology — how multiple services are organised

Interactive visualization

Live
Click a service to explore its responsibilities
API Gatewayauth · rate-limit · routingUser Serviceprofiles · sessionsowns: users DBOrder Servicecart · order lifecycleowns: orders DBPayment Servicecharge · refund · stripeowns: payments DBInventory Servicestock · reservationsowns: inventory DBNotification Serviceemail · sms · pushowns: templates DB

How it works

Microservices architecture structures an application as a collection of loosely coupled services, each responsible for a specific business capability. Services communicate via lightweight protocols — typically HTTP/REST, gRPC, or asynchronous messaging.

Each service owns its data store, can be deployed independently, and is built around a business domain (e.g., User Service, Order Service, Payment Service). Teams can develop, deploy, and scale services independently.

The pattern introduces operational complexity: you need service discovery, distributed tracing, circuit breakers, and an API gateway. Tools like Kubernetes, Istio, and Prometheus typically form the operational backbone.

Why it matters

Microservices let large organisations scale development by allowing independent teams to own and deploy services, removing the bottleneck of a shared monolith.

When to use

  • Large teams that need independent deployment cadences
  • Services with very different scaling requirements
  • Different parts of the system require different technology stacks
  • High availability requirements for specific business capabilities

When NOT to use

  • Small teams (< 10 engineers) — operational overhead outweighs benefits
  • Early-stage product where domain boundaries are still unknown
  • When network latency would degrade user experience unacceptably

Trade-offs

+

Independent deployment and scaling per service

Distributed systems complexity (network failures, latency)

+

Technology heterogeneity — right tool for each job

Operational overhead: monitoring, tracing, service mesh

+

Fault isolation — one service failing doesn't crash others

Data consistency across services is hard (eventual consistency)

In production

Netflix

700+ microservices; each team owns its service lifecycle

Amazon

Two-pizza teams each own independent services (since ~2002)

Uber

Decomposed monolith into domain-specific microservices as scale grew

Industry adoption

5/5Ubiquitous — used at virtually every scale-focused company.

Related principles