Learning Outcomes:
This module introduces students to distributed systems that will equip them with the knowledge underlying the design of large-scale software systems distributed on multiple computers. We will teach students how to design appropriate software architectures in accordance with enumerated requirements and constraints. First, we will help students to gain an understanding of the fundamental principles and techniques behind the design of distributed systems, such as locking, concurrency, scheduling, and communication across the network. Additionally, the students will be given the opportunities to develop their problem solving, programming and written communication skills by designing solutions to distributed system programming problems, and implementing those solutions as fully networked distributed systems.
Indicative Module Content:
General concepts in distributed system designs: client-server model, peer-to-peer systems, overlay networks, data/process replication, caching, scaling techniques - hierarchical architectures. Process synchronization: physical clock synchronization, notion of logical clocks, event ordering, causality of events, and vector clocks. Mutual exclusion protocols in distributed systems; Inter-process communication and coordination models - request-reply model, remote procedure call, group communication and broadcast models, reliable broadcast protocols; Data replication management protocols; Peer-to-peer systems; Distributed file systems; Security and protection -- authentication protocols and Kerberos design; Grid Computing and Web Services. Additionally a case study on designing a distributed system (exemple: Google distributed system) is discussed.