Jump to ratings and reviews
Rate this book

Designing Distributed Systems: Patterns and Paradigms for Scalable, Reliable Services

Rate this book
Developing reliable, scalable distributed systems today is often more black art than science. Building these systems is complicated and, because few formally established patterns are available for designing them, most of these systems end up looking very unique. This practical guide shows you how to use existing software design patterns for designing and building reliable distributed applications.

Although patterns such as those developed more than 20 years ago by the Gang of Four were largely restricted to running on single machines, author Brendan Burns--a Partner Architect in Microsoft Azure--demonstrates how you can reuse several of them in modern distributed applications.

Systems engineers and application developers will learn how these patterns provide a common language and framework for dramatically increasing the quality of your system.

162 pages, Paperback

Published April 3, 2018

293 people are currently reading
1499 people want to read

About the author

Brendan Burns

29 books17 followers

Ratings & Reviews

What do you think?
Rate this book

Friends & Following

Create a free account to discover what your friends think of this book!

Community Reviews

5 stars
109 (16%)
4 stars
238 (36%)
3 stars
235 (36%)
2 stars
60 (9%)
1 star
7 (1%)
Displaying 1 - 30 of 75 reviews
Profile Image for Damien.
32 reviews4 followers
September 5, 2020
Nice entry-level book.
it should be named "Designing Distributed Systems with Kubernetes" though
Profile Image for Mosab.
17 reviews31 followers
February 5, 2018
The title is misleading. Instead it should be "A Quick Tour in Distributed Systems using Kubernetes".
Profile Image for Miloš.
67 reviews3 followers
November 10, 2021
Well, this sure de-escalated quickly and my unusually high level of irritation is probably triggered by the fact that someone with intimate knowledge of both Kubernetes and Azure internals should have produced a seminal book on distributed systems and not this dud. The rational part of me knows that it's both unfair and unrealistic to expect a great engineer to write an equally great technical book but still, the emotional me that is knowledge-hungry can't but feel betrayed.

I had my suspicions when the author pointed out that the patterns were going to be exclusively container-based - containers to me are just a way someone chooses to package and distribute theirs software, i.e. it's an aspect that should be completely orthogonal to the way you actually design and decompose your distributed system so that statement felt like a weird flex more than anything else. It slowly but steadily went downhill from there, until it drove off a cliff that are the last three chapters.

While I can't say that the patterns and ideas presented in the book are bad - in fact, if you've worked with k8s you've probably already used most of them - it's just that the focus of the book felt to be less on its titular topic and more on showcasing some well-known patterns in a Kubernetes setting. To add insult to injury, not only is the Kubernetes focus misplaced but even that aspect is clumsily covered, and the writing in general is often lacking as well.

One of the most irritating is the fact the author took what I call the teleshop salesman approach (a modern variant of the strawman argument). To present the container-based patterns in a more attractive light, the least favourable way of achieving the goal without the use of containers is often used, and its shortcomings miraculously solved by the pattern, huzzah! The fact that a mainstream non-container approach often has no such shortcomings is conveniently left out. For instance, lack of reusability of traditional approaches is mentioned for every other pattern, but those patterns are most often developed as reusable libraries available in lots of languages but for some reason that fact rarely (if ever?) gets mentioned, much to my chagrin.

Barring the single-node patterns, which are actually decently argued and discussed when compared to the rest of the book, the use cases for a pattern always seem to be among the simplest. For instance, load balancing is either round-robin or sticky, other approaches aren't even discussed. Sharding is only discussed and used in a context where the data associated with a shard is transient, i.e. the impact of a change in cluster topology is low but what of stateful systems that need to avoid data loss? How does the pattern, as described here, help the developer then?

The level of detail varies greatly from pattern to pattern, and the quality of discussion is inveresely proportional to the complexity of the described patterns - the further we progress and as the patterns become more complex, so do we get fewer and fewer considerations of the pros, cons and trade-offs of such an approach, its alternatives, its more complex use cases, etc. The batching section of the book is particularly abysmal in that regard, especially the later chapters - not even a whisper of a reason anyone should prefer described event-driven and coordinated patterns with their staggering overheads to a regular message broker+EIP framework, or a full-fledged streaming system like Kafka Streams (or, if you're into the heavier stuff, Spark)?

All in all, it's a short read and the Kubernetes bits are decent, but I can't see anyone gaining any use of the book except the most junior devs.
14 reviews
May 5, 2021
The book provides a bird's eye view of today's approaches into distributed systems architecture focussed around concurrency and parallelism, supported by frameworks like event-driven workflows, containerization and FaaS to enable development of real-world web-scale infrastructure. The author expects some prior exposure to Kubernetes and Go programming for some of the walk-through implementations. The book can form an initial read into common abstraction layers for achieving redundancy, fault tolerance and high availability, with the essential driving sentiment being: don't re-invent the wheel, but rather build on top of it. 3/5.
Profile Image for Babak Ghadiri.
34 reviews9 followers
August 30, 2021
در مقدمه این کتاب از فواید الگوها در توسعه نرم‌افزار میگه و خودش رو با کتاب GoF به عنوان مرجعی برای الگوهای ساخت سیستمهای توزیع شده مقایسه میکنه، اما به نظرم یکی از مهمترین اصول تعریف الگو، یعنی نامگذاری مناسب رو رعایت نمیکنه. خیلی از اسامی پیشنهادی، مبهم و طولانی اند. یعنی نویسنده خیلی زحمتی نکشیده و جرئتی نداشته در تعیین اسم جدید مثلا یه نمونه اسمش اینه: Functions and Event-Driven Processing. به نظرم انتخاب الگوهاش هم بعضا مناسب نبود یعنی بعضی چیزهای کم اهمیت‌تر رو به عنوان الگو بیان کرد. با وجود کم حجم بودن کتاب (حدود ۱۵۰ صفحه) خیلی قسمتهاش به نظرم زائد بود و می‌تونست بیان نشه مثلا یه قسمت درباره چیستی helm داره و نصب کافکا باهاش رو میگه. یه مسئله‌ی دیگه این بود که خیلی کوبرنتیز-محور بود که با توجه به پیشینه‌ی نویسنده، چیز عجیبی نیست. شاید درباره‌ی همین موضوع (الگوهای عملی ساخت سیستمهای توزیع‌شده) یه نفر در حوزه‌ی مثلا erlang میخواست کتاب بنویسه، تعداد زیادی از این الگوها تغییر میکرد. یعنی الگوهاش به نظرم به شکل نالازمی تک‌بعدی و ناقص هست.
بعدش به این فکر کردم که چرا به نظرم تکراری و ناکافی بود و اینکه برای یادگیری (عملی) سیستمهای توزیع شده چه کتابهایی بهتره، این ترکیب به ذهنم رسید:
کتاب DDIA از مارتین کلپمن - یه کتاب درباره‌ی سازوکار Erlang و OTP مثل کتاب Erlang از فرانچسکو سزارینی - یه کتاب در حوزه کار با کوبرنتیز مثل Kubernetes Patterns
در کل این کتاب برای افرادی که دانش کمی در این زمینه دارند می‌تونه برای آشنایی مفید باشه. همچنین با توجه به حجمش میشه چند ساعت وقت گذاشت و مثلا در یه جمعه مطالعه‌اش کرد.
Profile Image for Laura Uzcategui.
120 reviews8 followers
October 27, 2020
I just completed this book, I recommend this book to those who are looking for best practices, why's and how's of deploying , handling and writing applications that lives within distributed systems. It's an easy read, the patterns chapter is a new tool to put inside your toolbox. It's not about having a service and saying it's on a container, it's about knowing what you need to build a reliable service that is running on a container and use a container orchestrator and know what are the best patters to adapt it to each different use case. Also it serves as a good introduction for Kubernetes.
Profile Image for Eduardo.
71 reviews7 followers
September 22, 2018
I have to admit that you have to squint a little to understand that this book is *not* about kubernetes. Now that we have established that, I just loved how brief and targeted it is. The book really is a collection of distributed systems patterns. This book, similar to the use of C++ and UML in the GoF book, uses kubernetes as its "language" to reify the patterns.
Profile Image for Naing Lin .
49 reviews15 followers
January 30, 2020
3.5 stars. You don't need to be mastery in docker and kubernetes but examples are written with it and you need knack for that. Aside from the fact, pretty great book if we are considering it as a quick read though in the midst of making or expanding your own system. But should not be the first book you ever read in this subject because it lack details.
Profile Image for David Robillard.
144 reviews8 followers
February 16, 2018
If you work with distributed systems, then the whole team should read this book if only to make sure every team member uses the same terminology and language. The theory is followed by a hands-on section which focuses on Kubernetes. Which is interesting if you're using Kubernetes and containers. Less so if you're not. Still a great read for anyone who has to design and run online, distributed systems.
Profile Image for Adelina Simion.
52 reviews5 followers
April 15, 2020
A good read that presents some interesting distributed design patterns.
While the patterns are not advanced, I found it a beneficial exercise to see them formally explained and analyzed. This book uses Kubernetes for hands on/demos, but you don't have to be familiar with it to be able to follow.
Profile Image for Jakub.
270 reviews
March 7, 2018
Got mixed feeling about this.

On one side it shows few patterns that are worth to know.

On the other side, I have not yet chance to be a part of the project that would required them.

I wanted to give 3 stars as I can't find anything useful in this book (thing that I could use straight away), but then hey! who knows what I will be doing next? :)
Profile Image for Vinayak Hegde.
706 reviews93 followers
March 25, 2018
Though the books title says designing distributed systems, I think a better title would be design patterns for container-based systems. Some of the patterns can be transferred to distributed systems but not all. The book assumes knowledge of containers and kubernetes which is fine, but again the title is misleading. The book bends over backwards a few times (such as in the workqueue pattern or the locking chapter to make thing for containers). Many of the patterns are well-known and common sense if you have worked with dsitributed systems for a while. Also a few sich as multi-worker patterns are extensions of software design principles.

The book is good in patches. I think the second section on "Serving patterns" is the best. The first and third section are passable. The book made me want to look more closely at Kubernetes for managing containers.
Profile Image for Saran Sivashanmugam.
34 reviews5 followers
February 11, 2018
A must-read for designing modern distributed systems based on containers and container orchestration systems. The book has two parts covering single-node designs such as side-car etc. and multi-node patterns. Single-node patterns may be specific to container orchestration systems, but multi-node patterns can be applied to any modern internet-scale systems. I highly recommend this to anyone designing systems based on Kubernetes or working on any modern large-scale distributed systems.
Profile Image for Mario Daskalov.
64 reviews5 followers
October 17, 2018
The book gives a nice overview for some well-known distributed systems patterns in the context of containerization. It sounds interesting on paper but most of the patterns do not have anything container-specific. Message queues, sharding, load balancing, replication - all existed before containers and are quite popular and haven't changed in their core because of containers. For example - in the book there is a showcase of a Kubernets Kafka deployment, but despite being interesting it does not improve the message queue patterns that are described.

The single node patterns section is quite interesting, showing some nice uses for containers that would be harder to maintain without containers.

Overall the book is nice for people having little experience with distributed systems and containers. I wouldn't recommend it to people that have experience in scaling any kind of distributed system.
Profile Image for Sumit Gouthaman.
93 reviews17 followers
November 4, 2018
This book is an excellent read for anyone interested in learning the science of designing distributed systems.

The best features of this book are:
1. It is terse, and does not waste time with cruft unlike other books of this nature. It can be read in the course of 1 or 2 weekends.
2. It takes into account the availability of modern container orchestration systems. It doesn't dwell too much on things that are already handled well by these orchestration systems.

One problem with this book is that it assumes familiarity with Docker, Kubernetes and Go. This book is still a good read without knowledge of these things, but the reader would find it difficult to follow the examples.
299 reviews8 followers
September 13, 2018
Software developers are familiar with the design patterns of low-level code but Burns argues that they can just as easily be applied to larger scale distributed systems and this book attempts to show how.

It’s easy going, sometimes feels “obvious,” (which might be a compliment to its presentation style) and the “hands-on” sections often dive as deep into the weeds as the rest of the book tries to avoid them. (Important points get lost in the abstractions at the high level and obscured by command line parameters lower-down.)

Still, well worth reading.
30 reviews
February 18, 2020
Книга оставила о себе смешанные впечатления. Все начинается с огромного количества воды, но со временем переходит к конкретным приемам с примерами и листингами yml файлов для Kubernetes. Я не думаю что эта книга станет такой же известной как книга банды четырех, тем не менее те паттерны которые приведены в книге описаны понятно, примеры и мотивация действительная близка к реальности и структурировано все здорово.
Это действительно обзорная книга, цель которой создать некоторую базу, некий общий словарь терминов для разработчиков распределенных систем - и с этой задачей книга справляется.
Profile Image for Michał Szajbe.
34 reviews6 followers
September 26, 2021
It is a very quick read, but still includes some useful stuff. Theory provided in the book is often followed by practical examples (implementation with Kubernetes).

There are also some implementations of simple solutions in Go or Python, but I usually find such examples too naive and just skip them.

I have no idea why, but I somehow bought Polish version of this book instead of English. Even though it's my native tongue, reading about technical stuff in non-English is providing me with additional cognitive overload, because of overzealous translation.
5 reviews
April 29, 2019
It should have known before that it will require some Kubernetes know-how to easily follow the book. Nevertheless with some transfer it is possible to adapt the principles in an agnostic way. Brendan created a nice and valuable overview, I also admit the idea to make an attempt to harmonize wording. Therefore everybody you are working with should read it.
Also one positive thing is the hands-on sections, though only for people with Kubernetes.
Profile Image for Sergey Machulskis.
103 reviews9 followers
November 22, 2020
The target audience of the book is very narrow. It's not for people who never designed distributed systems, sometimes content is going to be too hard for them. It's not for people who have more than a year of experience with distributed systems, they won't learn anything new.

The author tries to use patterns appearing in Kubernetes as examples. Hard to say if it's really useful or not, but the title is misleading for sure.
Profile Image for Rohitash Kumar.
11 reviews31 followers
May 1, 2022
Good
1. Cover things on breadth
2. Provides Kubernetes examples. Feel free to skip, if you are not using Kubernetes in production.
3. Good for high level overview.

Bad:
1. Too short.
2. Missing on few things, I was expecting containerization performance, examples of fault-tolerant patterns, deployment paradigms and patterns, testing patterns, data security and control patterns etc.
3. more depth.
Profile Image for Oliver.
119 reviews3 followers
March 17, 2024
Good overview of patterns. Agree with separate reviews that some feels overly biased towards technology choices like containers and Kubernetes. I think that a first principles approach without a particular destination in mind may have included a few additional topics like cross-language coordination (protobuf/api/library), and a bit more on macro architecture (clean separation of concern, limiting complexity).
Profile Image for Sai Akhil.
32 reviews2 followers
September 12, 2019
Very nice read for anybody working with or wanting to learn to build distributed systems. The book covers many patterns for designing scalable and reliable services. It also has examples with the code available in GitHub and uses Kubernetes for depiction. The author uses very well-suited and interesting examples to showcase the power of patterns of Distributed Systems.
37 reviews2 followers
September 22, 2019
Good reading, especially liked the first couple of sections, with their coverage of distributed system patterns. These topics come up in other places, but get pretty concise, clear coverage here.
The batch processing section is interesting but I felt it quite oriented towards big data type problems.
Profile Image for Sampath Duddu.
50 reviews3 followers
July 24, 2020
Read as part of a book club and found it fairly insightful. It is super foundational and relatively high level and I wish there was a little bit more writing about practical applications. There is a lot of example code in it that isn't too useful, and takes up space for the author to go into more depth regarding the concepts he's talking about.
22 reviews2 followers
October 3, 2021
Is not a technical guide neither a general concepts guide. Mixes kubernetes commands with high view diagrams, adding zero value to the reader.

I won't recommend it to anyone. Not if you want to learn concepts of distributed systems neither if you already know them and want to have deeper understanding
Profile Image for David Carpinteiro.
95 reviews
June 14, 2023
Good book on distributed systems architecture. Provides really good examples for common patterns and examples for situations on where they could be used, and with what technologies it could be fullfiled.
My evaluation is a bit low, much because the book could be much more detailed than it is. If it wasn't that, would have considered it as an excellent books
Profile Image for William Anderson.
134 reviews25 followers
May 4, 2018
A contemporary book of modern and cloud considering design patterns, that goes over strategic applications, pitfalls, and implementation strategy. I highly recommend this for anyone getting into devops or leans or is a Solutions Architect in their career.
21 reviews
July 16, 2018
A good survey of the paradigm of distributed systems and the current trends. Distributed systems are moving into clouds and use containers for scalability.

Some parts of the book are deep-dive and contains descriptions of patterns that can be tedious to read if you are not working in the field.
1 review22 followers
July 28, 2018
Just like any pattern that triggers initial thoughts to solve a problem, this book presents a quick overview on distributed systems patterns. However it is very to similar to reading patterns in some of the famous blogs and articles.
Displaying 1 - 30 of 75 reviews

Can't find what you're looking for?

Get help and learn more about the design.