Person in charge : Sylvain Lefebvre
Prerequisite : -
Time : 7*3h
Credit units: 2.5
Assessment : Weekly Assignements and project
ECTS : 5 credits


Modern software systems and services have to be integrated in parallel, asynchronous and distributed execution environments.

This evolution stems from several factors:

  • Computing hardware is now parallel by default (multi-core architectures, GPGPUs),
  • Numerous services with high added value require fast parallel computations on a large quantity of data,
  • These services have to be deployed on clouds ou virtualized and shared platforms, and these application have to be scalable to take advantage of these environments.

This class exposes the underlying principles of such application designs, and explores the development of such an application through a project.

Learning Objectives


Design and development of distributed applications and architectures. Students will be able to analyse eexisting distributed architectures through several case studies, and acquire knowledge about the building blocks of these applications.

They will be able to use these building blocks in order to use them efficiently in designing, correcting or writing a distributed application.



  • Typology of distributed systems
  • Distributed applications properties
    • interoperability
    • scalability / elasticity
    • load balancing
    • consistency
    • fault tolerance
  • Communication
    • Protocols
    • Topologies
  • Concurrent programming
    • Concurrency models
    • Concurrent application patterns
  • Distributed Algorithms
  • Distributed application patterns


  • Distributed applications design
  • Concurrent and parallel programming in Java



  • Distributed Systems: Principles and Paradigms (2nd edition), 2006 Andrew S. Tanenbaum, Maarten Van Steen, ed. PEARSON
  • Distributed Systems: Concepts and Design (5th Edition), 2011 George Coulouris, Jean Dollimore, Tim Kindberg, Gordon Blair, ed. PEARSON
  • The Architecture of Open Source Applications: ouvrage collectif.
  • Java Concurrency in Practice, 2006, Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, Doug Lea