A Distributed Systems Reading List

Introduction

I often argue that the toughest thing about distributed systems is changing the way you think. The below is a collection of material I've found useful for motivating these changes.

Thought Provokers

Ramblings that make you think about the way you design. Not everything can be solved with big servers, databases and transactions.

Latency

Amazon

Somewhat about the technology but more interesting is the culture and organization they've created to work with it.

Google

Current "rocket science" in distributed systems.

Consistency Models

Key to building systems that suit their environments is finding the right tradeoff between consistency and availability.

Theory

Papers that describe various important elements of distributed systems design.

Languages and Tools

Issues of distributed systems construction with specific technologies.

Programming Distributed Erlang Applications: Pitfalls and Recipes - Building reliable distributed applications isn't as simple as merely choosing Erlang and OTP.

Infrastructure

Principles of Robust Timing over the Internet - Managing clocks is essential for even basics such as debugging

Storage

Paxos Consensus

Understanding this algorithm is the challenge. I would suggest reading "Paxos Made Simple" before the other papers and again afterward.

Other Consensus Papers

Gossip Protocols (Epidemic Behaviours)

P2P