CSC 536 Distributed Systems II

Ljubomir Perkovic

Office: CDM 713
Spring 2020-2021
Class number: 30382
Section number: 910
OLASY NCHOP Online Campus


Distributed Systems II (DSII) is an advanced distributed systems course. While Distributed Systems I (CSC 435) covers the plumbing of distributed systems (e.g., processes, networking, and naming), DSII covers the techniques required to build large-scale, highly available, fault tolerant distributed systems.

In DSII, we will cover classical distributed algorithms that solve fundamental problems in distributed systems including synchronization, distributed transactions, replication and replica consistency, fault tolerance, reliable group communication, and crash recovery. Examples of algorithms that we will cover include vector clocks, used by Amazon to ensure high availability, consistent hashing, used by Akamai to assign replicated web content to web servers, the gossip protocol, used by Facebook's Cassandra to propagate updates to replicas, Merkle trees, used by Bitcoin to ensure efficient and secure verification of bitcoin transactions, and the Paxos/Raft algorithms, used by Google to provide fault tolerance across its data storage services.

We will focus in particular on problems and solutions relevant to systems that store and process massive data sets (Big Data). We will go over the design decisions behind distributed database systems such as Facebook's Cassandra, Amazon's Dynamo, and Google's BigTable and recently developed Spanner. In the process, we will see that in each case the design decisions were driven by relatively narrow goals (e.g., highly available shopping carts for Amazon and web search data batch processing for Google) and that this is in general a wise approach for system development.

To get our hands dirty and implement the distributed algorithms covered in class, we will use Akka, a Scala/Java toolkit for developing highly concurrent, distributed, scalable, fault tolerant event-driven applications. We will also understand the role of bleeding edge distributed system technologies such as docker and etcd for distributed application development and deployment. For your final project, you will have the opportunity to build a distributed system prototype using Akka and such tools.



A.S. Tanenbaum and M. van Steen, Distributed Systems: Principles and Paradigms, 2nd edition, Prentice-Hall, 2006.


Vaughn Vernon: Reactive Messaging Patterns with the Actor Model: Applications and Integration in Scala and Akka, Addison-Wesley Professional, 2015.

R. Kuhn, B. Hanafee, and J. Allen, Reactive Design Patterns, Manning Publications, 2017 .


The course grade will be apportioned as follows:

Homeworks 60%
Project 40%

There will be a homework due most weeks. A homework or project not handed in by the deadline will receive 0 points: this is because I want to discuss the homework solutions with the class as soon as possible. Because it is unrealistic to expect that you will be able to submit every homework on time, I will drop the lowest 2 homework grades when computing your overall homework grade.


You must have taken SE435, or equivalent courses in distributed systems. I will assume that:

  • you know how to create, debug, compile and run Java and Scala code on the platform of your choice;
  • you use a reasonable programming style (i.e. your code is easy to read and concise) ;
  • you know and understand the basic architectures of distributed systems, and the basics of networking, operating systems (processes, threads), naming, and security.

School policies:

Changes to Syllabus

This syllabus is subject to change as necessary during the quarter. If a change occurs, it will be thoroughly addressed during class, posted under Announcements in D2L and sent via email.

Online Course Evaluations

Evaluations are a way for students to provide valuable feedback regarding their instructor and the course. Detailed feedback will enable the instructor to continuously tailor teaching methods and course content to meet the learning goals of the course and the academic needs of the students. They are a requirement of the course and are key to continue to provide you with the highest quality of teaching. The evaluations are anonymous; the instructor and administration do not track who entered what responses. A program is used to check if the student completed the evaluations, but the evaluation is completely separate from the student’s identity. Since 100% participation is our goal, students are sent periodic reminders over three weeks. Students do not receive reminders once they complete the evaluation. Students complete the evaluation online in CampusConnect.

Academic Integrity and Plagiarism

This course will be subject to the university's academic integrity policy. More information can be found at If you have any questions be sure to consult with your professor.

Academic Policies

All students are required to manage their class schedules each term in accordance with the deadlines for enrolling and withdrawing as indicated in the University Academic Calendar. Information on enrollment, withdrawal, grading and incompletes can be found at

Students with Disabilities

Students who feel they may need an accommodation based on the impact of a disability should contact the instructor privately to discuss their specific needs. All discussions will remain confidential.
To ensure that you receive the most appropriate accommodation based on your needs, contact the instructor as early as possible in the quarter (preferably within the first week of class), and make sure that you have contacted the Center for Students with Disabilities (CSD) at:
Lewis Center 1420, 25 East Jackson Blvd.
Phone number: (312)362-8002
Fax: (312)362-6544
TTY: (773)325.7296