Real time Distributed Applications Development

Lecturer (Coordinator):
Santiago Tapia
stapia@fi.upm.es
Lecturer:
Juan Pedro Brito
jp.brito@fi.upm.es

Semester

First semester

Credits

4 ECTS

Outline

A distributed application is a system consisting of one or more programs running on multiple devices connected to a communication network. If it also requires real-time capability (not strict, i.e., without critical deadlines), the communication and execution times of each program must be bounded and predictable. Hard real-time systems, where failing to meet a time constraint implies a critical failure, are excluded from this course.

Meeting real-time constraints is simpler with a low-level programming language; specifically, using C/C++ is almost mandatory since these are compiled languages that run natively (directly on the physical microprocessor). Between these two languages, C++ will be prioritized as it is an object-oriented language and more suitable for developing potentially very complex systems.

Developing software in C++, especially when the software must meet efficiency and execution time predictability criteria, requires mastering the language and the latest development tools. The course will cover language syntax, object-oriented design, software project compilation management, test automation, version control, software architecture (programs, dynamic libraries, plugins, etc.), all aiming to produce efficient, predictable, and reliable software.

The real-time restriction also generates restrictions with respect to communications. Again, it is not advisable to use middleware that has not been specifically developed for use in real time and that implies increasing the times (or making them unpredictable). In this sense, several middleware alternatives will be studied according to their characteristics and functionalities.

Learning goals

  • Understand the methodology, techniques, and tools for C++ software development, particularly those providing efficiency, predictability, and reliability
  • Apply the above knowledge to simple development cases
  • Understand key concepts regarding real-time distributed applications: synchronization, timing, events and their management, communication design patterns, etc.
  • Apply this knowledge to application development
  • Understand research challenges in the field of real-time distributed applications
  • Apply this knowledge to propose a research line in this area

Syllabus

  1. Introduction to Real-Time Distributed Applications
  2. Real-Time Software Development
    1. C++ Programming
    2. Software development tools
    3. Object-Oriented Design
    4. Applicability of Real-Time Constraints
    5. Automated Testing and Efficiency Analysis
    6. Software Modules: Libraries and Plugins
    7. Events: Synchronous and Asynchronous Methods, and Callbacks
  3. Middleware for Distributed Applications
    1. Architecture and Design Patterns for Communications
    2. Data Marshalling
    3. Real-Time Middleware Technologies
    4. Distributed Application Programming in C++
    5. Monitoring and Debugging: Logging Systems
    6. Quality of Service: Latency, Reliability, and Scalability in Distributed Systems

Recommended reading

  • Scott Meyers: "Effective C++", Addison-Wesley
  • Scott Meyers: "Effective Modern C++", Addison-Wessley, O’Reilly
  • George Coulouris: "Distributed System. Concepts and Design", Addison-Wesley
  • Pieter Hintjens: "0MQ – The Guide", O’Reilly

Lecture Theatre

A-6101

Tuition language

Spanish

Subject-Specific Competences

Code, description and proficiency level for each subject-specific competence
Code Competence Proficiency Level
CEM2 Analysis and synthesis of solutions to problems requiring innovative approaches to the definition of the computational infrastructure, processing and analysis of heterogeneous data types A
CEM4 Analysis and evaluation of several software-based systems construction and management engineering paradigms and approaches A
CEM6 Investigation of the main active research lines in the field of distributed computing paradigms, their practical applications and necessary infrastructure management C

Learning Outcomes

Code, description and proficiency level for each subject learning outcome
Code Learning Outcome Associated competences Proficiency level
RA-SRSD-41 Effectively apply software verification and validation techniques CEM4 A
RA-SRSD-60 Be able to understand research articles in distributed systems CGI23 C
RA-SRSD-88 Evaluate if a program has been adequately developed following a programming paradigm based on the problem statement CEM4 A
RA-SRSD-52 Be able to relate an emerging research line in distributed systems to the fundamentals of distributed systems CEM6, CGI23 C
RA-SRSD-49 Know the main active lines in distributed systems CGI23 P
RA-SRSD-36 Familiarity with the idea of design and implementation requirement CEM6, CG7 A
RA-SRSD-50 Be able to find and identify seminal articles in a research area in distributed systems CG13 C
RA-SRSD-51 Be able to study and analyse a new research area in distributed systems CG12, CG13 C
RA-SRSD-53 Be able to identify the main challenges addressed by an emerging research line in distributed systems CG12 C
RA-SRSD-15 Knowledge of techniques for proving code correctness CEM4 A
RA-SRSD-87 Model a program with the structure of a programming paradigm based on the problem statement CG4, CG7 A
RA-SRSD-14 Familiarity with the idea of design and implementation requirement CG7, CG8 A

Learning Guide

Learning Guide: Real time Distributed Applications Development