Searching...
English
EnglishEnglish
EspañolSpanish
简体中文Chinese
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Designing Distributed Systems

Designing Distributed Systems

Patterns and Paradigms for Scalable, Reliable Services
by Brendan Burns 2018 149 pages
3.59
646 ratings
Listen
Try Full Access for 7 Days
Unlock listening & more!
Continue

Key Takeaways

1. Containers and orchestrators revolutionize distributed systems development

Containers and container orchestrators have all become popular in recent years because they are the foundation and building blocks for reliable distributed systems.

Containerization transforms development. Containers provide a standardized, portable environment for applications, ensuring consistency across different stages of development and deployment. Container orchestrators, like Kubernetes, manage the deployment, scaling, and operation of containerized applications.

Benefits of containerization:

  • Improved resource utilization
  • Faster deployment and scaling
  • Enhanced portability across different environments
  • Easier management of microservices architectures

Container orchestrators automate many complex tasks, such as load balancing, service discovery, and rolling updates, simplifying the management of distributed systems and enabling developers to focus on application logic rather than infrastructure concerns.

2. Single-node patterns: Sidecar, Ambassador, and Adapter

The sidecar pattern is a single-node pattern made up of two containers. The first is the application container. It contains the core logic for the application. Without this container, the application would not exist. In addition to the application container, there is a sidecar container.

Three key single-node patterns:

  1. Sidecar: Augments and improves the main application container
  2. Ambassador: Proxies network connections to and from the main container
  3. Adapter: Standardizes the main container's output

These patterns promote modularity and reusability in container design. They allow developers to separate concerns and create more maintainable and flexible applications. For example, a sidecar container could handle logging or monitoring, an ambassador could manage SSL termination, and an adapter could transform output formats to meet specific requirements.

3. Serving patterns: Replicated load-balanced and sharded services

The simplest distributed pattern, and one that most are familiar with, is a replicated load-balanced service.

Replicated services enhance reliability and scalability. In this pattern, multiple identical instances of a service run behind a load balancer, distributing incoming requests across the replicas. This approach improves fault tolerance and allows for horizontal scaling to handle increased load.

Sharded services enable large-scale data handling:

  • Data is partitioned across multiple servers
  • Each shard is responsible for a subset of the data
  • Enables processing of datasets too large for a single machine

Sharding introduces complexities in data consistency and query routing but is essential for building highly scalable systems that can handle massive amounts of data or traffic.

4. Scatter/Gather pattern for parallel processing and aggregation

Scatter/gather can be seen as sharding the computation necessary to service the request, rather than sharding the data (although data sharding may be part of it as well).

Parallel processing for improved performance. The Scatter/Gather pattern distributes a task across multiple nodes, processes the subtasks in parallel, and then aggregates the results. This approach can significantly reduce processing time for complex computations or large datasets.

Key components:

  1. Scatter: Divide the task into smaller subtasks
  2. Process: Execute subtasks in parallel across multiple nodes
  3. Gather: Collect and combine results from all nodes

This pattern is particularly useful for search operations, data analytics, and other scenarios where work can be easily parallelized and results merged.

5. Function-as-a-Service (FaaS) for event-driven processing

FaaS is inherently an event-based application model. Functions are executed in response to discrete events that occur and trigger the execution of the functions.

Serverless computing revolutionizes deployment. FaaS allows developers to write and deploy individual functions without managing the underlying infrastructure. This model is ideal for event-driven architectures and can significantly reduce operational overhead.

Benefits of FaaS:

  • Automatic scaling based on demand
  • Pay-per-execution pricing model
  • Reduced operational complexity
  • Faster time-to-market for new features

However, FaaS also introduces challenges in areas such as state management, function composition, and debugging. Developers must carefully consider the trade-offs when adopting this model for their applications.

6. Ownership election and distributed coordination

Determining the appropriate key for your sharding function is vital to designing your sharded system well.

Coordinating distributed systems is crucial. In a distributed environment, determining which node or process is responsible for a particular task or data shard is essential. This is achieved through ownership election protocols and distributed coordination mechanisms.

Key concepts:

  • Leader election: Selecting a primary node for coordination
  • Distributed locks: Ensuring mutual exclusion across nodes
  • Consistent hashing: Efficiently mapping data to shards

Tools like etcd, ZooKeeper, and Consul provide primitives for implementing these coordination patterns, enabling the development of robust and scalable distributed systems.

