Enterprises today rely on a range of distributed software handling data storage, messaging, system management, and compute capability. Distributed system designs need to be implemented in some programming language, and there are common problems that these implementations need to solve. These problems have common recurring solutions.
A patterns approach is very suitable to describe these implementation aspects. Patterns by nature are generic enough to cover a broad range of products from cloud services like S3 to message brokers like Apache Kafka to infrastructure frameworks like Kubernetes to databases like MongoDB or Actor frameworks like Akka. At the same time the pattern structure is specific enough to be able to show real code. The beauty of this approach is that even if the code structure is shown in one programming language (Java in this case), the structure applies to many other programming languages.
Patterns also form a "system of names," with each name having specific meaning in terms of the code structure. The set of patterns presented in Patterns of Distributed Systems will be useful to all developers--even if they are not directly involved in building these kinds of systems, and mostly use them as a black box. Learning these patterns will help readers develop a deeper understanding of the challenges presented by distributed systems and will also help them choose appropriate cloud services and products. Coverage includes Patterns of Data Replication, Patterns of Data Partitioning, Patterns of Distributed Time, Patterns of Cluster Management, and Patterns of Communication Between Nodes.
Features –
1. Review the building blocks of consensus algorithms, like Paxo’s and Raft, for ensuring replica consistency in distributed systems
2. Understand the use of logical timestamps in databases, a fundamental concept for data versioning
3. Explore commonly used partitioning schemes, with an in-depth look at the intricacies of two-phase-commit protocol
4. Analyze mechanisms used in implementing cluster coordination tasks, such as group membership, failure detection, and enabling robust cluster coordination
5. Learn techniques for establishing effective network communication between cluster nodes.
Along with enterprise architects and data architects, software developers working with cloud services such as S3, EKS, and Azure Cosmos DB or GCP Cloud Spanner will find this set of patterns to be indispensable.
About the Author -
Unmesh Joshi is a Principal Consultant at Thought Works with 22 years of industry experience. He is a software architecture enthusiast, who believes that understanding the principles of distributed systems is as essential today as understanding web architecture or object-oriented programming was in the last decade.
For the last two years, he has been publishing patterns of distributed systems on martinfowler.com. He has also conducted various training sessions around this topic. Twitter – @unmeshjoshiUNMESH JOSHI is a Principal Consultant at Thought Works and has 24 years of industry experience. An enthusiast of software architecture, he firmly believes that today's tech landscape requires a deep understanding of distributed systems. For the last three years, he has published patterns of distributed systems on martinfowler.com and has conducted various training sessions around the topic.
Book Contents –
Part I: Narratives –
1. The Promise and Perils of Distributed Systems, 2. Overview of the Patterns
Part II: Patterns of Data Replication –
3. Write-Ahead Log, 4. Segmented Log, 5. Low-Water Mark, 6. Leader and Followers, 7. HeartBeat, 8. Majority Quorum, 9. Generation Clock, 10. High-Water Mark, 11. Paxos, 12. Replicated Log, 13. Singular Update Queue, 14. Request Waiting List, 15. Idempotent Receiver, 16. Follower Reads, 17. Versioned Value, 18. Version Vector
Part III: Patterns of Data Partitioning –
19. Fixed Partitions, 20. Key-Range Partitions, 21. Two-Phase Commit
Part IV: Patterns of Distributed Time
22. Lampert Clock, 23. Hybrid Clock, 24. Clock-Bound Wait
Part V: Patterns of Cluster Management –
25. Consistent Core, 26. Lease, 27. State Watch, 28. Gossip Dissemination, 29. Emergent Leader
Part VI: Patterns of Communication between Nodes –
30. Single-Socket, 31. Request Batch, 32. Request Pipeline