The main objective of this course is to provide students with a solid foundation for understanding, and specifying distributed services, and designing and analyzing distributed algorithms for reliable and fault-tolerant implementations of these distributed services. The services studied are typical in modern data-centers and cloud computing infrastructures.