7. Batch processing patterns for scalable data pipelines

The simplest form of batch processing is a work queue. In a work queue system, there is a batch of work to be performed. Each piece of work is wholly independent of the other and can be processed without any interactions.

Efficient processing of large datasets. Batch processing patterns enable the handling of massive amounts of data in a scalable and fault-tolerant manner. These patterns are crucial for data analytics, ETL processes, and other large-scale data processing tasks.

Common batch processing patterns:

  1. Work queues: Distribute independent tasks across workers
  2. MapReduce: Parallel processing and aggregation of data
  3. Dataflow pipelines: Chaining multiple processing steps

These patterns can be implemented using various technologies, from simple container-based systems to complex distributed processing frameworks like Apache Spark or Flink.

8. Event-driven workflows using publisher/subscriber systems

A popular approach to building a workflow like this is to use a publisher/subscriber (pub/sub) API or service.

Decoupled communication for complex workflows. Pub/sub systems enable the creation of flexible, event-driven architectures where components can communicate asynchronously. This pattern is particularly useful for building scalable and maintainable workflows.

Key benefits:

  • Loose coupling between components
  • Improved scalability and fault tolerance
  • Easy addition of new subscribers without affecting publishers

Technologies like Apache Kafka, RabbitMQ, or cloud-based services like Google Cloud Pub/Sub provide robust implementations of the pub/sub pattern, enabling the development of sophisticated event-driven systems.

9. Coordinated batch processing for complex data aggregation

Coordination through join ensures that no data is missing before some sort of aggregation phase is performed (e.g., finding the sum of some value in a set).

Advanced data processing techniques. Coordinated batch processing patterns enable complex data transformations and aggregations across distributed datasets. These patterns are essential for building sophisticated data processing pipelines and analytics systems.

Key patterns:

  1. Join (Barrier Synchronization): Ensure all parallel tasks complete before proceeding
  2. Reduce: Aggregate results from multiple parallel tasks
  3. Histogram: Build statistical distributions from distributed data

These patterns often build upon simpler batch processing concepts but introduce coordination mechanisms to ensure data consistency and completeness in the final results.

10. Reusable patterns accelerate distributed systems development

Patterns like sidecars, ambassadors, sharded services, FaaS, work queues, and more can form the foundation on which modern distributed systems are built.

Patterns enable rapid, reliable development. By leveraging established patterns, developers can build complex distributed systems more quickly and with greater confidence. These patterns encapsulate best practices and solutions to common challenges in distributed computing.

Benefits of using patterns:

  • Reduced development time and cost
  • Improved system reliability and maintainability
  • Easier communication among team members
  • Facilitated knowledge transfer and onboarding

As the field of distributed systems continues to evolve, new patterns will emerge, and existing ones will be refined. Staying informed about these patterns and understanding when and how to apply them is crucial for modern software developers and architects.

Last updated:

Want to read the full book?

FAQ

1. What is "Designing Distributed Systems" by Brendan Burns about?

  • Comprehensive guide to patterns: The book introduces and explains reusable patterns and paradigms for building scalable, reliable distributed systems, focusing on practical implementation.
  • Focus on containers and orchestration: It emphasizes the role of containers and container orchestrators (like Kubernetes) as foundational tools for modern distributed system design.
  • Bridging theory and practice: Brendan Burns provides both conceptual overviews and hands-on examples, making complex distributed systems more accessible to developers.
  • Pattern-driven approach: The book organizes distributed system design into repeatable, generic patterns, aiming to transform system building from a black art into a more scientific, standardized process.

2. Why should I read "Designing Distributed Systems" by Brendan Burns?

  • Demystifies distributed systems: The book makes the design and development of distributed systems approachable, even for those without deep prior experience.
  • Reusable knowledge and tools: It provides a shared vocabulary and set of patterns, enabling developers to avoid reinventing the wheel and to build on proven solutions.
  • Practical, hands-on focus: Readers gain actionable advice, code samples, and real-world deployment scenarios, especially using containers and Kubernetes.
  • For all experience levels: Whether you’re new to distributed systems or an experienced engineer, the book offers insights and best practices to improve your efficiency and system reliability.

