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

Current Offering: Spring 2021

Lecture A:    MWF 13:50-14:40, Location/method TBD
Office Hours M 10:00-11:00, Zoom
Th 14:00-16:00, Zoom
TA Office Hours (See Piazza)


The course syllabus is here.


Introduction (pdf) 2021-02-01
The Internet (pt. 1) (pdf) 2021-02-03
The Internet (pt. 2) (pdf) 2021-02-05
Go Projects and Idioms (pdf) 2021-02-07
Go Methods and Interfaces (pdf) 2021-02-10
The Go Language continued 2021-02-12
A Model of Distributed Systems (pdf) 2021-02-15
Failure and Failure Detection (pdf) 2021-02-17
Time (pdf) 2021-02-19
Time continued 2021-02-22
Logical Time (pdf) 2021-02-24
Global States (pdf) 2021-02-26
Naming in Distributed Systems (pdf) 2021-03-01
Distributed Hash Tables (pdf) 2021-03-03
Distributed Hash Tables continued 2021-03-05
Broadcast and Multicast (pdf) 2021-03-08
Kademlia Routing review 2021-03-10
Ordered Multicast (pdf) 2021-03-12
Gossip Protocols (pdf) 2021-03-15
Leader Election (pdf) 2021-03-17
Midterm Review (pdf) 2021-03-22
Consensus (pdf) 2021-03-29
Byzantine Agreement (pdf) 2021-04-05
Mutual Exclusion (pdf) 2021-04-07
Software Development for Coursework (pdf) 2021-04-09
The Raft Consensus Protocol (pdf) 2021-04-12
Quorum (pdf) 2021-04-16
RafTM (pdf) 2021-04-19
Consistency and Transactions (pdf) 2021-04-26
Locking and Commit Protocols (pdf) 2021-04-30
Distributed Systems Security (pdf) 2021-05-03
Final Review (pdf) 2021-05-07


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 250 or an equivalent course at another institution with appropriate articulation.


There is no required text for this course. Readings will be assigned from publications in the scientific literature and other sources.


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 1.13. 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 on a virtual machine image provided by the instructor (see Virtual Machine, below). You may develop your projects on a different platform at your own risk.

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

Virtual Machine

The virtual machine image can be downloaded here.

Note that this VM is newly updated for Spring 2021! Make sure that you have downloaded and installed the correct virtual machine image.


Students wishing to prepare themselves for this course may review the following resources:

  • A Tour of Go
    If you are unfamiliar with the Go programming language, this resource will help you come up to speed. It is a series of in-browser programming exercises to accomplish trivial tasks in Go, intended to teach you the basic syntax and structure of Go.
  • Operating Systems in Three Easy Pieces
    OSTEP is a quality, free operating systems textbook. If your background in OS concepts is weak, you may find it helpful to review some of the information in OSTEP (or another good operating systems textbook). Some familiarity with Part I Chapter 7 (CPU Scheduling) and Part II (Concurrency) will be valuable. We are not using C or a POSIX API, so take that information with a grain of salt.
Ethan Blanton
Assistant Professor of Teaching

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