- Docente: Andrea Omicini
- Credits: 6
- SSD: INF/01
- Language: English
- Moduli: Andrea Omicini (Modulo 1) Giovanni Ciatto (Modulo 2)
- Teaching Mode: E-learning (Modulo 1) E-learning (Modulo 2)
- Campus: Bologna
-
Corso:
Second cycle degree programme (LM) in
Computer Science (cod. 5898)
Also valid for Campus of Cesena
Second cycle degree programme (LM) in Computer Science and Engineering (cod. 6699)
-
from Sep 19, 2025 to Dec 15, 2025
-
from Oct 17, 2025 to Dec 19, 2025
Learning outcomes
The course presents some current technologies to develop distributed systems. The concept of distributed system is introduced first, then the concept of middleware technology as a distributed programming platform. The fundamental principles of distributed systems will be explained. This introductory material is followed by a description of the main architectures of distributed systems, including those for implementing and deploying service-based applications in the cloud. At the end of the course the students will be able to select the appropriate middleware platform for a given problem and to apply the main technologies presented to solve practical case studies. The exam will consist of 1) a midterm presentation on a research paper chosen by the student and 2) a final project assigned by the instructor.
Course contents
- Case Studies
- The CAP Theorem. Availability, Consistency, Failure in Distributed Systems
- The Problem of Consensus in Distributed Systems
- Distributed Ledger Technology. Blockchain as Middleware
- Representational State Transfer (ReST)
- Logical Clocks
- Simple Agents in JADE
- Coordination in Linda
- Code Mobility
- General Issues of Distributed Systems
- Why Distributed Systems?
- Replication & Consistency in Distributed Systems
- Dependability in Distributed Systems
- Roots of Distributed Systems. Computation in Space & Time
- Definitions & Goals for Distributed Systems
- Sorts of Distributed Systems
- Modelling Distributed Systems. Software & System Architectures
- Modelling Distributed Systems. Process Algebra
- Computing with Time
- Agents for Distributed Systems
- Coordination of Distributed Systems
- Computing with Space
- Technologies for Distributed Systems
- Infrastructural components and interaction patterns for distributed systems
- Tools and diagrams for distributed systems modelling
- Basic mechanisms for distributed systems
- Communication mechanisms (stream- and packet-based interaction with sockets) in Python
- Data presentation, serialization and deserialization: tools and technologies
- Anatomy of Remote Procedure Calls
- Case study: guided design and implementation of a distributed system from scratch
Readings/Bibliography
The bibliography is made available through the course web site.
Teaching methods
- Lessons with slides
- Examples discussed and built by the teachers
- Lab activity
Assessment methods
- Development of an individual/group project involving the design and prototyping of a distributed system (software+report)
- Presentation and discussion of the aforementioned project
Teaching tools
- web site of the professor
- web page of the course with slides (PDF), other materials and useful links
- recorded lectures for background topics
Links to further information
https://apice.unibo.it/xwiki/bin/view/Courses/Series/Ds/
Office hours
See the website of Andrea Omicini
See the website of Giovanni Ciatto
SDGs


This teaching activity contributes to the achievement of the Sustainable Development Goals of the UN 2030 Agenda.