3. What are the key takeaways from "Designing Distributed Systems" by Brendan Burns?

  • Patterns accelerate development: Recognizing and applying distributed system patterns saves time, reduces errors, and improves system quality.
  • Containers enable modularity: Containers and orchestrators like Kubernetes are essential for building, deploying, and managing reusable system components.
  • Separation of concerns: Patterns like sidecar, ambassador, and adapter help modularize functionality, making systems easier to scale, maintain, and evolve.
  • Community and reuse: Open source and shared patterns foster a collaborative environment where developers can leverage each other’s work for faster, more reliable results.

4. Who is the intended audience for "Designing Distributed Systems" by Brendan Burns?

  • Developers of all levels: The book is suitable for both newcomers to distributed systems and seasoned professionals seeking to formalize their knowledge.
  • Cloud-native practitioners: Those working with containers, Kubernetes, or cloud APIs will find the book especially relevant and practical.
  • Teams building scalable services: It’s valuable for organizations aiming to improve reliability, scalability, and agility in their software systems.
  • Anyone interested in patterns: Readers who appreciate structured approaches and reusable solutions in software engineering will benefit from the book’s pattern-centric methodology.

5. How does Brendan Burns define and use patterns in "Designing Distributed Systems"?

  • General blueprints, not recipes: Patterns are described as reusable, technology-agnostic blueprints for organizing distributed systems, rather than step-by-step instructions for specific technologies.
  • Shared language and best practices: Patterns provide a common vocabulary, enabling teams to communicate more effectively and learn from each other’s experiences.
  • Basis for reusable components: By formalizing patterns, developers can create modular, containerized components that are easily shared and reused across projects.
  • Examples throughout the book: The book details specific patterns like sidecar, ambassador, adapter, replicated services, sharded services, and more, illustrating their application with real-world scenarios.

6. What are the main single-node patterns discussed in "Designing Distributed Systems" by Brendan Burns?

  • Sidecar pattern: Augments an application container with additional functionality (e.g., adding HTTPS, dynamic configuration) without modifying the original application.
  • Ambassador pattern: Acts as a proxy or broker between the application and external services, enabling sharding, service brokering, or request splitting.
  • Adapter pattern: Modifies the interface of an application container to conform to expected standards (e.g., for monitoring, logging, or health checks).
  • Emphasis on modularity: These patterns encourage breaking up applications into focused, reusable containers, improving maintainability and scalability.

7. How does "Designing Distributed Systems" by Brendan Burns address multi-node (serving) patterns?

  • Replicated load-balanced services: Describes how to scale stateless services using replication and load balancing for high availability and performance.
  • Sharded services: Explains partitioning stateful services across multiple nodes to handle large data sets and improve scalability.
  • Scatter/gather pattern: Details parallelizing computation across nodes to reduce response time for complex queries or processing tasks.
  • Ownership election: Covers distributed coordination for assigning exclusive ownership or master roles among replicas, ensuring reliability and failover.

8. What role do containers and Kubernetes play in "Designing Distributed Systems" by Brendan Burns?

  • Foundational building blocks: Containers are presented as the atomic units for encapsulating application logic, dependencies, and configuration.
  • Orchestration for reliability: Kubernetes and similar orchestrators automate deployment, scaling, and management of containerized applications, making distributed patterns practical.
  • Pattern implementation: Many patterns in the book are illustrated with Kubernetes YAML files, showing how to deploy and manage complex systems using container orchestration.
  • Reusable, language-agnostic components: By packaging patterns as containers, they can be reused across different programming languages and environments.

9. How does "Designing Distributed Systems" by Brendan Burns approach batch computational patterns?

  • Work queue systems: Introduces generic, reusable work queue architectures for parallel batch processing, with clear interfaces for sources and workers.
  • Event-driven batch processing: Describes chaining and coordinating work queues using patterns like copier, filter, splitter, sharder, and merger to build complex workflows.
  • Coordinated batch processing: Explains aggregation patterns such as join (barrier synchronization) and reduce (as in MapReduce) for combining results from parallel tasks.
  • Hands-on examples: Provides practical scenarios (e.g., video thumbnailing, image tagging) to demonstrate how these batch patterns are implemented with containers and orchestration.

