CS 455 covers fundamental 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 objects, MapReduce, and Spark.
CS455 is geared towards senior undergraduate students and also first-year graduate students who have not taken such an introductory course. Introduction to distributed systems builds upon system concepts related to processes, storage management and critical sections in centralized single-CPU systems.
By the end of the course, students should be able to:
- Build scalable servers using thread pools that leverage lightweight concurrency primitives
- Understand the role of overlays in content disseminations
- Write MapReduce programs that execute concurrently on multiple machines
- Design complex analytic tasks using Spark
- Understand the design of file systems from the ground up
- Design efficient data representation formats for communications between distributed components
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.
This course can be applied toward:
Computer Science majors and minors only.
Textbooks and Materials
The subject matter covered in this course will reference several textbooks and papers. There are two optional textbooks for this course.
Distributed Systems: Principles and Paradigms. Andrew S. Tanenbaum and Maarten van Steen. 2nd Edition. Prentice Hall. ISBN: 0132392275/978-0132392273.
Distributed Systems: Concepts and Design. George Coulouris, Jean Dollimore, Tim Kindberg, Gordon Blair. 5th Edition. Addison Wesley. ISBN: 978-0132143011