Understanding Distributed Systems

This book is a must-read for all backend and full-stack software engineers. Understanding distributed systems will provide you with the necessary overview and vocabulary to talk to fellow backend engineers and acts as a starting point for more in-depth research.

Topics cover:

  1. Communication, from the basics of TCP connections to common API patterns,
  2. Coordination, how to manage state and consistency in distributed systems (CAP, transactions, isolation levels, consensus, …),
  3. Scalability, how to scale applications (microservices, CQRS, messaging), storage (partitioning) and requests (load balancing and caching),
  4. Resiliency, failure patterns, and mitigation strategies,
  5. Testing and Operations, how to ensure product and operational quality (testing, CI/CD, and monitoring)

I liked the coordination and resiliency chapters best since I found it hard to get a good systematic overview of these areas in the past.

If you want to go deeper on a specific topic, check out Designing Data-Intensive Applications.