What's the best way that anyone can do to have a good introduction to the theory of distributed system, any books or references, and topics should be covered first and requirements to start learning in this topic.
Roger Wattenhofer's Principles of Distributed Computing lecture collection is also a good place to start.
It is freely available online, it assumes no prior knowledge on the area, and the material is very well up-to-date — it even covers some results that were presented at conferences a couple of months ago.
Both of the books mentioned in the other posts are good, however I like:
- Design and Analysis of Distributed Algorithms, Nicola Santoro.
- Introduction to Distributed Algorithms, Gerard Tel.
Lynch and Wattenhofer, two big names in Distributed systems theory, focus "a lot" on synchronous systems. On the other hand, Santoro and Tel focuses more on asynchronous systems (without forgetting synchronous systems). Their opinion is that synchronicity of a distributed system is an "additional assumption" ! (that is, by nature, a distributed system is asynchronous). Given this, you will find more focus on message complexity, while on the other books the focus is given to time complexity. It is a different school in distributed computing in my opinion.
N. Santoro book was the book I used for studying (N. Santoro is my teacher actually). Following the book, you would master the main fundamental ideas of distributed computing. It is based on course notes, and research the author was involved in. This is why it is not the most complete book. But it s very well written !
For G. Tel book, there is an interesting level of formalism. I like that he includes a chapter for self-stabilizing distributed algorithms. I think it contains more topics than N. Santoro book.
Another book widely available is Distributed Computing (Attiya and Welch - two well known scholars with great impact on the field). I used it as a reference for few times, but i cant give a judgment.
A good start would by Distributed Systems by Nancy Lynch. It is perhaps a little dated, but nothing is wrong with the book as such. An impossibility result does not change with time.
All of the mentioned books are awesome, but I recommend you the James Aspnes Notes on Theory of Distributed Systems. It is a very good and up-to-date book that explores theory aspects of distributed systems. It is also free!
I used this notes when I was TA and students were very happy about it. It has many questions with their solutions.
A Course on Deterministic Distributed Algorithms by Jukka Suomela.
- distributed systems as a model of computation.
- distributed algorithms in the port-numbering model.
- optimisation problems about vertex covers and edge dominating sets.
- networks with unique identifiers.
- ramsey theory and application of the theory.
I would add Introduction to Reliable and Secure Distributed Programming by Christian Cachin, Rachid Guerraoui and Luís Rodrigues (amazon link).
This book is great as it builds from the fundamentals on the theory of distributed programming, with a large coverage on relevant topics like consensus and Byzantine agreement.
The book Distributed Systems: Concepts and Design by George Coulouris, Jean Dollimore, Tim Kindberg and Gordon Blair.