École Privée d’Ingénierie du Niger — L’école du nouveau monde

✉ elearning@epiniger.edu.ne    🌐 epiniger.edu.ne

Unité d’enseignement : Master GL · S4 · UE3 — Environnement de développement

  • Programmation distribuée

    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

    1. Leçon 1 — Systèmes distribués, concurrence et parallélisme
    2. Leçon 2 — Communication : sockets, RPC et services distants
    3. Leçon 3 — Temps, horloges logiques et coordination répartie
    4. 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.