Unit Objective: Learn how to apply analysis and design methodologies to software development. More specifically, learn object-oriented modeling using the universal language UML.

Recommended prior knowledge: Algorithms, information systems, object-oriented programming.

Credits: 6

Coefficient: 4

This course provides a thorough exploration of the principles, architectures, and technologies that underpin modern distributed systems. It is designed to equip students with the theoretical knowledge and practical skills necessary to understand, design, and manage complex computing environments where components are spread across multiple networked computers.

The course begins by establishing the fundamental concepts of distributed systems, including their definition as collections of independent computers that appear as a single coherent system to the user. It emphasizes core characteristics such as decentralization, resource sharing, scalability, and transparency (in access, location, replication, and failure). Students will learn why these systems are essential for building scalable, cost-effective, and collaborative applications like cloud services, e-commerce platforms, and social networks.

A significant focus is placed on understanding various architectural models. The course covers the classic Client-Server model, Peer-to-Peer (P2P) networks known for their fault tolerance, and modern paradigms like Microservices and Service-Oriented Architecture (SOA). Students will also explore distributed object models (e.g., CORBA, RMI) and event-driven architectures based on publish/subscribe systems.

The curriculum delves into the critical mechanisms of communication and protocols, explaining how processes interact using Remote Procedure Calls (RPC), message queuing, and middleware. Key protocols such as TCP/IP, HTTP/HTTPS, and WebSocket are examined in detail, highlighting issues related to network latency and the trade-offs between synchronous and asynchronous communication.

Students will study the central challenge of maintaining data integrity through consistency management. This includes learning about different consistency models (Strong, Eventual, Causal, Read-Your-Writes), synchronization techniques like distributed locks and transactions (ACID vs. BASE principles), and strategies for conflict resolution.

The course places strong emphasis on fault tolerance and reliability. Students will learn about failure detection using heartbeat and timeout mechanisms, replication strategies (Primary-Backup, Active, Passive), and consensus algorithms like Paxos and Raft, which are crucial for building resilient systems that can withstand component failures.

Security is addressed as a paramount concern in distributed environments. The course covers essential topics such as distributed authentication (OAuth, OpenID), encryption techniques (symmetric and asymmetric), role-based access control, and security policy enforcement to protect against unauthorized access and data breaches.

Finally, the course applies theoretical concepts to real-world scenarios through case studies and modern technologies. Students will examine Cloud Computing (IaaS, PaaS, SaaS), containerization with Docker, orchestration with Kubernetes, and large-scale systems from companies like Google and Amazon. The evolution of distributed computing—from early networks to grid, cloud, and edge/fog computing—is also discussed to provide historical context and insight into future trends.

This structured approach combines theoretical lectures with hands-on projects, practical exercises, and real-world case studies, ensuring students develop both a deep comprehension of the subject and the technical capabilities to implement robust distributed solutions.