Unmesh Joshi

#Patterns
#Distributed_Systems
#AWS
#GCP
#Kafka
#Kubernetes
#Neo4j
#MongoDB
#Cassandra
#YugabyteDB
A Patterns Approach to Designing Distributed Systems and Solving Common Implementation Problems
More and more enterprises today are dependent on cloud services from providers like AWS, Microsoft Azure, and GCP. They also use products, such as Kafka and Kubernetes, or databases, such as YugabyteDB, Cassandra, MongoDB, and Neo4j, that are distributed by nature. Because these distributed systems are inherently stateful systems, enterprise architects and developers need to be prepared for all the things that can and will go wrong when data is stored on multiple servers--from process crashes to network delays and unsynchronized clocks.
Patterns of Distributed Systems describes a set of patterns that have been observed in mainstream open-source distributed systems. Studying the common problems and the solutions that are embodied by the patterns in this guide will give you a better understanding of how these systems work, as well as a solid foundation in distributed system design principles.
Featuring real-world code examples from systems like Kafka and Kubernetes, these patterns and solutions will prepare you to confidently traverse open-source codebases and understand implementations you encounter "in the wild."
Table of Contents
Part I: Narratives
Chapter 1: The Promise and Perils of Distributed Systems
Chapter 2: Overview of the Patterns
Part II: Patterns of Data Replication
Chapter 3: Write-Ahead Log
Chapter 4: Segmented Log
Chapter 5: Low-Water Mark
Chapter 6: Leader and Followers
Chapter 7: HeartBeat
Chapter 8: Majority Quorum
Chapter 9: Generation Clock
Chapter 10: High-Water Mark
Chapter 11: Paxos
Chapter 12: Replicated Log
Chapter 13: Singular Update Queue
Chapter 14: Request Waiting List
Chapter 15: Idempotent Receiver
Chapter 16: Follower Reads
Chapter 17: Versioned Value
Chapter 18: Version Vector
Part III: Patterns of Data Partitioning
Chapter 19: Fixed Partitions
Chapter 20: Key-Range Partitions
Chapter 21: Two-Phase Commit
Part IV: Patterns of Distributed Time
Chapter 22: Lamport Clock
Chapter 23: Hybrid Clock
Chapter 24: Clock-Bound Wait
Part V: Patterns of Cluster Management
Chapter 25: Consistent Core
Chapter 26: Lease
Chapter 27: State Watch
Chapter 28: Gossip Dissemination
Chapter 29: Emergent Leader
Part VI: Patterns of Communication between Nodes
Chapter 30: Single-Socket Channel
Chapter 31: Request Batch
Chapter 32: Request Pipeline
Software architects and developers today face a plethora of choices in distributed products and cloud services. This book helps in understanding the technical details behind these services and their documentation. It is especially useful for:
Along with enterprise architects and data architects, software developers working with cloud services such as Amazon S3, Amazon EKS, and Azure CosmosDB or GCP Cloud Spanner will find this set of patterns to be indispensable.
Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.
Unmesh Joshi is a Principal Consultant at Thoughtworks with 22 years of industry experience. He is a software architecture enthusiast, who believes that understanding 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. X: @unmeshjoshi









