Patterns and Paradigms for Scalable, Reliable Systems Using Kubernetes
Brendan Burns
design_patterns#
Systems_engineer#
application_developer#
Every distributed system strives for reliability, performance, and quality, but building such a system is hard. Establishing a set of design patterns enables software developers and system architects to use a common language to describe their systems and learn from the patterns and practices developed by others.
The popularity of containers and Kubernetes paves the way for core distributed system patterns and reusable containerized components. This practical guide presents a collection of repeatable, generic patterns to help guide the systems you build using common patterns and practices drawn from some of the highest performing distributed systems in use today. These common patterns make the systems you build far more approachable and efficient, even if you've never built a distributed system before.
Author Brendan Burns demonstrates how you can adapt existing software design patterns for designing and building reliable distributed applications. Systems engineers and application developers will learn how these long-established patterns provide a common language and framework for dramatically increasing the quality of your system.
This fully updated second edition includes new chapters on AI inference, AI training, and building robust systems for the real world.
Table of Contents
Part I. Foundational Concepts
Chapter 1. Introduction
Chapter 2. Important Distributed System Concepts
Part II. Single-Node Patterns
Chapter 3. The Sidecar Pattern
Chapter 4. Ambassadors
Chapter 5. Adapters
Part III. Serving Patterns
Chapter 6. Replicated Load-Balanced Services
Chapter 7. Sharded Services
Chapter 8. Scatter/Gather
Chapter 9. Functions and Event-Driven Processing
Chapter 10. Ownership Election
Part IV. Batch Computational Patterns
Chapter 11. Work Queue Systems
Chapter 12. Event-Driven Batch Processing
Chapter 13. Coordinated Batch Processing
Part V. Universal Concepts
Chapter 14. Monitoring and Observability Patterns
Chapter 15. AI Inference and Serving
Chapter 16. Common Failure Patterns
Who Should Read
This Book At this point, nearly every developer is a developer or consumer (or both) of distributed systems. Even relatively simple mobile applications are backed with cloud APIs so that their data can be present on whatever device the customer happens to be using. Whether you are new to developing distributed systems or an expert with scars on your hands to prove it, the patterns and components described in this book can transform your development of distributed systems from art to science. Reusable components and patterns for distributed systems will enable you to focus on the core details of your application. This book will help any developer become better, faster, and more efficient at building distributed systems.
Why I Wrote This Book
Throughout my career as a developer of a variety of software systems, from web search to the cloud, I have built a large number of scalable, reliable distributed systems. Each of these systems was, by and large, built from scratch. In general, this is true of all distributed applications. Despite having many of the same concepts and even at times nearly identical logic, the ability to apply patterns or reuse components is often very, very challenging. This forced me to waste time reimplementing systems, and each system ended up less polished than it might have otherwise been.The recent introduction of containers and container orchestrators fundamentally changed the landscape of distributed system development. Suddenly we have an object and interface for expressing core distributed system patterns and building reusable containerized components. I wrote this book to bring together all of the practitioners of distributed systems, giving us a shared language and common standard library so that we can all build better systems more quickly.
Brendan Burns is Corporate Vice President at Microsoft responsible for Azure management and governance, Azure Arc, Kubernetes on Azure, Linux on Azure and PowerShell. Prior to Microsoft he worked at Google in the Google Cloud Platform, where he co-founded the Kubernetes project and helped build APIs like Deployment Manager and Cloud DNS. Before working on cloud, he worked on Google's web-search infrastructure, with a focus on low-latency indexing. He has a PhD in Computer Science from the University of Massachusetts Amherst with a specialty in Robotics. He lives in Seattle with his wife Robin Sanders, their two children and a cat Mrs. Paws, who rules over their household with an iron paw.