Patterns of Distributed Systems Link to heading
Based on: Catalog of Patterns of Distributed Systems by Unmesh Joshi (published on martinfowler.com, Nov 2023)
Table of Contents Link to heading
1. Why Distributed Systems Are Hard Link to heading
A distributed system is a collection of independent computers that work together and appear to users as a single coherent system. Your bank, your email, your cloud storage — all of these are distributed systems.
The core challenges fall into three buckets:
| Challenge | Plain English | Example |
|---|---|---|
| Partial failure | Some nodes crash; others keep running | One database server dies mid-transaction |
| Network unreliability | Messages can be lost, delayed, or duplicated | A “save” request arrives twice |
| No shared clock | Machines can’t agree on what “now” means | Two writes arrive simultaneously — which one wins? |
The patterns in this guide are battle-tested solutions to these recurring problems. They are not new inventions; they are codified wisdom extracted from systems like ZooKeeper, Kafka, etcd, Cassandra, and Spanner.
2. Pattern Groups at a Glance Link to heading
┌──────────────────────────────────────────────────────────────────┐
│ DISTRIBUTED SYSTEM LAYERS │
├──────────────────────────────────────────────────────────────────┤
│ G: Data Propagation & Observation │ H: Distributed Txns │
├──────────────────────────────────────────────────────────────────┤
│ E: Data Partitioning │ F: Network & Requests │
├──────────────────────────────────────────────────────────────────┤
│ C: Replication & Consensus │ D: Time & Ordering │
├──────────────────────────────────────────────────────────────────┤
│ B: Cluster Coordination & Leadership │
├──────────────────────────────────────────────────────────────────┤
│ A: Durability & Storage (foundation) │
└──────────────────────────────────────────────────────────────────┘