Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services
Distributed systems enable different areas of a business to build specific applications to support their needs and drive insight and innovation.
While great for the business, this new normal can result in development inefficiencies when the same systems are reimplemented multiple times.
This free e-book provides repeatable, generic patterns, and reusable components to make developing reliable systems easier and more efficient—so you can free your time to focus on core development of your app.
In this 160–page e-book, you’ll find: An introduction to distributed system concepts. Reusable patterns and practices for building distributed systems. Exploration of a platform for integrating applications, data sources, business partners, clients, mobile apps, social networks, and Internet of Things devices. Event-driven architectures for processing and reacting to events in real time. Additional resources for learning more about containers and container orchestration systems.
“There are more distributed systems that need to be built than there are people who know how to build them. The development and sharing of patterns for building distributed systems (especially in container orchestration technology like Kubernetes) enables both novice and veteran system builders to rapidly build and deploy reliable distributed systems.” —Brendan Burns
About the author:
Brendan Burns is a Partner Architect in Microsoft Azure, working on Azure Container Service and Azure Resource Manager.
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.
From the Preface
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.
The World of Distributed Systems Today
Once upon a time, people wrote programs that ran on one machine and were also accessed from that machine.
The world has changed. Now, nearly every application is a distributed system running on multiple machines and accessed by multiple users from all over the world.
Despite their prevalence, the design and development of these systems is often a black art practiced by a select group of wizards.
But as with everything in technology, the world of distributed systems is advancing, regularizing, and abstracting.
In this book I capture a collection of repeatable, generic patterns that can make the development of reliable distributed systems more approachable and efficient.
The adoption of patterns and reusable components frees developers from reimplementing the same systems over and over again.
This time is then freed to focus on building the core application itself.