Distributed Systems

UB Catalog information for CSE 486 , CSE 586

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


This course is a cross-listed graduate/undergraduate course titled Distributed Systems for both graduate and undergraduate students. Both versions of the course are project-heavy.


Spring 2018, Spring 2021, Spring 2023

Current Offering: Spring 2023

Lecture A:    MWF 11:00-11:50, Knox 104
Office Hours M 16:00-16:50, Davis 334
W 13:00-13:50, Davis 334
TA Office Hours (See Piazza)


The course syllabus is here.


Introduction (pdf) 2023-01-30
The Internet (pdf) 2023-02-01
An Overview of Go (pdf) 2023-02-06
A Model of Distributed Systems (pdf) 2023-02-08
Failure and Failure Detection (pdf) 2023-02-10
Time (pdf) 2023-02-13
Logical Time (pdf) 2023-02-17
Naming in Distributed Systems (pdf) 2023-02-20
Distributed Hash Tables (pdf) 2023-02-27
Global States (pdf) 2023-03-08
Broadcast and Multicast (pdf) 2023-03-10
Ordered Multicast (pdf) 2023-03-15
Gossip Protocols (pdf) 2023-03-31
Leader Election (pdf) 2023-04-03
Consensus (pdf) 2023-04-07
Byzantine Agreement (pdf) 2023-04-14
Mutual Exclusion (pdf) 2023-04-17
The Raft Consensus Protocol (pdf) 2023-04-21
Quorum (pdf) 2023-04-28
Consistency and Transactions (pdf) 2023-05-01
Locking and Commit Protocols (pdf) 2023-05-03
Distributed Systems Security (pdf) 2023-05-05


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.

Undergraduate 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.


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 this semester is TBD. 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.