This module is offered in 2021-22.


The aims of this module are:

  • To help students understand the fundamental issues of designing and engineering distributed systems with reference to partial failure, heterogeneity, scalability, concurrency and asynchrony.

Learning Outcomes

On successful completion of this module, the student should:

  • Have an understanding of the fundamental issues in distributed computing sufficient to form a sound basis for the design and implementation of distributed systems from scratch.
  • Be aware of the problems and pitfalls relating to the operation of distributed systems, and have insight into the main techniques for addressing them.


  • Motivations for building distributed systems; classifications of distributed systems; distributed architectures; cloud computing; communication and concurrency; distributed communication; clock synchronization; asynchronous systems; logical clocks; causality; fault tolerance and distributed transactions; Byzantine fault tolerance; coordination and agreement algorithms; availability and reliability; decentralized algorithms; peer-to-peer systems.

Parallel to lectures will be a study group on select topics from research and practice in distributed systems. Each session will involve a student-group led discussion on a pre-agreed topic that the group must prepare for in advance. The objectives of this study group will be to give students experience in:

  • Researching topics in distributed systems.
  • Presenting their findings to an audience.
  • Leading a critical discussion on the topic in question.

Compulsory Elements

This module has the following compulsory elements in addition to those common to all modules (mark of 4 in each assessment component):

  • Attend and participate in the reading group.

Module Delivery

Back to top

Last Published: 19 Jan 2022.