This course covers distributed systems, both small and large: understanding, designing, and programming them. The first half of the course covers small and static distributed systems, with the fundamental algorithms they use:
- Formal models and time
- Specifications, events, and failures
- Failure detectors
- Reliable broadcast
- Causal broadcast
- Shared state
- Consensus and its applications
- Group membership
- Byzantine algorithms
The second half of the course covers large and dynamic distributed systems of various kinds:
- Structured and unstructured peer-to-peer networks
- Super-peer architectures and Skype
- Cloud hardware and software
- Self stabilization
- Gossip algorithms
- Content distribution and BitTorrent
- Synchronization-free sharing
We will not have the time to see all the above topics; I will make a selection during the course depending on opportunities and your interest.
The course book for the first half is:
- Introduction to Reliable Distributed Programming, by Rachid Guerraoui and Luis Rodrigues
There is no fixed course book for the second half; I will distribute slides and papers depending on the topics that we will cover.