Comp 734:  Distributed Systems

Course Overview

This course will provide an implementation-oriented study of distributed systems. Some of the topics covered will include inter-process communication, group communication, synchronization, remote procedure call, peer to peer and centralized sessions, fire-walls, causal broadcast, atomic broadcast, scalability, fault tolerance, replication, and transactions/concurrency control. These are foundational concepts, which are becoming particularly relevant with the emerging areas of cloud computing and distributed games.  These concepts will be introduced as layers in a general distributed infrastructure. Your projects will implement new layers and provide alternative implementations of some of the existing layers. When implementing a layer, you will act both as an application programmer, using abstractions of the layers below, and a systems programmer, defining abstractions for the layers above. The number of lines of code required by each layer will be relatively small; however the compositions of these layers will be complex.

The main difference between this course and a distributed programming/theory course is that it will address the design and implementation rather than use/theoretical foundations of distributed programming abstractions.  For instance, you will learn how to design and implement remote procedure call, rather than program it, or define its semantics formally.  Thus, the difference between this course and the other two courses is similar to the difference between a course on programming languages/compilers and courses on programming and models of languages/computation.

At the end of the course, you will have a basic understanding of how distributed software works, the potential uses of this software, and the design and implementation space of distributed abstractions.  As a distributed program is also a parallel program, you will also learn and use basic concepts in threads and thread synchronization. Because of the emphasis on implementation, you will gain practice with the use and implementation of advanced software engineering concepts such as layers, generic types, factories, and abstract factories.  Finally, you will create a layered system that is more sophisticated in many ways than the state of the art, and you are likely to use it for programming future distributed programs.

Distribution Area: The course is classified in the systems area of the UNC CS department distribution requirement.

Program Product Requirement:  Successful implementation of the assignments will fulfill the program product requirement.

Pre-requisites: The pre-requisites are knowledge of object-oriented programming and data structures – UNC’s 401 and 410.  UNC’s 431 (Internet Services and Protocols) is not a prerequisite.

Textbook: There is no text book covering implementation of distributed systems. Detailed PowerPoint slides will cover the topics.

Grades: A grade will be assigned based on performance on programming assignments, written assignments, and exams. Exams will constitute 40% of the grade and assignments will constitute the other 60%. There will be two midterms. Class participation and extra credit will be used to decide if a borderline grade should be upgraded. You are encouraged to discuss the assignments with fellow students but required to write/code the solutions/programs individually. Also you cannot use solutions from previous offerings of the course. Not following these rules is a violation of the honor code policy.

Instructor

Prasun Dewan

Office: FB 150

Phone: 919-962-1823

Email: dewan@cs.unc.edu

Office Hours: MW 3:30-4:30pm

Lectures

Room: FB 007

Time: MW – 2-3:15pm

Schedule (Tentative)

 

Unit ( Start Date)

Slides

Chapters

Assignment

Introduction (Aug 24,  29, 31)

PowerPoint  2007

Distributed Halloween Simulation

Threads and Thread Coordination (Sep 7, 12, 14, 19)

PowerPoint 2007

IPC (Sep 19, 21)

PowerPoint 2007

 

Distributed File Systems (Don’s Lectures) (Sep 26, 28)

PowerPoint

 

 

Data Communication (Oct 3, 10)

PowerPoint 2007

Socket-based GIPC

 

GIPC Data Communication(Oct 10, 17)

PowerPoint 2007

 

 

 

NIO Driver (Oct 24, 26, 31, Nov 2, 4)

PowerPoint 2007

 

 

 

Object Communication(Nov 7,9, 14, 21)

PowerPoint 2007

 

Extendible Multi-Platform Serialization

 

Synchronous Receive, Procedure and Function Call

Remote Operation Invocation (Nov 21)

PowerPoint 2007

PowerPoint 2007

Centralized Group communication, Sessions , Joiners

PowerPoint 2007

Peer to Peer Group Communication, Causal and Atomic Broadcast,  Late session joining

PowerPoint 2007

Implement late joining of sessions

Replication, Scalability, Fault Tolerance

PowerPoint

Implement fault tolerant late session  joining and message relaying

Transactions/Concurrency Control

PowerPoint 2007

Re-implement Halloween Simulation with new abstractions

Distributed file systems and hashtables

Downloads

Beau Halloween Simulation (Library, keep it compressed)

beau_project.zip

Coupled Halloween Simulations (Eclipse project, uncompress and link to libraries)

CoupledTrickOrTreat.zip

ObjectEditor (Library)

oeall17.jar

GIPC

GIPC (10/17)

Final Grades and Ranks