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."
Review the building blocks of consensus algorithms, like Paxos and Raft, for ensuring replica consistency in distributed systems Understand the use of logical timestamps in databases, a fundamental concept for data versioning Explore commonly used partitioning schemes, with an in-depth look at intricacies of two-phase-commit protocol Analyze mechanisms used in implementing cluster coordination tasks, such as group membership, failure detection, and enabling robust cluster coordination Learn techniques for establishing effective network communication between cluster nodes. 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.
It's good if you're fine with the convention. What do I mean by that?
1. First of all, many of these are really low-level (generation clock, clock-bound wait, version vector) and/or highly specialized (not usable outside of specific scenarios): write-ahead log, Paxos, gossip dissemination. 2. The chapters follow a very reasonable structure, BUT for some reason, the author decided that drawings/conceptual sketches are meh and it's better to go for code all the way. I don't mind code as a way to illustrate concepts, but TBH, the samples are sometimes over-verbose and, hence, annoying to follow. 3. I loved the final section of each chapter where you had practical remarks - e.g., where this particular pattern/technique was implemented. In fact, I'd really appreciate some more in-depth consideration here - why such a choice, what were realistic alternatives, how did this work in practice 4. I appreciate the fact that the intro section is very brief - so the precious space is not occupied by yet another lengthy intro to distributed systems fallacies and/or CAP theorem 5. In a bunch of places, I had a feeling that the consideration stops in the most interesting moment: WAL (what is the information from WAL typically processed to and why), majority quorum (deep dive into maths behind various read/write quorum settings), idempotent receiver (let's talk about real "exactly once"), dynamic multi-level partitioning, etc.
In the end - it's a very valuable book that ... unfortunately, is not that applicable to 97% of software engineers. It still doesn't mean one shouldn't read this (it's certainly good to increase the understanding of underlying technologies), but I wouldn't call it a "must-read".
I'm sorry but this reads like something self-published on Leanpub. This is an Addison-Wesley Signature Series book, a prestige brand, and the quality of the writing seems like it was simply never proofread or copy edited. I found it incredibly distracting and unclear, I wasn't even able to make it through the entire book. I expect better from a random post on Medium, let alone something with Martin Fowler's signature on the cover, what has happened to tech publishing?
I have just read a preliminary version on safari books, but it feels disconnected at best. It's good as an index of architecture patterns (not software patterns) but that's it. The code samples are not very usable, and plain pseudocode would help better at conveying the meaning of the pattern.
Đây là một trong những cuốn sách nằm trong series “Patterns…”, hay Signature Series: Martin Fowler của Martin Fowler và các tác giả có “chơi” với Martin Fowler mới được xuất bản gần đây.
Cuốn sách này đề cập đến nhiều nhóm chủ đề khác nhau của một hệ thống phân tán. Những chương đầu của cuốn sách xoay quanh câu chuyện dữ liệu (không chỉ đơn thuần là cơ sở dữ liệu). Những phần sau thì đề cập thêm về quản lý thời gian, quản lý cluster, và cách thức giao tiếp hiệu quả giữa những nodes trong hệ thống.
Kỳ thực, ban đầu tôi cũng kỳ vọng nhiều hơn ở cuốn sách, mới vào đọc thì có vẻ hơi thất vọng chút. Tuy nhiên, đó là do mình đặt sai tâm thế khi đọc nó (có thể vì nó nằm trong signature series nên là đã chuẩn bị một tâm hồn rất đẹp để đọc nó).
Thực tế, cuốn sách đã thể hiện rất tốt những gì mà nó đề cập đến. Lối viết, diễn giải rất căn bản, cặn kẽ, chi tiết và có cả những ví dụ cụ thể (cụ thể đến mức code có thể được viết như thế nào và các ứng dụng/thư viện phổ biến thực hiện cài đặt nó thành tính năng gì), như một cuốn cookbook “hạng sang” vậy.
Bên cạnh đó, cuốn sách cũng đề cập đến rất nhiều những gotchas, và đưa ra nhiều nhận định giúp cho người thiết kế, phát triển hệ thống hiểu rõ hơn được những điểm lợi, và điểm hạn chế của từng giải pháp, công cụ, công nghệ. Từ đó, chúng ta có thể có thêm nguồn thông tin hỗ trợ để ra quyết định và hiểu rõ các mặt/vấn đề của quyết định đó, giảm sự bị động khi triển khai, vận hành thực tế.
Có nhiều người không “quý mến” và ủng hộ quan điểm của Martin Fowler (và các đồng sự) cho lắm, tuy nhiên, đây là cuốn sách thiên nhiều về kỹ thuật, những thứ có thể đo đếm được, đánh giá được, thực hành, đo đạc và chứng nghiệm được trong thực tế thì tôi nghĩ, chúng ta có thể tạm gạt vấn đề quan điểm sang một bên được.
Tổng kết, đây là một cuốn sách nên đọc, bất kể bạn là người mới (rất nên đọc) tiếp cận đến những khái niệm đó, hay là người đã có kinh nghiệm (rà lại kiến thức). Một cuốn sách hệ thống hóa lại tri thức trong mảng hệ thống phân tán quá ổn, dễ đọc, dễ tiếp cận, dễ tra cứu.
- The book could have been much better if it focused more consistently on real-life examples. - The figures are mostly unhelpful and hard to interpret. - The code snippets are overly verbose—Java may not be the best choice if the goal is to simply illustrate the logic. - Some chapters go into excessive detail unnecessarily. For instance, there’s an entire chapter on Paxos, yet it still fails to cover practical use cases. A concise explanation might have worked better. - Many sections are repetitive. It seems the author assumed readers would jump between chapters independently, but this leads to unnecessary repetition. - I wish there had been more discussion of trade-offs in real-world decision-making.
Pros:
- The real-life examples that are included are well-done and insightful. - Presenting patterns is a helpful way to illustrate how distributed systems operate. - The chapter structure—introduction, problem statement, and solution—is easy to follow
I had very high expectations from this Addison-Wesely published book, other source of expectations were from some random linkedin posts mentioning this book. There are a lot of writing inaccuracies in this book which was very disappointing. Code snippets are too verbose often and the diagrams are little confusing.
Coming to the good parts, I loved the idea of structuring this pattern book. The problem, solution and examples are great for explaining complex concepts. Chapters on quorum, commit logs, construct of time in distributed systems are bang on.
Book could have been better and my ratings could have been a 5!
Pattern books are always great, they follow a clean central theme and chapters tend to build upon each other. This is especially true for this book and easier patterns are follwed by more complex ones.
For me the book contained lots of insights and I think I finally got the gist of why you want to use ZooKeeper instead of implementing everything it has to offer by yourself.
I still think some of the patterns are really complex like Paxos, but the example codes make it I'd say more approachable.
If you’re into distributed systems and all those intricate patterns to solve problems that come with them, this book is a must-read.
But don’t expect a leisurely read. It’s packed with technical jargon, sequence diagrams, and code snippets. It’s not something you can read casually while sipping tea. It’s too complex for that.
So, this book is a treasure trove of patterns for tackling issues in distributed systems. But be warned, the information is tough to grasp. If you’re ready to dive deep into the complex world of distributed systems, this book is for you.
Great book to overview Patterns of Distributed systems
Sometimes code examples were too verbose and not helpful but everything else is good
I would not read this as the first book in regards of distributed systems - but is great follow up material to martin kleppmann`s designing data-intensive applications
A very practical book. I was going through the source code of Kafka and this book helped understanding the coding building blocks in there. Not a book to read end to end, but very useful when you are trying to understanding open source code bases.
This book should have never been published as is. Strange sentence construction, grammatical mistakes and simple typos plague this book. I don't think I could recommend this book to anyone due to the aforementioned problems.
I am currently reading the pre release version on Oreilly digital library. This book gives concrete details which are missing from most of the other books on distributed systems.
Overview chapter is worth reading, but the rest of the book doesn’t add a lot of value. They contain a lot of verbose Java code, which just obfuscates things, not simplifies them.
Reading the pre-release version on Oreilly. This book clearly documents building blocks of commonly used distributed systems. Clearly showing concrete code for these building blocks helps in taking out the ambiguity. Not a book to read end to end, but referring to a pattern at a time is very helpful. e.g. to know how hybrid-clocks are implemented and used, or how gossip protocols work.
The book is very hard to follow. Clearly, the author does not have enough experience in structuring his knowledge into a book (nor in an article). It is praiseworthy that the author created a collection of patterns, but the book should not be published in this form. Maybe it could try first to structure his ideas with a site dedicated to these patterns.