Ce cours de spécialité prépare l’ingénieur en génie logiciel à concevoir et programmer des applications réparties : services web et mobiles à forte charge, plateformes de paiement, systèmes d’information multi-sites. Il combine fondements théoriques (temps logique, exclusion mutuelle, consensus, cohérence) et pratique de la programmation (threads, sockets, RPC/gRPC, messagerie) au travers de travaux pratiques guidés.
Objectifs d’apprentissage
- Caractériser un système distribué et évaluer le gain d’une parallélisation (Amdahl, Gustafson) ;
- Programmer des échanges entre processus par sockets, RPC/gRPC et API, en maîtrisant les sémantiques d’appel ;
- Calculer des horloges logiques et appliquer des algorithmes d’exclusion mutuelle et d’élection ;
- Choisir un modèle de réplication et de cohérence (CAP, quorums) ;
- Concevoir une application tolérante aux pannes (messagerie, idempotence, 2PC/Saga, consensus).
Prérequis
Programmation orientée objet (Java ou Python), systèmes d’exploitation (processus, threads), réseaux TCP/IP, bases de données transactionnelles.
Plan du cours
- Leçon 1 — Systèmes distribués, concurrence et parallélisme
- Leçon 2 — Communication : sockets, RPC et services distants
- Leçon 3 — Temps, horloges logiques et coordination répartie
- Leçon 4 — Middleware, réplication et tolérance aux pannes
Modalités d’évaluation
Volume horaire : 20 h de cours magistraux, 10 h de travaux dirigés, 20 h de travaux pratiques, 50 h de travail personnel (5 crédits). Évaluation : contrôle continu (TP guidés notés, exercices d’algorithmique répartie, quiz) et examen terminal écrit.
Bibliographie
- Andrew S. Tanenbaum, Maarten van Steen, Distributed Systems, 3e éd., distributed-systems.net.
- George Coulouris, Jean Dollimore, Tim Kindberg, Gordon Blair, Distributed Systems: Concepts and Design, Pearson.
- Martin Kleppmann, Designing Data-Intensive Applications, O’Reilly.
- Brian Goetz et al., Java Concurrency in Practice, Addison-Wesley.
- Leslie Lamport, « Time, Clocks, and the Ordering of Events in a Distributed System », Communications of the ACM, 21(7), 1978.
