Distributed Systems

UB Catalog information for CSE 486

This information is advisory only. The authoritative course description and requirements for a given semester are defined by the course syllabus.


This course is an undergraduate course titled Distributed Systems. It is a project-heavy course.


Spring 2024

Current Offering: Spring 2024

Lecture 000:    MWF 11:00-11:50, Knox 104
Office Hours Thurs 14:00-14:50, Davis 334
TA Office Hours (See Piazza)


The course syllabus is here.


Introduction (pdf) 2024-01-24
The Internet (pdf) 2024-01-27
A Model of Distributed Systems (pdf) 2024-01-31
Failure and Failure Detection (pdf) 2024-02-05
Time (pdf) 2024-02-07
Logical Time (pdf) 2024-02-12
Naming in Distributed Systems (pdf) 2024-02-14
Distributed Hash Tables (pdf) 2024-02-19
Global States (pdf) 2024-02-26
Broadcast and Multicast (pdf) 2024-02-28
Ordered Multicast (pdf) 2024-03-04
Gossip Protocols (pdf) 2024-03-08
Leader Election (pdf) 2024-03-26
Consensus (pdf) 2024-03-27
Byzantine Agreement (pdf) 2024-03-29
Mutual Exclusion (pdf) 2024-04-01
The Raft Consensus Protocol (pdf) 2024-04-05
Quorum (pdf) 2024-04-15
Consistency and Transactions (pdf) 2024-04-17
Locking and Commit Protocols (pdf) 2024-04-22
Distributed Systems Security (pdf) 2024-04-26
An Exploration of Distributed Systems (pdf) 2024-05-03
Final Review (pdf) 2024-05-06


All students are expected to have a thorough understanding of data structures and fundamental algorithms, as well as meaningful familiarity with the Internet architecture and networking (including the TCP/IP protocol suite) and operating systems concepts. In addition, students are expected to have done some systems programming (e.g., using threads and sockets). Students must either have some experience in the Go programming language or be capable of picking it up rapidly.

Students must have completed CSE 220 and CSE 250 (or equivalent courses at another institution with appropriate articulation).


The required text for this course is Distributed Computing: Principles, Algorithms, and Systems by Ajay D. Kshemkalyani and Mukesh Singhal, ISBN 978-0-521-18984-2. It is available to all UB students in digital form from the UB libraries.


The ultimate authority for course policies is the course syllabus. However, my general academic integrity policy can be found here and my list of policies is here.

Course Structure

This is a project-heavy course. Students will be expected to implement several non-trivial applications in the Go programming language. Projects will make up about half of the final course grade, with the remainder being quizzes and exams.

There will be one midterm examination and one final examination.

There are no graded homeworks for this course. Homeworks may be assigned to help students understand the material, and any material covered in homeworks may appear on exams or quizzes.

Programming Assignments

All programming assignments for this course will be in Go. The version of Go used for evaluation this semester is 19. Go is a systems programming language with a flavor not dissimilar to C, but providing much higher-level support for strings, buffers, message passing, and concurrency.

All projects in this course must compile and run correctly in the grading environment used for this course, which is Ubuntu 20.04 LTS. A virtual machine image provided by the instructor (see Virtual Machine, below) duplicates this environment. You are not required to use this virtual machine, but you may do so if you wish to ensure that your environment is as close to the grading environment as possible. Note that some additional setup may be required to get the Go development environment working on that VM.

Students considering this course or wishing to do some preparation before the semester begins may wish to complete A Tour of Go to get a feel for the Go language and the programming that will be required in this course.

Virtual Machine

The virtual machine image can be downloaded here.

Note that the current image is from Spring of 2021. Make sure that you have downloaded and installed the correct virtual machine image.

Preparing for This Course

Students wishing to prepare for this course may wish to review this advice for succeeding in CSE 486​/586. In particular, undergraduate students who have not yet taken several 3xx/4xx courses and graduate students who do not have a strong practical background in systems programming or implementation will find extra resources to review prior to the semester there.

Students unfamiliar with the Go language who do nothing else will wish to do A Tour of Go before the semester begins.

Ethan Blanton
Assistant Professor of Teaching

Ethan Blanton is an Assistant Professor of Teaching in the Department of Computer Science and Engineering at the University of Buffalo.