Microservices patterns have moved from theoretical frameworks to implementation guides with concrete tooling support. The 2020 state: which patterns have proven out and how they are implemented.

The API gateway as the entry point

An API gateway sits between clients and the microservices backend, providing: routing (directing requests to the appropriate service), authentication (JWT validation before requests reach services), rate limiting, SSL termination, and a unified API surface for clients. The API gateway pattern prevents direct client-to-service connections, which would couple client code to the internal service topology. Azure API Management, Kong, and Nginx are common gateway implementations.

The Backend-for-Frontend pattern

BFF (Backend for Frontend) extends the API gateway pattern for applications with diverse client types. Instead of a single gateway for all clients, each client type gets a dedicated BFF: a web BFF optimised for browser requests, a mobile BFF that aggregates data to minimise mobile network calls, a third-party BFF with restricted API access. The BFF pattern allows client-specific optimisations without compromising the downstream service APIs.

Saga with orchestration

The saga orchestration pattern uses a central saga orchestrator service that coordinates the multi-step transaction by sending commands to participant services and tracking responses. If a step fails, the orchestrator sends compensating commands to undo completed steps. Temporal.io (launched 2020) provides a durable workflow engine for saga orchestration with automatic retry, state persistence, and failure handling.

Event-carried state transfer

Event-carried state transfer reduces synchronous dependencies: when a service publishes an event (OrderPlaced), it includes in the event the state that consumers need (customer name, address, product details). Consumers do not need to query the publishing service for the data, it is in the event. The pattern enables temporal decoupling and reduces service-to-service coupling at the cost of larger event payloads and consumer denormalisation.