CSx55: Distributed Systems

csu-logo
red-line
[Schedule] [Assignments] [Infospaces] [Grading] [Syllabus]

[Canvas]

[Home]

Spring 2024

CS x55 combines the graduate and undergraduate versions of distributed systems. CSx55 covers fundamentals issues involved in building distributed systems. The course examines issues related to concurrent programming, thread pools and safety, non-blocking I/O, scalable server design, file system design, distributed mutual exclusion and deadlock detection, consensus and consistency, pipelining schemes, distributed graph algorithms, distributed shared memory, distributed objects, and MapReduce.

CSx55 is geared towards senior undergraduate students and also first-year graduate students who have not taken such a course. Introduction to distributed systems builds upon system concepts related to processes, storage management and critical sections in centralized single-CPU systems. Undergraduate students are expected to have seen these topics in their undergraduate operating systems course (e.g., CS 370).

CSx55 will cover foundational issues such as
  • Thread safety and concurrent programming
  • Algorithms underpinning peer-to-peer systems and distributed hash tables including for systems such as Chord, Pastry, Tapestry, Napster, Gnutella, and BitTorrent.
  • Foundational issues (including Brewer's CAP theorem) in the design of cloud scale storage systems such as the Google File System and Amazon Dynamo.
  • Design considerations in systems for scalable analytics such as MapReduce and Spark.
course-logo

Course Objectives
By the end of the course, students should be able to

  1. Build scalable servers using thread pools that leverage lightweight concurrency primitives. This is
  2. Design and build distributed, fault-tolerant file systems from the ground-up
  3. Write MapReduce programs that execute concurrently on multiple machines
  4. Design efficient data representation formats for communications between distributed
    components
  5. Understand the role of overlays in content disseminations
  6. Scale as the number of entities in the system increase
  7. Can handle and process large data volumes using Hadoop/MapReduce and Spark
  8. Design systems that are loosely coupled, transactional and eventually stable. These systems must be able to sustain failures and recover from them.
  9. Understand issues related to the role of order and distributed mutual exclusion
Extensive experimentation through programming assignments in Java is a principal activity of this course. These assignments will focus on developing skills that are immediately transferrable to building real-world systems.


Prerequisites
Undergradutates: CS370 {strictly enforced}


Term project and paper
This class is a capstone course - and as such, a written term paper is required. The term project will involve performing analytics or mining at scale over spatial datasets using AI/ML libraries and ecosystems -- e.g., TensorFlow, PyTorch, Spark, etc.


Professor Lecture Coordinates
  Shrideep Pallickara
Office: Room 364, Computer Science
Office Hours:
1:00-2:00 pm Friday [in-person and via Zoom]
E-mail: compsci_csx55 {aT} colostate.edu
(with the obvious change)
Tel: 970.492.4209


Graduate Teaching Assistants

Gabriele Maurina

Daniel Rehberg

Ethan Seefried

GTA Office hours are in person in CSB-120 and via MS-Teams.
  TTh: 9:30 - 10:45 am
Fridays: 4:00-5:00 pm
[CSB-130]

  Monday Tuesday Wednesday Thursday Friday
Gabriele Maurina 8:00 am-12 pm 8:00 am-4:00 pm 8:00 am-12:00 pm
 
Dan Rehberg 11:00am-2:00 pm 11am-2:00 pm 11:00-2:00 pm 10:00-1:00 pm
2:00 -4:00 pm
 
Ethan Seefried 1:00-3:00 pm 10-12:00 pm 9:00-10:00 am 1:00-3:00 pm 9:00-10:00 am


Department of Computer Science, Colorado State University,
Fort Collins, CO 80523 USA
© 2024 Colorado State University
*The course-logo is an image from Microsoft's Online library