Academic Year 2023-2024



Gabriele Puppis
Unit Credits
Teaching Period
First Period
Course Type
Prerequisites. Computer Networks; Operating Systems
Teaching Methods. Class lectures with examples. Practical activities in computer labs
Verification of Learning. Practical project to develop in one of the languages/middlewares described in the course. Projects can be carried out in groups of 2 students. A presentation and oral examination will follow. Aspects which will be evaluated include adequacy of design choices, correctness and completeness of the solution, delivery timeliness, general knowledge about the course.

See also

More Information. Teaching tools: blackboard, slides files, Moodle platform, Teams platform.
After completing this course students will

– understand the design patterns of distributed systems.

– Compare implementation strategies that are possible when designing a distributed system.

– Know the main communication paradigms, such as RPC, RMI, message queues, group communication, etc.

– become familiar with the main middleware, such as JGroups, CORBA, SOAP, Chord, etc.

– Understand the algorithms to solve common problems in distributed systems, such as fault detection, deadlock detection, replicas, etc.


The aim of the course is to provide students with the fundamentals and tools for the analysis, design and implementation of distributed systems. To this end, the course is divided in three parts. In the first part, we study the system-architectural aspects of distributed systems, analyzing various models (client-server, multi-tier, peer-to-peer …). In the second part we study some communication patterns of distributed systems, the corresponding middleware, and specific languages for programming distributed systems (i.e. Erlang and Jolie). Finally, the third part deals with common issues that occur in distributed programming, such as failure detection, deadlock detection, consensus, replica management; for each of these, we will study appropriate algorithmic and technical solutions.
G. Coulouris, J. Dollimore, T. Kindberg, G. Blair, “Distributed systems: concepts and design”, 5 ed., International edition, Pearson, 2012.

W. Fokkink, “Distributed Algorithms: An Intuitive Approach”. 2nd edition, 2018. MIT Press. ISBN: 978-0262037662

J. Armstrong, “Programming Erlang: Software for a Concurrent World”, The Pragmatic Programmers, 2007. ISBN: 978-1-93435-600-5

Notes from lectures