Are you tired of being a wallflower at parties while a scintillating conversation about sharding is going on about you? Do you feel confused when someone mentions protocol buffers? Do your eyes glaze over when your friends talk about analyzing large-scale data with Spark Streaming or running a MapReduce job? Have you ever wondered how Amazon’s pages remain accessible even when servers die spontaneously? If so, then this course is for you!
As its name - 01:198:417 - implies, this course is about distributed systems. We will cover a broad spectrum of topics encompassing system architecture, software abstractions, distributed algorithms, and issues pertaining to distributed environments such as security. Topics will range from the theoretical to the practical with a strong emphasis on the practical. If you are looking for a course that will teach you how to write applications with ASP or Node.js, you will be disappointed.
I don’t expect you to find all the material interesting but my hope is that each student will find some subset interesting and/or useful. If you feel that there is a pertinent area that you would like to see covered, please let me know.
I taught this course since its inception at Rutgers in the fall semester of 1997. The current version of the syllabus can be found here. The course content been evolving, sometimes radically, with every semester that I taught it and it will most likely change somewhat this semester as well since I am constantly trying to structure the course to include relevant topics and maximize clarity. I will update the web pages as the course progresses.
Course information can be found on my main course web page: http://www.cs.rutgers.edu/pxk/417. The links on the left of that page will take you to discussions of prerequisites, homework assignments, exam info, and course policy. Be sure to check out the policy and prerequisites at the start of the course to avoid problems. The link at the bottom of this page will take you to a news page. This page will contain a running list of announcements such as homework assignments, exam announcements, corrections, and random comments. I will post the same announcements on Canvas as well.
There is no required textbook for the course. I will make lecture notes (and other material) available in the Documents link. These lecture notes have been evolving each semester, and will continue to evolve. Please let me know of any errors, omissions, or unclear descriptions.
While the lecture notes attempt to cover most material that will be presented, I cannot guarantee that they will cover all of the material. The course is not a correspondence course. You are responsible for attending class and for all the material presented in class.
exams and assignments
In order for me to be able to give you a grade in this course, you will have a number of homework assignments, programming projects, exams, and quizzes. My goal is not to torture you but to give you an opportunity to play with some of the material presented and for me to get enough material from you so that I can give you a fair grade without your performance being determined by a single exam.
I expect that you have reasonable proficiency in programming in Java and, perhaps, Python. You cannot pass the course without completing the programming assignments. There will be an exam given roughly every third lecture for half a lecture along with a final exam. All exams will be weighted equally and the lowest grade will be dropped. My hope is that enough of you will do well in the course that you will not have to take the final exam. Largely to reward attendance and to ensure that you’re not completely asleep (since it is a late class), I will gived a few quizzes throughout the semester. These will be intended to be easy and you will be able to complete them during the lecture using information obtained from the lecture.