A Distributed Systems Reading List by Fred Hebert

ferd.ca

Distributed systems are everywhere now, if you are working on a web application now, chances are it is distributed or someone will ask you to make it distributed at some point. Probably most systems should not be distributed, as it adds an incredible amount of complexity, but the promises of fault tolerance and scalability are hard to ignore, we are only human after all, and we have a hard time not imagining the grass is greener elsewhere. Also, sometimes systems actually need to be distributed to meet some constraints.

But distributed systems are hard and often counterintuitive. So I’m currently trying to learn more about distributed systems theory so that I don’t shoot myself in the foot when I try to design and build them. This reading list is a good place to start, as it references a lot of foundational papers. But more than the references, what I really like about this page are the definitions. On this page, the author defines most of the vocabulary commonly used to talk about distributed systems. These definitions are concise, understandable, and often accompanied by insights into what a concept actually means for real-world applications. I highly recommend reading the whole page before you start reading papers, it will give you the basics.