Distributed systems are everywhere today; games on smartphones are distributed as are popular web applications, and distributed batch and streaming computation on massive datasets is commonplace in industry today. To support this growing trend, much research in recent years has been devoted to the confluence of programming models and distributed systems. In this special topics course, we’ll focus on that confluence, programming models for distributed computation, studying key publications describing systems and languages that have shaped how we build systems today, by improving reliability (fault tolerance), facilitating reasoning (correct-by-construction systems), and enabling better performance (reduced synchronization, in-memory computation). Some of these ideas have had a major impact in industry, and in these cases we’ll highlight their relevance to building systems and applications today, while others have fallen short.
Topics we will cover include, promises, remote procedure calls, message-passing, conflict-free replicated datatypes, large-scale batch computation à la MapReduce/Hadoop and Spark, streaming computation, and where eventual consistency meets language design, amongst others.
The course is a research seminar that primarily focuses on reading and discussing papers from the scientific literature, and working together as a group to author (and publish online) a collection of articles surveying the landscape of programming models for distributed computation.
Every 1-2 weeks will be dedicated to a specific topic or programming model. Each topic is covered by a selection of papers. Each student will be responsible for reading and summarizing a specific paper, and for preparing a short presentation about the publication to the class. A group discussion will follow the presentation of all publications, aimed at understanding the differences between each approach presented.
As a final project, students will be expected to collaborate on authoring comprehensive survey articles covering each topic, to be published online as a book/collection of articles surveying the state of programming models for distributed programming to be shared with the open source community. As part of the final project, we will evaluate different programming models.
You will be evaluated on: