Announcements
Remember to check this regularly!
- Last homework assignment is posted!
- Homework 3 is posted!
- Project 2 deadline extended to Monday (5/18)
- Project 0 and Project 1 grades are posted!
- Project 2 is posted!
- Project 1 is posted!
- Project 0 is posted!
- Take the tour – http://tour.golang.org
Administrative Information
Professor
Fabián E. BustamanteTechnological Institute, L477
+1 847 491-2745
This email address is being protected from spambots. You need JavaScript enabled to view it.
TAs
Zach BischofFord Design Building, 2-217
+1 847 467-3250
This email address is being protected from spambots. You need JavaScript enabled to view it.
Location and Time
Lectures: Mondays and Wednesdays 11:00-12:20PM
Tech. L150
Professor Office Hours: by appointment
TA Office Hours: Tuesdays 4-6 in Ford 2-217 or adjacent longue
Final Exam: Wednesday June 8th, 7-9PM (in the classroom)
Course Description
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, 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.
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 This email address is being protected from spambots. You need JavaScript enabled to view it. . SSD is located in the basement of Scott Hall. Additionally, I am available to discuss disability-related needs during office hours or by appointment.
Course Prerequisites
- EECS-343 Operating Systems (or equivalent)
- EECS-340 Introduction to Networking.
- (Please contact me if you do not meet some of these requirements.)
Communication Channels
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 Piazza for class discussion. The system is highly catered to getting you help fast and efficiently from classmates, the TA, and myself. Rather than emailing questions to the teaching staff, I encourage you to post your questions on our Piazza for DS
- 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.
Course Organization
The course is organized as a series of lecture and paper discussions, four projects and a take home exam.
- Lectures - A set of lectures on the core of the material. At the end of some key topics we will have one student lead presentation of a closely related, somewhat recent research.
- 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-homefinal exam.
Grading
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, those with scores of 80 or greater will get a 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 >90, everyone gets an A.
Total scores (between 0 and 100) will be determined, roughly, as follows:
- Homework assignments 20%
- Class participation/presentation 15%
- Projects 40%
- Exam 25%
Policies
Late policy:
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.
Topics
- Introduction
- Networking and Internetworking
- Remote invocation and indirect communication
- Overlay networks and P2P
- Distributed file systems
- Name services
- Time and global state
- Coordination and agreement
- Consistency and replication
- Mobile distributed systems
For each of the topics, we will first review introductory material before presenting and discussing a related research paper to help you better understand the main issues.
The following is our intended calendar with topics, slides (as they become available) and reference material. Note "CDKB5 #" refers to chapters of the class' textbook (Coulouris et al., Distributed Systems: Concepts and Design, 2012).
Week | Date | Topic |
1 | 3/30 |
Introduction [pdf]
References:
|
4/1 |
Go, Go [pdf] [tutorial.tgz]
References: |
|
2 | 4/6 |
Networking and Internetworking I [pdf]
References:
|
4/8 |
Networking and Internetworking II [pdf]
References:
|
|
3 | 4/13 |
Communication I [pdf]
References:
|
4/15 |
Communication II [pdf]
References:
|
|
4 | 4/20 |
Overlay Networks [pdf]
References:
|
4/22 |
Distributed File Systems [pdf]
References:
|
|
5 | 4/27 |
Distributed File Systems [pdf]
References:
|
4/29 |
Name Services [pdf]
References:
|
|
6 | 5/4 | Off |
5/6 |
Content distribution networks [pdf]
References:
|
|
7 | 5/11 |
Time and Synchronization [pdf]
References:
|
5/13 |
Global State [pdf]
References:
|
|
8 | 5/18 |
Coordination I [pdf]
References:
|
5/20 |
Coordination II [pdf]
References:
|
|
9 | 5/25 | Memorial Day |
5/27 |
Consensus [pdf]
References:
|
|
10 | 6/1 |
Replication and Fault Tolerance [pdf]
References:
|
6/3 |
Mobile and Ubiquitous [pdf]
References:
|
|
* | 6/8 | Final |
Assignments
There are some basic homework assignments, mostly meant as reading eforcers, and warmup project and three team projects that build on each other.
In addition, groups of 4-5 students (assigned by the instructors) will work to do a presentation and prepare educational material around on one of the 7-8 papers assigned by the instructors. The material, to be shared with the rest of the class, will include a summary, presentation slides, and a homework assignment and/or demo.
Take a look at the homework assignments.
Projects
The firt project for this course is a short, one-week long project meant to serve as a gentle introduction to Go and a quick way to check if you are ready to take on the rest. The following three projects are to be done in teams of 2-3 students (3 is the preferred number, 1 is not allowed), to implement a basic DHT (Distributed Hash Table) and build upon it in some interesting way.
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 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.
Take a look at the project descriptions.
Reading Papers
We will be reading two or more paper per week; you should have read the assigned paper before coming to lecture.
When reading papers it is useful to write down a summary of about a page. Your summary should include at least:
- Paper title and its author(s).
- Brief one-line summary.
- A paragraph of the most important ideas: perhaps a combination of their motivations, observations, interesting parts of the design, or clever parts of their implementation.
- A paragraph of the largest flaws; maybe an experiment was poorly designed or the main idea had a narrow scope or applicability. Being able to assess weaknesses as well as strengths is an important skill for this course and beyond.
- A last paragraph where you state the relevance of the ideas today, potential future research suggested by the article, etc.
You may find the following documents useful:
- How to Read a Paper by S. Keshav, ACM SIGCOMM CCR, 37(3), 2007.
- Efficient reading of papers in Science and Technology by Michael J. Hanson, 1990, revised 2000 Dylan McNamee.
Materials
Required
- George Coulouris, Jean Dollimore, Tim Kindberg and Gordon Bair, Distributed Systems: Concepts and Design.Pearson, 5th Ed., 2012 ("CDKB5").
- A set of research papers I will make available (see the schedule page for a full list).
Very Useful
- S. Keshav, How to Read a Paper, ACM SIGCOMM CCR, 37(3), 2007.
- Michael J. Hanson, Efficient reading of papers in Science and Technology, 1990 (revised 2000 Dylan McNamee).
- Roy Levin and David D. Redell, An evaluation of the ninth SOSP submissions -or- How (and how not) to write a good systems paper, ACM SIGOPS Operating Systems Review 17(3):35-40 (Jul., 1983)
- George D. Gopen and Judith A. Swan,The Science of Scientific Writing,American Scientist (Nov-Dec 1990), 78: 550-558.