“Distributed Software Engineering”

Spring 2017: Wednesdays, 4:30-7:10pm, 134 Innovation Hall

Instructor: Prof. Jonathan Bell
Email: [email protected]
Twitter: @_jon_bell_
Office: 4422 Engineering Building; (703) 993-6089
Office Hours: Anytime electronically, Weds 3:30-4:30pm, or by appointment

Prerequisites: SWE Foundation courses or equivalent. In particular, students must have strong Java programming skills.


Please post on Piazza for course-related inquiries.


This course conveys key concepts for designing and building distributed software systems. The course is geared towards software engineers that work mostly at the application-level, but need to understand the features and limitations of existing middleware for distributed systems. Additionally, the course covers some research topics related to currently open problems. There will be a special emphasis on understanding the tradeoffs between consistency, availability and partition tolerance (the CAP theorem), and how to decide what tradeoffs to make for specific applications. Some specific topics include: definition and scope of distribution, principles of communication and computation, software architecture of distributed systems, middleware systems, service discovery, mobility, security, and fault tolerance.


During the course of the semester, students will use Java and a variety of off-the-shelf tools and libraries to construct a distributed filesystem. By the end of the semester, each student will have built a fault-tolerant and performant in-memory distributed filesystem, with the entire filesystem replicated in the cloud – in Dropbox. Students will get hands-on exposure with distributed systems programming, and with specific technologies such as Redis and Zookeeper. This project is broken up into 6 assignments, and students will have 2 weeks to complete each assignment.

Students must work individually on all homework 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. You are free to reuse small snippets of example code found on the Internet (e.g. via StackOverflow) provided that it is attributed. If you are concerned that by reusing and attributing that copied code it may appear that you didn’t complete the assignment yourself, then please raise a discussion with the instructor.


Distributed Systems: Principles and Paradigms (2nd edition), Andrew S. Tanenbaum, Maarten Van Steen, 2007, ISBN 0-13-239227-5

Note, as GMU students, you have free access to Safari Books Online. 

From off campus, you must login using this link to browse for free. Once logged in, you have access to thousands of technical books, including, for instance, O’Reilly’s “ZooKeeper” by Reed & Junqueira.

In Class Activities:

Most lectures will feature interactive activities that support the material being presented. You are strongly encouraged to bring your laptop to class so that you can participate. Your 10% participation grade is based on attendance and participation in in-class activities.

Syllabus and Tentative Schedule

Lecture titles will link to slides.

  1. 1/25: Class overview; Introduction to Distributed Systems and key challenges in the field [Keynote] Reading: “Distributed Systems at a High Level” (Distributed Systems for Fun and Profit)
    Homework 1 assigned: Memory-cached Dropbox filesystem (due 2/8)
  2. 2/1: Systems fundamentals; synchronization and consistency problems on a single machine [Keynote] Lab 1 posted, completed in class
    Reading: Tanenbaum 3.1
  3. 2/8: Abstractions in distributed systems and their limitations [Keynote]
    Lab 2 posted, completed in class
    Reading: “Time and Order” (Distributed Systems for Fun and Profit)
    Reading: Tanenbaum 4.1, 4.2
    Homework 2 assigned: Lock server (due 2/22)
  4. 2/15: Consistency: Strict [Keynote]
    Lab 3 posted, completed in class
    Reading: Tanenbaum 7.1, 7.2
  5. 2/22: Consistency: Relaxed [Keynote]
    Lab 4 posted, completed in class
    Reading: “Replication: Weak Consistency Models” (Distributed Systems for Fun and Profit)
    Reading: Tanenbaum 7.3
    Homework 3 assigned: Distributed in-memory caching with Redis; heartbeats (due 3/22)
  6. 3/1: Transactions [Keynote, Board notes]
    Lab 5 posted, completed in class
    Reading: Tanenbaum 8.1-8.5
  7. 3/8: Canceled
  8. 3/22: Midterm Exam
  9. 3/29: Agreement & Consensus [ZIP’ed Keynote] Lab 6 posted, completed in class
    Reading: “Replication (Distributed Systems for Fun and Profit)
    Homework 4 assigned: Replicated lock server with Zookeeper (due 4/12)
  10. 4/5: Fault Tolerance & Replication [Keynote] Lab 7 posted, completed in class
    Optional readings: GFS, Spanner, MagicPocket blog post, podcast
  11. 4/12: Distributed Computation Models [Keynote] Lab 8 posted, completed in class
    Homework 5 assigned:  Handling failover with multiple Redis instances (due 4/28, note 2 day extension)
  12. 4/19: P2P and Masterless Systems [Keynote] Lab 9 posted, completed in class
  13. 4/26: Security Challenges in Distributed Systems [Keynote] Lab 10 posted, completed in class
    Homework 6 assigned: Replication + Sharding with Zookeeper and Redis (due 5/10)
  14. 5/3: Review [Keynote]
  15. 5/10: Final Exam, normal class time and place.


HW: 50%
Class participation: 10%
Midterm exam: 20%
Final exam: 20%

Homework Policy:

10% will be deducted for late HW assignments and late HW assignments will only be accepted for 24 hours after the due date. HW assignments submitted more than 24 hours 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. Homework that does not compile or run will receive at most 50% credit.

For fairness to all, there are no exceptions to the above rules.

Honor Code:

GMU is an Honor Code university; please see the Office for Academic Integrity for a full description of the code and the honor committee process, and the Computer Science Department’s Honor Code Policies regarding programming assignments. The principle of academic integrity is taken very seriously and violations are treated gravely. What does academic integrity mean in this course? Essentially this: when you are responsible for a task, you will perform that task. When you rely on someone else’s work in an aspect of the performance of that task, you will give full credit in the proper, accepted form. Another aspect of academic integrity is the free play of ideas. Vigorous discussion and debate are encouraged in this course, with the firm expectation that all aspects of the class will be conducted with civility and respect for differing ideas, perspectives, and traditions. When in doubt (of any kind) please ask for guidance and clarification.

Accommodations for Disabilities:

If you have a documented learning disability or other condition that may affect academic performance you should: 1) make sure this documentation is on file with Office for Disability Services (SUB I, Rm. 4205; 993-2474; http://ods.gmu.edu) to determine the accommodations you need; and 2) talk with me to discuss your accommodation needs.


Students must use their MasonLIVE email account to receive important University information, including messages related to this class. See http://masonlive.gmu.edu for more information.


This course builds upon several excellent distributed systems courses from other universities (in structure, assignments, and lectures):