Understanding Distributed What every developer should know about large distributed applications, 2nd Edition
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 that brings together the core theoretical and practical concepts of distributed systems so that you don't have to spend hours connecting the dots. This book will guide you through the fundamentals of large-scale distributed systems, with just enough details and external references to dive deeper. This is the guide I wished existed when I first started out, based on my experience building large distributed systems that scale to millions of requests per second and billions of devices.
If you are a developer working on the backend of web or mobile applications (or would like to be!), this book is for you. When building distributed applications, you need to be familiar with the network stack, data consistency models, scalability and reliability patterns, observability best practices, and much more. Although you can build applications without knowing much of that, you will end up spending hours debugging and re-architecting them, learning hard lessons that you could have acquired in a much faster and less painful way.
However, if you have several years of experience designing and building highly available and fault-tolerant applications that scale to millions of users, this book might not be for you. As an expert, you are likely looking for depth rather than breadth, and this book focuses more on the latter since it would be impossible to cover the field otherwise.
The second edition is a complete rewrite of the previous edition. Every page of the first edition has been reviewed and where appropriate reworked, with new topics covered for the first time.
I recently finished reading Understanding Distributed Systems, 2nd Edition, and overall, I found it to be a useful resource, though with some caveats depending on your experience level.
The first part of the book was quite easy to read and mostly served as a refresher on basic computer science concepts that most CS students are already familiar with—things like networking, TCP, secure links, network replication, APIs, and HTTPS. At this point, I was even considering stopping, as I felt the content was too elementary.
However, the second part of the book truly stood out. It dives into more advanced and fascinating topics such as state machine replication, coordination, and how data store replication works. It also covers what happens during failures and introduces important protocols like Raft for leader election. This section explores the fundamentals of data replication and the transactional behavior over replicated data, which I found incredibly insightful.
The third and fourth parts of the book discuss scalability, caching, and messaging systems. While these sections are informative, I felt they didn't go into as much depth as I would have liked, leaving some gaps for readers looking for more detailed explanations.
In conclusion, this book is a solid introduction for beginners to distributed systems. If you have some experience in backend development (around a year or so), you might find the first part basic and can focus on the second part for a deeper dive into the core concepts. The third and fourth parts are valuable but could benefit from more detail. Overall, I'd recommend this book for those just starting out in distributed systems, but those with some experience may find the earlier sections a bit too elementary.
The book is a bit dense, in that it covers a lot of topics in just about 320 pages.
It’s an introduction to many topics, but still better suited to an intermediate/advanced programmer who’s moving to distributed systems from a different field, and wants to scout the field, as many items are referenced in a casual manner that assumes knowledge of networks, operating systems, etc.
In general the book is really great. But from my experience it is great theoretical only side of the thing. It is very hard to apply the ideas from that book directly to the projects. The great thing is that it is structured and gives you a lot of additional materials to study, extend your understanding and apply ideas accordingly to your needs.
Great book, but requires additional study to apply on practice.
I think this book broadly covers a lot of good and interesting topics. It intrigues you to learn more and get deeper into how these systems work. I recommend this book to anyone starting their journey into distributed system land.