10. What are the most important concepts and definitions introduced in "Designing Distributed Systems" by Brendan Burns?

  • Pattern: A reusable, general solution to a recurring problem in distributed system design, independent of specific technologies.
  • Sidecar, Ambassador, Adapter: Key single-node patterns for modularizing and extending containerized applications.
  • Replicated, Sharded, Scatter/Gather: Core multi-node patterns for scaling, partitioning, and parallelizing distributed services.
  • Ownership election: Mechanisms for distributed coordination and master selection, often using tools like etcd or ZooKeeper.
  • Batch processing patterns: Work queues, event-driven workflows, and coordinated aggregation (join/reduce) for large-scale data processing.

11. What practical advice does Brendan Burns give for designing modular, reusable distributed systems in "Designing Distributed Systems"?

  • Parameterize containers: Expose configuration via environment variables or command-line arguments to make containers flexible and reusable.
  • Define clear APIs: Treat each container’s interface as a contract, maintaining backward compatibility and documenting expected inputs/outputs.
  • Document containers: Use Dockerfile comments, labels, and metadata to provide usage instructions and maintainability information.
  • Leverage orchestration: Use Kubernetes features like Deployments, Services, ConfigMaps, and Jobs to automate and manage distributed patterns effectively.

12. What are some of the best quotes from "Designing Distributed Systems" by Brendan Burns, and what do they mean?

  • “Patterns are the basis for the definition and development of such reusable components.”
    This highlights the central thesis that formalizing patterns enables the creation of shared, modular building blocks for distributed systems.
  • “Distributed system design continues to be more of a black art practiced by wizards than a science applied by laypeople.”
    Burns points out the historical complexity of distributed systems and the need for standardization and democratization through patterns.
  • “Standing on the shoulders of giants.”
    The book encourages learning from established best practices and the experiences of others, rather than reinventing solutions.
  • “Containers are the foundational building block for the patterns in this book.”
    This underscores the importance of containers in enabling modularity, reuse, and automation in modern distributed system design.
  • “The identification of common patterns and practices has regularized and improved the practice of algorithmic development and object-oriented programming. It is this book’s goal to do the same for distributed systems.”
    Burns draws a parallel between the evolution of programming paradigms and the current need for standardized distributed system patterns.

Review Summary

3.59 out of 5
Average of 646 ratings from Goodreads and Amazon.

Designing Distributed Systems receives mixed reviews. Many readers find it a good introduction to container-based systems and Kubernetes, but criticize its narrow focus and misleading title. Some praise its concise overview of distributed system patterns, while others feel it lacks depth. The book is recommended for those new to the field or working with Kubernetes, but experienced professionals may find limited value. Readers appreciate the practical examples and hands-on sections, though some find the content too basic or heavily biased towards specific technologies.

Your rating:
4.21
77 ratings

About the Author

Brendan Burns is a prominent figure in the field of distributed systems and cloud computing. As a co-founder of Kubernetes and a distinguished engineer at Microsoft, Burns has extensive experience in designing and implementing large-scale distributed systems. His work focuses on container orchestration, cloud-native applications, and microservices architecture. Burns is known for his contributions to the open-source community and his efforts to simplify complex distributed systems concepts for developers. He has authored several books and frequently speaks at technology conferences, sharing his expertise and insights on modern software architecture and cloud computing.

Download PDF

To save this Designing Distributed Systems summary for later, download the free PDF. You can print it out, or read offline at your convenience.
Download PDF
File size: 0.22 MB     Pages: 13

Download EPUB

To read this Designing Distributed Systems summary on your e-reader device or app, download the free EPUB. The .epub digital book format is ideal for reading ebooks on phones, tablets, and e-readers.
Download EPUB
File size: 3.47 MB     Pages: 9
Listen
Now playing
Designing Distributed Systems
0:00
-0:00
Now playing
Designing Distributed Systems
0:00
-0:00
1x
Voice
Speed
Dan
Andrew
Michelle
Lauren
1.0×
+
200 words per minute
Queue
Home
Swipe
Library
Get App
Create a free account to unlock:
Recommendations: Personalized for you
Requests: Request new book summaries
Bookmarks: Save your favorite books
History: Revisit books later
Ratings: Rate books & see your ratings
250,000+ readers
Try Full Access for 7 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Today: Get Instant Access
Listen to full summaries of 73,530 books. That's 12,000+ hours of audio!
Day 4: Trial Reminder
We'll send you a notification that your trial is ending soon.
Day 7: Your subscription begins
You'll be charged on Dec 22,
cancel anytime before.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
250,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 7-Day Free Trial
7 days free, then $44.99/year. Cancel anytime.
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel