Learning to build distributed systems is hard, especially if they are large scale. It's not that there is a lack of information out there. You can find academic papers, engineering blogs, and even books on the subject. The problem is that the available information is spread out all over the place, and if you were to put it on a spectrum from theory to practice, you would find a lot of material at the two ends, but not much in the middle.
That is why I decided to write a book to teach the fundamentals of distributed systems so that you don’t have to spend countless hours scratching your head to understand how everything fits together. This is the guide I wished existed when I first started out, and it's based on my experience building large distributed systems that scale to millions of requests per second and billions of devices.
If you develop the back-end of web or mobile applications (or would like to!), this book is for you. When building distributed systems, you need to be familiar with the network stack, data consistency models, scalability and reliability patterns, and much more. Although you can build applications without knowing any of that, you will end up spending hours debugging and re-designing their architecture, learning lessons that you could have acquired in a much faster and less painful way.
Good Overview. The cover is exactly what's in the book. It's not deep, but that is the amount any web engineer should know about. I would suggest reading it to all junior to mid level professionals. Minus one star for the paper adaptation. Some colors became black and white, dangling curly braces here and there, the text stating the device I'm reading on has a battery (paper book).
I wish I had this years ago, book covers partitioning (hash and range), sharding, functional decomposition, down-steam resiliency (rate limiting, load shedding), SPOF's design, load balancing based on CAP + CALM, consistency/replication, distributed locks, time (vector clocks, Lamport timestamps), on-call (SLA, error budgets, burn rate), observability and other good stuff.
This book goes through a broad overview of a gamut of topics in Distributed Systems ranging from theoretical ones like logical clocks to more practical ones like SLAs, SLOs and SLIs.
This is a less dense read than DDIA. I went through this in a about 2-3 days. What I really liked were the innumerable references that the author provided which any reader can go deep into for further understanding. This is a different type of book than DDIA, much more approachable for beginners.
It is a great supplement to DDIA. In fact, I recommend reading this first so that DDIA becomes slightly easier. This is also suitable for preparing for System Design interviews although it is not geared towards readers looking for that type of material.
To conclude, highly recommend reading this book if you build real world computer systems. Supplement it by reading the references the author has provided and further your understanding of distributed systems.
P.S. This is one of those books that will stay on my shelf forever and I am going to come back to it time and again.
I enjoyed this quite a bit. A lot of overlap with Designing Data-Intensive Applications in the first half, though without the exhaustingly in-depth coverage that isn't always relevant. The other half focuses on non-data specific details that were wonderful (though the foray into into TLA+ and PlusCalc left me a bit puzzled as a choice to include.) Overall, though, it's educational, easy to understand and pretty short.
I would definitely reach for this book as something to hand a Jr. dev that joins my team and needs to learn some concepts for working in a distributed world that they don't always focus on in school. Someone who knows how to code and the basics of a database, but doesn't know the work and considerations of making it maintainable and scalable.
This book was my introduction to Distributed systems and the author has done an amazing job. The author covers the distributed system paradigm by starting with the communication, continuing with co-ordination, scalability, resilience and then ending up with testing. The material is top-notch and personally, I found the foot-notes provided to be very helpful. However, the material(esp. towards later chapters) is pretty intense, and if you are just looking for an introductory level book(like I was), then maybe this is best suited as a followup to the introductory material and not the introduction itself. Also, perhaps, it would have helped if the book had one of the earlier chapters introducing common patterns/jargons in distributed systems(eg - quorum, consensus, consistent hashing etc), however, this more reflects towards the expertise of the reader and less towards the author/book itself. All the above mentioned topics are still present in the book, however, they appear within their own context. To sum it up - A must read, and even better if you already have had some basic introduction to the distributed systems.
Такой книги мне не хватало на все протяжении карьеры разработчика. В ней емко рассмотрены принципы пост��оения web-приложений. При этом затронуты абсолютно все аспекты жизненного пути ПО. В каждой главе десяток ссылок, которые позволяют погрузиться в интересующую тему. --- I've been missing a book like this throughout my career as a developer. It succinctly discusses the principles of building web applications. It touches absolutely all aspects of software life cycle. Each chapter contains dozens of links which allow you to dive into the topic of interest.
Except for a few nuggets, this is a pretty mediocre book:
* not every distributed system is a web service, but the book pretty much assumes that; * mentions a few specific algorithms and ideas, but is definitely not exhaustive; * has a very wide selection of advice on all kinds of matters, and none of them has any depth.
All in all, useless for anyone who has done any other reading in the field, and really not a good starter for for someone who has not.
I have mixed feelings about this book. On one hand it is an amazing collection of basic knowledge that are really important for developers working in and with distributed systems, it doesn't go into how each of the topics is intertwined with the other topics and how to get them together to build scalable, resilient, distributed systems.
For me, this is the first book on the subject of distributed systems. I think the presentation of the material is close to perfect. The system level chosen in the book simply and clearly explains the basic logic of components functioning as a "black box", and at the same time, through many references and recommendations, shows the way to look "under the hood" in one click.
I recently finished reading "Understanding Distributed Systems" and I must say, it was a thoroughly engaging and informative experience. The book presents the topic of distributed systems in a clear and concise manner, making it easy to follow even for those with little prior knowledge.
The most challenging part for me was the section on coordination and consistency in distributed systems, but the author does an excellent job of breaking down these complex concepts and explaining them in a way that is easy to understand.
I am planning on revisiting the section on coordination after reading the "Red Book" to gain a deeper understanding of these topics. Overall, I would highly recommend this book to anyone interested in learning about distributed systems.
As someone who is new to distributed systems, this book was the perfect introduction that filled in all the gaps of my understanding and led me to "Designing Data Intensive Applications". Highly recommend to anyone getting into distributed systems.
Whoever wants to learn about the distributed system first clear some basic concepts. Recently I have started to work with distributed systems and I was overwhelmed that there is a lot to cover but have not found any single source which could give an index to refer to these concepts. In my opinion, this is the book where you should start
This book is trying to cover too much - from the whole content of "DDIA" to microservices/DevOps. So, in result, all topics are covered very cursory. There are some interesting parts, specifically about scaling and resiliency.
An excellent book that gives a quick overview of the landscape of large distributed systems design. It doesn't go into too much depth but rather gives you a good starting point to dig deeper while still giving a solid foundation. There is some overlap with "Designing Data-Intensive Applications" but it feels like this books is way more focused and follows the 80/20 rule. I still recommend reading DDIA but this book might give you a quick refresher or serve as a solid alternative if you are preparing for a System Design interview and don't have a lot of time on your hands.
Honestly this was the first book I’ve seen that took an approachable overview of distributed systems & made it interesting. Some of the concepts were a bit hard to grasp, but I’m sure that re-reading a few chapters will do me good. Overall I learned a LOT from this book and I think it’s one that I will go back to many times for reference.
As a data scientist with a background in Physics, the word distributed systems sounded odd to me. But I knew that it could help me understand how AWS services I use in my day-to-day work under the hood. So I decided to read the book even without a comp-sci background, and I don't regret it. The book walks you through different major steps needed to build distributed systems from first principles in a simple and understandable way. Lots of pictures and references are provided to explain the topic, which I found really valuable. After reading the book, I have a much better understanding of how large scale databases are implemented and what their tradeoffs are.
Aimed to provide an overview of various facets of building distributed systems, but a great high level overview for experts that can be used as quick reference.
Covers communication, coordination, scalability, resiliency, and maintainability. Uncluttered by implementation details, just a list of various ways to solve challenges with distributed systems, with a footnote here and there with a link to a research paper, or wiki page for more details.
I really like the book , I am both new to read books , and to the subject. It does what the title says Understanding , this book aim is not to make me a pro , it's to make me make the first step. I really enjoy reading the book!
This book is just trying to do too much. It's trying to balance between the tech heavy concepts from DDIA and also trying to explain concepts in a palatable way. But this is the biggest drawback of the book. For example System Design Interview by Alex Xu is a fantastic book which covers the system design aspects and also explains the fundamentals of distributed systems. And it links to various resources or white-papers if someone is interested in delving deeper into a specific topic. That being said, understanding distributed system is just a hodgepodge of concepts some explained in too much depth and covering some other concepts barely on the surface. I clearly don't think this is a good book for Understanding distributed systems but that's just my humble opinion.
This really is an excellent introduction to distributed systems. All the concepts are explained very clearly and the structure of the book is logical and helpful in grasping the material. I also love that the author gives specific recommendations for further reading at the end and that his advice is very practical. Would wholeheartedly recommended to anyone learning the topics for the first time. The one gripe I have with this book is that there are a LOT of references that aren’t very professional i.e. the author uses Wikipedia/blogs. Not the end of the world (as Wikipedia has some solid technical content) but for a book that costs as much as books from academic publishers, I found this a bit surprising.