The course, taught in English in the first semester of the second year of the Master of Science in Computer Engineering, aims at presenting the main theoretical and practical foundations of the most widely used software architectures and programming paradigms for distributed systems. The students are expected to gain the knowledge of such foundations, as well as the ability to apply them within different distributed systems architectures.
The course refers to distributed systems, i.e., computer-based systems made of network-connected autonomous processes. Such systems today are the majority of computer-based systems, which makes them central in the current information technology landscape. For this reason, distributed systems are explicitly mentioned in the Computer Engineering Master of Science Program as one of the complex information systems that the professionals trained by the Program are expected to be able to operate, design, develop, and manage.
The course, taught in English in the first semester of the second year of the Master of Science in Computer Engineering, aims to present the main theoretical and practical foundations of the most widely used software architectures and programming paradigms for distributed systems. The students are expected to gain knowledge and understanding of such foundations, as well as the ability to apply them to different distributed systems architectures.
Knowledge of the following foundations of software architectures and programming paradigms for distributed systems:
- distributed systems properties, architectural styles, protocol styles,
- the web architecture and its main alternatives,
- main distributed algorithms and techniques for error management, serialization/deserialization and validation
- principles and guidelines for distributed services design, with special emphasis on REST APIs.
Skill to apply the learned foundations to the design and implementation of distributed applications and services
Knowledge of the following foundations of software architectures and programming paradigms for distributed systems:
- distributed systems properties, architectural styles, protocol styles,
- the web architecture and its main alternatives,
- main distributed algorithms and techniques for error management, serialization/deserialization and validation
- principles and guidelines for distributed services design, with special emphasis on REST APIs.
Skill to apply the learned foundations to the design and implementation of distributed applications and services
The course builds upon knowledge and skills provided by the "System and device programming" and "Web applications I" courses:
Prerequirements coming from Web Applications I:
- Knowledge of the main aspects of HTML, Javascript
- Ability to use Javascript at an advanced level for creating web applications at the front-end level.
- Ability to create complete web applications, by using a simple back-end server.
Prerequirements coming from System and Device Programming:
- Knowledge of system programming APIs (system calls)
- Skill to understand and implement concurrent programs based on processes/threads
- Skill to understand and implement concurrent programs exploiting advanced synchronization, message passing, and data sharing techniques
Other basic prerequirements:
- Ability to program in procedural languages and object oriented languages (Java in particular), and corresponding debugging skills.
- Basic knowledge of computer network architectures, TCP/IP, HTTP.
The course builds upon knowledge and skills provided by the "System and device programming" and "Web applications I" courses:
Prerequirements coming from Web Applications I:
- Knowledge of the main aspects of HTML, CSS, Javascript
- Ability to use Javascript at an advanced level for creating web applications at the front-end level.
- Ability to create complete web applications, by using a simple back-end server.
Prerequirements coming from System and Device Programming:
- Knowledge of system programming APIs (system calls)
- Skill to understand and implement concurrent programs based on processes/threads
- Advanced synchronization, message passing, and data sharing techniques
Other basic prerequirements:
- Ability to program in procedural languages and object oriented languages (Java in particular), and corresponding debugging skills.
- Basic knowledge of computer network architectures, TCP/IP, HTTP.
Distributed Systems foundations
- properties of distributed systems (scalability, consistency, partition tolerance, replication, fault-tolerance, CAP theorem, security properties)
- architectural styles for distributed systems (client-server, peer-to-peer, master-slave) and relative roles, main protocol styles (request/response, publish/subscribe)
- distributed algorithms (election, consensus, etc)
- techniques for error management (management of timeouts, disconnections, soft failures and error recovery strategies)
- techniques for serialization/deserialization and validation (JSON, XML, protocol buffers, schema, abstract syntaxes)
Web and non-web architectures
- HTTP and the REST architecture
- HTTP2.0, gRPC, protocol buffers
- Websockets and realtime web
- main alternatives to the web, TCP/IP sockets, MQTT
Design aspects
- principles and guidelines for designing distributed services and their interfaces, with special emphasis on REST APIs: models and patterns, management of robustness, performance, and security aspects
- REST maturity levels
The foundations and the design aspects will be illustrated with reference to the architectures illustrated in the course.
Distributed Systems foundations
- properties of distributed systems (scalability, consistency, partition tolerance, replication, fault-tolerance, CAP theorem, security properties)
- architectural styles for distributed systems (client-server, peer-to-peer, master-slave) and relative roles, main protocol styles (request/response, publish/subscribe)
- main distributed algorithms (election, consensus, etc)
- techniques for error management (management of timeouts, disconnections, soft failures and error recovery strategies)
- techniques for serialization/deserialization and validation (JSON, XML, protocol buffers, schema, abstract syntaxes)
Web and non-web architectures
- HTTP and the REST architecture
- HTTP2.0, gRPC, protocol buffers
- Websockets and realtime web
- main alternatives to the web, TCP/IP sockets, MQTT
Design aspects
- principles and guidelines for designing distributed services and their interfaces, with special emphasis on REST APIs: models and patterns, management of robustness, performance, and security aspects
- REST maturity levels
The foundations and the design aspects will be illustrated with reference to the architectures illustrated in the course.
In addition to classes, that include both lectures and exercises in classroom (4 credits), the course includes programming laboratories (2 credits) consisting of exercises on the application of the topics presented in the classes.
The laboratories consist of programming exercises about the application of the topics learnt during the classes. During the labs the students will discuss with the teachers on their solutions to the assigned exercises.
In addition to classes, that include both lectures and exercises in classroom (4 credits), the course includes programming laboratories (2 credits) consisting of exercises on the application of the topics presented in the classes.
The laboratories consist of programming exercises about the application of the topics learnt during the classes. During the labs the students will discuss with the teachers on their solutions to the assigned exercises.
The teacher will provide the material (copy of slides and links to on-line resources) on the website of the course.
Textbooks:
M. van Steen, A. S. Tanenbaum, Distributed Systems, 3rd Edition, 2017-2018, available online (https://www.distributed-systems.net/index.php/books/ds3/)
L. Richardson, S. Ruby, RESTful Web Services, O'Reilly 2007, available online (http://restfulwebapis.org/RESTful_Web_Services.pdf)
The teacher will provide the material (copy of slides and links to on-line resources) on the website of the course.
Textbooks:
M. van Steen, A. S. Tanenbaum, Distributed Systems, 3rd Edition, 2017-2018, available online (https://www.distributed-systems.net/index.php/books/ds3/)
L. Richardson, S. Ruby, RESTful Web Services, O'Reilly 2007, available online (http://restfulwebapis.org/RESTful_Web_Services.pdf)
Slides; Libro di testo; Video lezioni dell’anno corrente;
Lecture slides; Text book; Video lectures (current year);
Modalità di esame: Prova orale obbligatoria; Elaborato progettuale individuale;
Exam: Compulsory oral exam; Individual project;
...
The exam includes an individual project, to be developed at home, and a mandatory oral test, to be taken onsite.
The individual project is a programming exercise similar to the ones proposed in the laboratories. Its aim is to check that the student has acquired the expected design and development skills (see expected learning outcomes). The individual project will be assigned some days before the exam call date, in a range from 10 to 20 days according to the complexity. Only the students who submit their solution by the deadline specified in the assignment are admitted to the oral test. Samples of individual projects like the ones used for the exams will be made available to the students through the course web site.
The oral test consists of a discussion of the solution of the individual project, with related questions about the course topics, aiming at checking that the student has acquired the expected knowledge about the course topics (see expected learning outcomes) and verifying that the student has a detailed knowledge of the submitted code and of the choices made while developing it. The final mark will be determined by assigning equal weights to the individual project and to the oral test.
Gli studenti e le studentesse con disabilità o con Disturbi Specifici di Apprendimento (DSA), oltre alla segnalazione tramite procedura informatizzata, sono invitati a comunicare anche direttamente al/la docente titolare dell'insegnamento, con un preavviso non inferiore ad una settimana dall'avvio della sessione d'esame, gli strumenti compensativi concordati con l'Unità Special Needs, al fine di permettere al/la docente la declinazione più idonea in riferimento alla specifica tipologia di esame.
Exam: Compulsory oral exam; Individual project;
The exam includes an individual project, to be developed at home, and a mandatory oral test, to be taken onsite.
The individual project is a programming exercise similar to the ones proposed in the laboratories. Its aim is to check that the student has acquired the expected design and development skills (see expected learning outcomes). The individual project will be assigned some days before the exam call date, in a range from 10 to 20 days according to the complexity. Only the students who submit their solution by the deadline specified in the assignment are admitted to the oral test. Samples of individual projects like the ones used for the exams will be made available to the students through the course web site.
The oral test consists of a discussion of the solution of the individual project, with related questions about the course topics, aiming at checking that the student has acquired the expected knowledge about the course topics (see expected learning outcomes) and verifying that the student has a detailed knowledge of the submitted code and of the choices made while developing it. The final mark will be determined by assigning equal weights to the individual project and to the oral test.
In addition to the message sent by the online system, students with disabilities or Specific Learning Disorders (SLD) are invited to directly inform the professor in charge of the course about the special arrangements for the exam that have been agreed with the Special Needs Unit. The professor has to be informed at least one week before the beginning of the examination session in order to provide students with the most suitable arrangements for each specific type of exam.