I'm excited to share Understanding Distributed Systems: a modern introduction to building distributed large scale applications that brings together theory and real-world practice [1]. It's the guide I wish existed when I first started out.
Although there is plenty of information out there — like academic papers, engineering blogs, and even books on the subject — if you were to put it on a spectrum from theory to practice, you would find that there is a lot of material at the two ends, but not much in the middle. The book tries to fill that space.
The book is divided into 5 parts (communication, coordination, scalability, resiliency, testing, and operations) and 21 chapters. Although it's complete in its current form, I plan to add a lot more content to it in the future (e.g., CRDTs, control planes, and Byzantine consensus). You can download a sample with the first two chapters from the book's landing page [1].
I would appreciate any feedback!