Remember to check this regularly!
LOCATION AND TIME
Lectures: Tuesdays and Thursdays 9:00-10:20PM
Zoom (find the room in Canvas)
Professor Office Hours: By appointment
TA Office Hours: Wednesdays 6:00-7:00PM | Friday 2:00-3:00PM
Zoom (find the room in Canvas)
TA/Resitation Sessions: Mondays 5:00-6:00PM
Zoom (find the room in Canvas)
Take-home Final: Due Thu. June 10, 2021 at 8PM CST
Basic principles behind distributed systems (collections of independent components that appear to users as a single coherent system) and main paradigms used to organize them.
In compliance with Section 504 of the 1973 Rehabilitation Act and the Americans with
Disabilities Act, Northwestern University is committed to providing equal access to all
programming. Students with disabilities seeking accommodations are encouraged to contact the office of Services for Students with Disabilities (SSD) at +1 847 467-5530 or firstname.lastname@example.org. SSD is located in the basement of Scott Hall. Additionally, I am available to discuss disability-related needs during office hours or by appointment.
Distributed systems are collections of networked computers that coordinate their actions through message exchanges. Most computing systems you interact with everyday are indeed distributed (e.g. email, the Web, Google, Skype, Facebook …) for a variety of reasons such as fault tolerance, performance, and the geographical nature of the requirements.
In this course, we will discuss some of the basic principles behind distributed systems as well as common approaches and techniques used to build them. We illustrate these ideas through case studies of widely used or seminal systems.
SOME OF THE TOPICS COVERED
- Networking and Communication
- Physical and Logical Clocks
- Coordination in Distributed Systems
- Distributed storage and file systems
- Name services
- Global state and transactions
- Replication and consistency
- Fault tolerance
- Security and privacy
There are a number of communication channels set up for this class:
- We will use the course web site to post announcements related to the course. You should check this regularly for schedule changes, clarifications and corrections to assignments, and other course-related announcements.
- We will use Campuswire for class discussion. TAs and I will check Campuswire frequently and answer unresolved questions, but you’re also encouraged to collaborate with each other and answer each other’s questions.
- There is always email for questions that would be inappropriate to post on the newsgroup/discussion-board. When using email to contact the staff please start your subject line with “eecs345: helpful-comment” to ensure a prompt response.
The course is organized as a series of lecture and paper discussions, four projects, homework assignments and a take-home final.
- Lectures and discussions – A set of lectures on the core of the material.
- Readings – Textbook and paper reading in preparation for (not substitution of) the lecture.
- Homework assignments – A set of assignments meant as reader enforcers.
- Projects – Four programming projects to give you a better understanding of the subject matter and experience with the Go programming language.
- A take-home final.
I use a criterion-referenced method to assign your grade; in other words, your grade will be based on how well you do relative to predetermined performance levels, instead of in comparison with the rest of the class. Thus, if a test has 100 possible points, anyone with a score of 90 or greater will get an A (90-92: A-), those with scores of 80 or greater will get a B (80-82: B-), those with scores of 70 or greater will get a C, and so on. Notice that this means that if everyone works hard and gets >93, everyone gets an A.
Total scores (between 0 and 100) will be determined, roughly, as follows:
- Homework assignments 20%
- Class participation 15%
- Projects 45%
- Take-home final 20%
Unless otherwise indicated, homework assignments and projects are due by midnight on their due date. If you hand in an assignment late, we will take off 10% for each day (or portion thereof) it is late. Assignments that are three or more days late receive no credit.
Cheating vs. Collaboration:
Collaboration is a really good thing and we encourage it. On the other hand, cheating is considered a very serious offense. When in doubt, remember that it’s OK to meet with colleagues, study for exams together, and discuss assignments with them. However, what you turn in must be your own (or for group projects, your group’s own) work. Copying code, solution sets, etc. from other people or any other sources is strictly prohibited.
For projects, we do code walkthrough by randomly selected groups with the staff. The idea is simple if we pick your group you and your teammates will meet with the TA and/or instructor and walk them through your code, answering any questions they may have.
To get full credit you must be able to carry the walkthrough, showing you understand your code.
Note that our random sampling is with replacement, i.e., you may do it multiple times.
The following is our intended calendar with topics, slides (as they become available) and reference material. Note “MSAT3 #” refers to chapters/sections of (M. van Steen and A. Tanenbaum Distributed Systems 3rd Ed., 2017); “CDKB5 #” refers to chapters/sections of (Coulouris et al. Distributed Systems: Concepts and Design, 5th Ed., 2012). Papers, except when tagged as [ref], may be part of homework assignment/finals questions. All papers are available in Canvas (“Reading” folder in the “Files” section); links in the Calendar point to those files.
|4/8||Communication and Organization
|3||4/13||Physical and Logical Clocks
|4||4/20||Coordination – Mutual Exclusion and Elections
|4/22||Failure and Failure Detection
|4/29||Overlay Networks | Scaling Out Key-Value Stores
|6||5/4||Consistency and Replication
|5/6||Consensus Problem and The Impossibility of Consensus
|5/13||Byzantine Fault Tolerance
|8||5/18||Distributed File Systems
|5/20||Content distribution networks
|10||6/1||Distributed Machine Learning
|*||6/8||Take-home final (Due June 10th, 11:59PM CST).|
There are four team-based projects, some basic homework assignments, mostly meant as reading enforcers, and a take-home final.
We will post all assignments in the Canvas’ site for the course.
There will be four projects, including a MapReduce library and a replicated state machine protocol. Projects are to be done in teams of 2-3 students (1 is not allowed).
All projects will be done in Go, a language that was originally created within Google, but is now a fully open-source project. Go is garbage-collected and has built-in coroutines (called goroutines) and channels, making it highly suited to building distributed systems. Its standard library is already pretty comprehensive. For example, take a look at the net and rpc packages.
CALENDAR OF ASSIGNMENTS
(Textbook are for reference only)
- A set of research papers (see the calendar tab).
- S. Keshav, How to Read a Paper, ACM SIGCOMM CCR, 37(3), 2007 (A very useful reference)
- George Coulouris, Jean Dollimore, Tim Kindberg and Gordon Bair, Distributed Systems: Concepts and Design.Pearson, 5th Ed., 2012 (“CDKB5”).
- Maarten van Steen and Andrew S. Tanenbaum, Distributed Systems, 3rd Ed, 2017 (“MSAT3”) (free)