Distributed Systems and Middleware Technologies

Course for the MSc in Computer Engineering (a.y. 2023/24)

Dept. of Information Engineering

School of Engineering, University of Pisa

nr. of credits (CFUs)
6

 

Description

~~~~~~~~~~~~~~~

The course is aimed at providing students with proper conceptual and technological tools for the design, analysis, and development of modern distributed applications. After introducing models, paradigms and algorithms for distributed software, various types of middleware systems are presented, focusing on the issues they have been designed to deal with.
Students will learn to design, implement, and integrate distributed software, possibly made of heterogeneous components; moreover, they will acquire the ability to choose and apply the most suitable middleware solutions to address practical problems in distributed enterprise applications.


Prerequisites: knowledge of Operating Systems basics and synchronization techniques, C, and mastering of Java.

News/Alerts

~~~~~~~~~~~~~~~

  • IMPORTANT: following the official indications, the oral exams in the Summer session 2022 will be held in presence (pls see the exams portal). The project presentations will keep being given remotely on Teams.

Schedule

~~~~~~~~~~~~~~~

First lecture on Sept. 25th 2023, Mon.


Monday Tuesday Wednesday Thursday Friday
14:00-17:00
SI 5
15:00-17:00
ADII 1

The lectures' schedule and relative updates, as well as exam dates, are available on a public Google Cal, which can be imported using its ICS address.

Syllabus

~~~~~~~~~~~~~~~

A detailed description is available via the record of lessons - see the relative entry in the upper menu.
Hereafter, a preliminary, tentative categorized list of the class topics is presented (it does not necessarily correspond to the order of presentation).

  • Introduction
    • Notion of concurrency
    • Ordering of activities
    • Recall: Processes and Treads
      • Thread Pooling and Java Executors
      • Futures for Asynchronous Evaluation
      • Java Synchronizers
    • Parallelization and Speedup
    • Models and Paradigms: Shared Memory vs. Message Passing
    • Functional Programming and Concurrent Programs
  • Message-Passing Model
    • Models for Distributed Systems
    • Asynchronous and Synchronous Models
      • Process Addressing and Channels
      • Unblocking and Blocking Constructs
      • (Guarded Commands)
      • Example: Bounded Buffer in the Asynchronous Model
      • The Actor Model
    • Logical Time and Causality
      • The Happened Before Relation
      • Lamport Timestamps (partial/total order)
      • Vector Timestamps (with properties), Consistent Cuts
      • Physical Clock Synchronization - Concepts and Algorithms (not done in a.y. 2021/22)
    • Erlang, a Concurrent Language with Message-Passing
      • Basic Concepts of Functional Concurrent Programming
      • The Erlang System
      • Erlang Sequential Programming
      • Erlang Processes and Message Passing
      • Shaping Client-Server Interaction
      • OTP: Ideas for Middleware Support
      • Distribution
      • (Distributed) Error Handling
    • Distributed Algorithms
      • Distributed Mutual Exclusion
        • Centralized Solution
        • Ricart-Agrawala Algorithm, Token Ring Solution
      • Dealing with Faults
        • Faults Models
        • Election: Ring Based and Bully Algorithm
        • Basic Multicast
  • Communication APIs and Frameworks
    • Message Passing APIs
    • Direct and Indirect Communication
      • RPC - Remote Procedure Call
        • Request-Reply Protocols, Idempotent Operations, Call Semantics
        • Interface Description Languages
        • RPC Implementation
      • RMI - Remote Method Invocation
        • Remote Interfaces and Remote References
        • Architecture: Servants and Location Services
        • From Ordinary to Distributed Garbage Collection
        • Remote Class Loading
      • Message Oriented Middleware
        • Message Queues and Publish-Subscribe Systems
        • JMS
    • Web Services
      • SOAP-based Web Services
      • RESTful Web Services and REST resource management; JSON
  • Frameworks for Distributed Applications
    • Basic Patterns and Architectures
      • 3-tier Architecture
      • Container Pattern and Interception
      • MVC - Model View Controller
    • Web Applications
      • Architecture of a Web Server
      • State and Session Management
      • Java Servlets
        • Lifecycle and Service Methods
        • Classes, Configuration, and Deployment
        • Servlet Filters; Concurrency Issues
        • Java Server Pages and template systems
      • Deployment Issues
    • Distributed Components
      • Application Servers
      • EJBs - Enterprise Java Beans
        • Session EJBs: Stateless and Stateful
        • Management Strategies and Implementation
        • Pooling and Passivation
        • EJB Interfaces, Lookup, and JNDI

Reference Material

~~~~~~~~~~~~~~~

All the course contents are covered within the textbooks and other material reported hereafter. These references can also be taken as suggestions for in-depth discussions on class topics.
Assorted material will be possibly posted hereafter throughout the course.

Books

Title Authors Reference Notes
Operating System Concepts, 10th ed. Abraham Silberschatz, Peter B. Galvin, Greg Gagne Wiley
ISBN: 978-1-119-32091-3
LINK A classical resource on OSs, discussing classic concurrency problems as well.
It covers background topics.
Distributed Systems - Concepts and Design, 5th ed. George Coulouris, Jean Dollimore, Tim Kindberg, Gordon Blair Addison-Wesley
ISBN10: 0132143011
LINK A comprehensive overview of distributed systems, addressing both theoretical and architectural issues.
Learn You Some Erlang for Great Good! Fred Hebert No Starch Press
ISBN-13: 9781593274351
LINK A beginner's tutorial to Erlang Programming; online free version available.
It covers also several Erlang details not presented in the course.

Miscellanea

Material is currently made available on the MS Teams group for the course.
[ ... ]

Classwork Material

~~~~~~~~~~~~~~~

All the material for lab sessions is provided on the MS Teams group for the course.

[ ... ]

Final Exam

~~~~~~~~~~~~~~~

The final test is organized as follows:

  • development of a project; specifications must be agreed upon with the teacher; the finalized work must be shown to the teacher for final approval prior to the oral exam (not in the same date)
  • oral exam (possibly with written exercises), on all the topics covered by the course.

To take the oral exam, it is required a prior subscription on the "Exams Portal".

Final Project

~~~~~~~~~~~~~~~

Students are required to complete a project - namely, a working software system - before getting admitted to the oral exam. Once completed, the project has to be officially presented to the teacher, by appointment. The project should be developed by preference in a team (up to 3 people).
The project subject and structure have to be freely proposed by the student(s), who will draw down the relative specification document, to be approved by the teacher.
Within the project, it is required to deal with issues on synchronization/coordination, and on communication, proposing proper solutions. Such issues have to be clearly identified in the project specification document.
The student is free to make use of assorted technological solutions, whose adoption must be justified at project presentation time. In any case, the sofware system must include a portion written in Erlang.
At project presentation, a working instance of the developed application must be shown, deployed over multiple nodes; the accompanying documentation will be handed over to the teacher.
English is the only language to be used in any document.

~~~~~~~~~~~~~~~

The following web references can be useful for practical programming.

NetBeans IDE Link
IntelliJ IDEA IDE Link
Eclipse IDE Link
Cheat Sheet for JCF Link
Cheat Sheet for Java8 Streams Link
Maven Link
Erlang Link
Akka Link

Lectures - Video Recordings

~~~~~~~~~~~~~~~

The service is available only for registered users.

 

UNIPI Logo

 

DII Logo