Book Review: Designing Data Intensive Applications by Martin Kleppmann
What it is all about
Martin Kleppmann is a professor of University of Cambridge Department of Computer Science and Technology. He is a famous lecturer, book author, and open source projects contributor. His main focus is distributed systems, and the book under review is all about the foundation you need to know to efficiently build distributed systems to be reliable, scalable and maintainable.
Mr. Kleppmann starts with the basics of information systems in Part I: what does it mean to be reliable, or what do we mean by maintainable. He also briefly touches how do computers actually encode and transfer the information. For example, it is important to distinguish encoding, marshalling(serialization) and encryption.
Part 2 describes the problems which appear in distributed systems. For example, how do minimize loses when your single node database goes down? Or what happens if the same node just can't handle the user load? Once you introduce additional nodes for replication and partitioning, you find yourself in a distributed environment and you face the problem of consistency. The book describes different approaches how do you live in such environment.
Part 3 continues the talk but this time regarding the extracting and transforming the information. You can solve the storage problem of user data, but every enterprise wants to analyze it and make data-driven business decisions. So you need to generate derived data from the user data. Generally you can do that in batches or treat your data as a stream. Both approaches introduce new problems. The Part ends with Martin's envision of distributed systems evolution.
What I liked and what not
The book describes a lot of low level details regarding the distributed systems: how do databases actually store data, how to they provide transaction guarantees and why they are necessary in a first place. It also gives you understanding of different options you can go let's say when choosing a type of replication/partitioning and their tradeoffs. It is a crucial knowledge for an architect.
The book is pretty thick; however some parts of it covers particular topics extremely briefly. Like CAP theorem discussion is a couple of paragraphs; however it could be extended to discuss the necessity and applicability of the theorem, it's successors and so on.
Rating
Amazing Book - 5 of 5. I recommend it to anybody who wants to understand the foundation of distributed systems.
If you liked the article, make sure to Subscribe for the Architecture Weekly newsletter.