Time : Mon 7:00pm-9:30pm
Class Location: 142 Uris Hall
Instructor:: Hubertus Franke
ED: Use courseworks link
Office Hours: Posted in Staff and Office Hours
Distributed systems help programmers aggregate the resources of many networked computers to construct highly available and scalable services. Most of the applications and services we interact with today are distributed, some at enormous scales.
This class teaches design and implementation techniques that enable the building of fast, scalable, fault-tolerant distributed systems. Topics include distributed communication models (e.g., sockets, remote procedure calls, distributed shared memory), distributed synchronization (clock synchronization, logical clocks, distributed mutex), distributed file systems, replication, consistency models, fault tolerance, distributed transactions, agreement and commitment, Paxos-based consensus, MapReduce infrastructures, scalable distributed databases.
The class combines concepts and algorithms with descriptions of real-world implementations at Google, Facebook, Microsoft, Amazon etc. In addition to lectures, students will get hands-on experience building distributed systems through a series of coding-oriented homeworks. The series, adopted from MIT’s course, implements a fault-tolerant, sharded key/value store.
The grade will be assigned on performance of five homeworks and a final exam. All students MUST take the exam at the designated time that will be assigned by the administration at some time during the semester. The final exam is scheduled for Mon 12/21 at 7:00pm. There are no make-up or alternate exams. If you cannot make the exam, please take the course next semester. Overall we will be grading this class over a reasonable curve.
Additionally, extra credit may be awarded to students with significant and particularly insightful contributions on ED and/or in class throughout the semester.
There is no specific number of these awards, but you should think of awardees as people who have stood out consistently and have improved the class in some significant way.
The first lecture details the grading procedure, and the Deadlines page specifies the deadlines/dates of each homework/quiz.
The homework series will require a lot of coding. Hence, in this class, we require that you have solid coding experience, particularly building systems-level components (e.g., not just apps). This can come either from personal or industry experience, or from the following Columbia courses or equivalents:
Please make sure you can meet the resource requirements listed in the homeworks section.
This class, along with the materials distributed for it, was inspired by Distributed Systems courses at various institutions. The material has been updated since prior versions of this class.