|Lecture hours||3 hours|
|Lab hours||2 hours|
|Digital resources||View on Aristarchus (Open e-Class)|
The course aims at introducing the student to the basic concepts and fundamental principles of Distributed Systems. Special emphasis is on analytical and critical thinking, providing at the same time an introductory practical experience in the development of distributed applications.
At the end of the course, students will be equipped with fundamental knowledge in distributed systems (see Course Content), which allows the critical deepening in the broad scientific domain of distributed systems, as well as the development of complex distributed applications.
Students will be capable of analyzing and solving problems in the broad spectrum of the distributed systems domain:
- Streaming communications and optimized distributed playback of multimedia content (minimum waiting time for smooth reproduction).
- Physical clocks synchronization using various algorithms.
- Assignment of Lamport logical, vector and causal clocks.
- Performing ordered multicast (total and causal).
- Executing distributed mutual exclusion and leader election algorithms.
- Concurrency control of distributed transactions (locks and pessimistic concurrency control).
- Calculation of distributed snapshots.
- Consistency control for distributed storage and use of distribution and consistency protocols.
- Fault tolerance evaluation in distributed systems, reliable group communication, distributed commit and recovery.
- Common data representation.
- Comparative evaluation of physical layer architectures for distributed systems.
- Performance evaluation, techno-economic and SWOT analysis of distributed systems.
- Performance optimization of distributed systems, masking communications behind computation.
In addition, students will be capable of analyzing, designing and evaluating complex distributed systems relying on fundamental algorithms and middleware mechanisms, as well as developing distributed system applications using frameworks and middleware for distributed systems, such as the procedural RPC and object oriented RMI frameworks, network programming sockets, MPI programming, the Hadoop and Spark modern development frameworks etc.
- Introduction to Distributed Systems
- Higher layer architecture, distributed systems transparencies, scalability, physical layer and operating system for distributed systems, middleware, synchronization semantics in communications, client-server model.
- Network protocols, request-reply protocol, RPC model, message passing, common data representation, DCE, RMI model, persistency and synchronization in communications sockets, MPI.
- Clock synchronization, logical (Lamport) time, total ordered mulicast, causal ordered multicast, distributed mutual exclusion, leader election, global states and distributed snapshots, distributed transactions.
- Fault tolerance
- Concensus and agreement in problemtic systems, reliable client-server communication, reliable communication in a group, distributed commit, recovery.
- Consistency and replication
- Data and client consistency models, distribution protocols, consistency protocols.
- Jana RMI object oriented distributed applications development platform
- RMI development synopsis, whiteboard and taskbag case studies
During the course, students are invited to develop a programming project, which helps them familiarize with the design and implementation of distributed systems.
- Tanenabum A. & Van Steen M. (2017): Distributed Systems, 3th Edition, Pearson Education, Inc.
- Coulouris G., Dollimore J., Kindberg T. (2011): Distributed Systems: Concepts and Design, 5th Edition, Addison Wesley.
- Cavouras Ι., Meles Ι., Xylomenos G., Roukounaki Α. (2011): Distributed Systems with Java: Computer Systems Vol. ΙΙΙ, Kleidarithmos Publishing (in Greek).
- Pacheco P. (2011): An Introduction to Parallel Programming, Elsevier, Inc.
- Papadakes S., Diamantaras Κ. (2012): Programming and Architecture of Parallel Processing Systems, Kleidarithmos Publishing (in Greek).