Distributed systems engineering and Lab
Module distributed systems engineering

Academic Year 2025/2026 - Teacher: EMILIANO ALESSIO TRAMONTANA

Expected Learning Outcomes

General goals described according to the expected learning results.

1. Knowledge and understanding: Students will learn advanced programming mechanisms, including aspect-based, parallel, asynchronous, and distributed programming. They will deepen their understanding of the main design patterns (authentication, authorization, session management, DTOs, SLOBs, circuit breakers) and the middleware technologies (RabbitMQ) used to ensure scalability, reliability, and resilience in distributed software systems.

2. Applying knowledge and understanding: Students will be able to design, integrate, and implement distributed software systems using the patterns studied. They will be able to use tools and technologies (microservice frameworks, messaging systems such as RabbitMQ) to implement scalable and reliable solutions, effectively managing session state, data exchange (DTO), and data storage (SLOB).

3. Making judgements: The student will be able to independently evaluate the most appropriate architectural solution for a given application context, analyzing various influencing factors and choosing an appropriate solution.

4. Communication skills: the student will be able to describe distributed software systems using a proper technical language.

5. Learning skills: the student will be able to solve typical problems, by studying, analysing and using novel distributed technologies. 

Course Structure

Frontal lessons for concepts, techniques and code. 

Should remote teaching be needed, then some adjustements to the above might be introduced, while honouring the programme outlined in the syllabus.

Required Prerequisites

Ability to understand software requirements, and to design, implement, and test object-oriented systems in C++ or Java.

Attendance of Lessons

Attending lessons is strongly encouraged.

Detailed Course Content

The course explores distributed systems engineering in depth, with a focus on microservices architectures and the fundamental design patterns for building scalable, resilient, and maintainable systems. After an overview of communication models and middleware technologies (e.g., RMI, RabbitMQ, REST), the course analyzes the main design patterns for separating components while ensuring effective collaboration (such as Proxy, Remote Facade, Session State, DTO, Broker), as well as the main service coordination design patterns (such as Saga, Scatter-Gather), useful for managing distributed transactions and asynchronous flows. Considerable emphasis is placed on resilience, through asynchronous programming, patterns such as Retry, Circuit Breaker, Bulkhead, and Timeout, as well as consistency and cache management in distributed contexts. The course concludes with several design patterns for ensuring service-level security, such as tokens, authentication, and authorization.

Textbook Information

1. F. Buschmann, R. Meunier, H. Rohnert, P. Sommerlad, M. Stal. Pattern-Oriented Software Architecture A System of Patterns. John Wiley and Sons, 1996

2. M. Fowler. Patterns of Enterprise Application Architecture. Addison-Wesley, 2003

3. M. Schumacher, E. Fernandez-Buglioni, D. Hybertson, F. Buschmann, P. Sommerlad. Security Patterns: Integrating Security and Systems Engineering. John Wiley and Sons, 2006

4. R. Laddad. AspectJ in Action: Enterpriese AOP with Spring Applications. Manning Publications. 2010.

5. R.-G. Urma, M. Fusco, A. Mycroft. Java 8 in Action: Lambdas, streams, and functional-style programming. Manning, 2015

6. G. Hohpe, B. Woolf. Enterprise Integration Patterns. Addison-Wesley, 2003

7. A. Videla, J.J.W. Williams. RabbitMQ in Action. Manning, 2012

8. A. M. Antonopoulos. Mastering Bitcoin. Programming the open blockchain. O'Reilly, 2017

9. R. Kuhn. Reactive Design Patterns. Manning, 2017

Course Planning

 SubjectsText References
1Presentazione del corso con obiettivi. Modularità per sistemi distribuiti e paralleli[2] C. 1
2Design pattern Proxy e Reference Monitor[1] C. 3.4, [3] C. 8
3Design pattern Remote Proxy e Forwarder-Receiver[1] C. 3.4, 3.6
4Design pattern Role-based Access Control e Authenticator[3] C. 8, 10
5Design pattern Remote Facade e Data Transfer Object[2] C. 7, 15
6Design pattern Session State (Client, Server, Database), Serialized Large Object[2] C. 6, 17, 12
7Design pattern Broker[1] C. 2.3
8Progettazione con callback, Java chiamate asincrone, tipi CompletableFuture[5] C. 11
9Programmazione ad aspetti: costrutti del linguaggio AspectJ. Pointcut e join point. Esempio di aspetto per la protezione degli accessi[4] C. 2, 3
10Programmazione ad aspetti: pointcut per la cattura del contesto di esecuzione, passaggio di parametri agli advice[4] C. 3, 4
11Refactoring ad aspetti. Crosscutting statico e dinamico. Pointcut cflow, declare warning[4] C. 5
12Design pattern ad aspetti: Adapter, Participant e Sincronizzazione. Gestione eccezioni con aspetti[4] C. 5, 12, 13
13Design pattern per la stabilità: Timeout, Circuit Breaker, Bulkheads[9] C. 2, 12
14Middleware orientato ai messaggi: RabbitMQ[6] C. 3, [7] C. 2
15Design pattern per i messaggi. Produttori e consumatori di messaggi. Code[6] C. 10, [7] C. 4
16Architettura distribuita di Blockchain di bitcoin, proprietà[8] C. 1, 2, 5, 6, 8, 9, 10

Learning Assessment

Learning Assessment Procedures

The exam consists of a project assigned to individual students or groups of up to three people. Once the project has been completed and the documentation submitted, an oral exam may be held at the end of the exam. The project involves the design and implementation of a small distributed and/or concurrent software system that uses some of the course technologies.

The exam is designed to thoroughly assess the student's preparation, analytical and reasoning skills on the topics covered in the course, as well as the appropriateness of the technical language used.

The exam will be graded excellently (28-30 cum laude) if the student demonstrates in-depth knowledge and precision in the presentation of the course concepts, assessed both through analysis of the completed project and an oral exam. An intermediate grade (24-27) will be given if the exam demonstrates a partial understanding of some course topics. A passing grade (18-23) will be given if, despite partial knowledge of the course topics, they are presented superficially or inaccurately.

Students with disabilities and/or learning disabilities (LD) must contact the instructor, the DMI CInAP representative (Prof. Daniele), and CInAP well in advance of the exam date to communicate their intention to take the exam with appropriate compensatory measures.

The learning assessment may also be conducted online, if circumstances require it.

Examples of frequently asked questions and / or exercises

Implement a software aspect that caches data

Implement an asynchronous call to a method

Describe the handling of session data

Describe the handling of accesses using design pattern Role-based access control

VERSIONE IN ITALIANO