Learning Outcomes:
The student should develop:
* An understanding of key principles of Distributed Systems Design
* The ability to specify and design a distributed system
* Core advanced programming skills in specific areas of Distributed Systems (e.g. Peer-2-peer, fault tolerant, or service oriented)
* An appreciation of the theoretical underpinnings.
Indicative Module Content:
While completing the course, the students will learn about a number distributed programming models, such as: socket programming, distributed objects, remote method invocation, web services (SOAP / REST), message-oriented middleware, and actor programming. Additionally, they will explore a range of distributed systems concepts, including: architectural styles (P2P, Client-Server, Monolithic Systems vs Microservices). Students will also be exposed to additional programming models, distributed applications (e.g. distributed file systems), and advanced concepts (replication systems, fault tolerance) through peer learning.