This course covers the principles and techniques behind the design of modern, reliable, and high-performance distributed systems. Topics include server design, network programming, concurrency and locking, consistency models and techniques, and fault tolerance. Modern techniques and systems employed at some of the largest Internet sites (e.g., Google, Facebook, Amazon) will also be covered. Through programming assignments, students will gain practical experience designing, implementing, and debugging real distributed systems.
Students are required to have previously taken CS 367 (Computer Systems & Programming).
This is a programming-intensive course. You need to be comfortable with programming in one of the following languages including C, Python, Java. Knowing a language serves as a soft prerequisite and would get you prepared to learn a new language (if you haven’t already) and do the programming assignments in this course.
This semester you will be learning a new language Go as all assignments will be in Go.
It is also not a good idea to take this class if your course/work schedule is already quite full.
There are no official textbooks. Required readings are (most frequently) in the form of research papers and/or selected textbook chapters. There are several books that might be useful, however:
Upon completion of this course, the students should be able to:
Students must work individually on all programming assignments. We encourage you to have high-level discussions with other students in the class about the assignments.
However, we require that when you turn in an assignment, it is only your work. That is, copying any part of another student’s assignment is strictly prohibited. Anything that you hand in, whether it is a written problem or a computer program, must be written in your own words. If you base your solution on any other written solution, you are cheating.
Never look at another student’s code or share your code with any other student.
You must not make your code public (on GitHub/GitLab or by any other means).
You will learn how to use Go as we go. Details concerning the programming assignments (labs) will be presented in class. All students should have accounts on the VSE Unix cluster (aka zeus.vse.gmu.edu). Instructions and related links can be found here.
10% will be deducted for late assignments each day after the due date. That is, if an assignment is late, we’ll grade it and scale the score by 0.9 if it is up to one day late, by 0.8 if it is up to two days late, and by 0.7 if it is up to three days late.
Late assignments will only be accepted for 3 days after the due date. Assignments submitted more than 3 days late will receive a zero. If you’re worried about being busy around the time of a HW submission, please plan ahead and get started early.
Assignment that does not compile or run will receive at most 50% credit.
Your grade will be calcuated as follows:
The final grade is computed according to the following rules:
All students must adhere to the GMU Honor Code and the Computer Science Department's Honor Code Policies. The students are supposed to work individually on the homeworks, assignments projects, unless told otherwise. We reserve the right to use MOSS to detect plagiarism. Violation of the Honor Code will result in an F.
If you have a documented learning disability or other condition that may affect academic performance, you should: