Olivier Lemer
Hide les notes
H
Liste des raccourcis clavier
?
Naviguer dans les slides
Voir toutes les slides
Esc
Cours - mardi, 14h45-16h15, en J04.
Labos - mercredi, 13h00-14h30, en B23.
Horaires
Notation
Matériel du cours
Centralisé sur sdr-classroom.github.io.
Labos
Données et rendus sur GitHub.
Discussions
Feedback, questions, suggestions sur Teams.
4 semaines par labo, par groupe de deux.
Quiz individuel en fin de chaque labo
Prouvez-nous que vous comprenez votre solution et ses choix.
1. Reliable Broadcast et Mutex
2. Élection
3. Synchronisation
4. Consensus
Ma vision
Utiliser la bonne syntaxe
(dépend du langage, peu de réflexion)
Utiliser des if et des boucles
(code linéaire simple, niveau introductif)
Réaliser une logique
(i.e. implémenter un algorithme donné)
Réaliser une abstraction
(i.e. comment la boite noire fonctionne pour satisfaire sa spécification)
Transformer un besoin en abstractions et leurs interactions
(i.e. définir les boites noires, et comment elles intéragissent)
Compétences des LLM
Ce qui fera de vous de bon.ne.s ingénieur.e.s
Ça tombe bien
Ce qui vous fera sortir du lot, c'est ce que vous ne pourrez pas déléguer aux IAs.
Votre objectif
Cherchez à sortir du lot.
Construisez-vous une valeur ajoutée aux vibe-coders.
Être capable de dire
"Non, cette abstraction a trop de responsabilités, il faut..."
"Non, cet import est superflu, utilisons plutôt..."
"Attention, on commence à dépendre de détails d'implémentation..."
"Attention, ce module fait une supposition sur celui-ci qui..."
"Non, cette fonction devrait retourner une promesse, parce que..."
...
Introduction - Définitions, fiabilité, diffusion et pannes
1.
Estampilles - Horloges logiques, exclusion mutuelle
2.
Jetons - Exclusion mutuelle
3.
Diffusion - Élection de leader
4.
Sondes et échos - Exemples et synchroniseurs
5.
Synchronisation et battements - Exemples
6.
Consensus (!)
7.
Définition d'un système distribué et réparti
Classes de fiabilité
Reliable Broadcast (Diffusion Fiable)
Si le temps le permet :
Définition des pannes
Cours
Système s'executant sur
S'emploie plus quand on parle des taches et leur répartition.
S'emploie plus quand on parle de l'architecture du système.
Système dans lequel il n'existe pas d'autorité centrale responsable du contrôle du système.
Relativement interchangeables.
Résilience à
Lorsque deux taches sont en cours d'execution au même instant.
Question : Quelles unités de traitement executent ces taches ?
Threads
→ Système multi-threaded
Machines
→ Système distribué
Threads
(e.g. CPU multi-coeur)
(e.g. Réseau de PC interconnectés)
Difficulté : Coordonner les unités de traitement.
Execution parallèle
Time
Lorsque deux taches sont en cours d'execution au même instant.
Parallélisme
Time
→ T1, T2 et T3 s'exécutent de manière concurrente, mais pas toujours parallèle.
Concurrence
Lorsque deux taches ont progressé dans un interval commun.
T1
T2
T2
T3
Catégorisation des machines selon 2 axes : flots de données, et
(i.e. contrôle)
flots d'instructions.
Flot d'Instructions (Contrôle)
Flot de Données
Single
Multiple
Single
Multiple
| SISD | MISD |
| SIMD | MIMD |
Banque d'instructions
PU
Banque de données
(a.k.a. Architecture Von Neumann (1945))
un seul flot séquentiel d'instructions
un seul flot de données
une seule unité de traitement
Banque d'instructions
PU
Banque de données
Un seul flot séquentiel d'instructions,
partagé par tous les PU.
Plusieurs flots de données, un par PU.
Plusieurs unités de traitement
PU
PU
Par exemple pour calcul scientifique (vecteurs et matrices)
Banque d'instructions
PU
Banque de données
Plusieurs flots d'instructions, un par PU.
Un seul flot de données,
partagé par tous les PUs.
Plusieurs unités de traitement.
PU
PU
Architecture théorique...
Banque d'instructions
PU
Banque de données
Plusieurs flots de données, un par PU.
Plusieurs unités de traitement
PU
PU
L'exécution peut ici être asynchrone. L'enjeu est la synchronisation des PUs.
Plusieurs flots d'instructions,
parfois partagés par plusieurs PUs.
PU
Catégorisation des machines selon 2 axes : flots de données, et
(i.e. contrôle)
flots d'instructions.
Flot d'Instructions (Contrôle)
Flot de Données
Single
Multiple
Single
Multiple
| SISD | MISD |
| SIMD | MIMD |
Distributed memory
Shared memory
Banque d'instructions
PU
PU
PU
PU
Communication inter-processeurs via la mémoire commune.
Banque de données
Banque d'instructions
PU
Main memory
PU
PU
PU
Cache
Cache
Cache
Cache
Bus Arbiter
System Bus
I/O
Communication inter-processeurs via la mémoire commune.
Banque d'instructions
PU
PU
PU
PU
Communication inter-processeurs via le réseau.
Banque de données
Banque d'instructions
Banque de données
(e.g. Massively Parallel Processing (MPP))
Ordinateur
Ordinateur
Ordinateur
Plusieurs ordinateurs distincts.
Interconnection par réseau.
Par exemple
Matériel vs. logiciel
"Quantité et qualité des liens entre éléments."
Couplage faible
Couplage fort
Beaucoup de liens, rapides.
Peu de liens, lents.
Shared Memory MIMD
Distributed Memory MIMD
Peut partager beaucoup, rapidement.
Peut partager peu, avec delai.
En fonction du couplage de l'architecture matérielle ciblée,
une même application devra être conçue très différemment.
Ôyez, concepteur.rices !
Couplage faible
Couplage fort
Beaucoup de liens, rapides.
Peu de liens, lents.
"Quantité et qualité des liens entre éléments."
Module A
Module B
getX
setX
incX
setY
Module A
Module B
buy
Généralement, on vise un couplage logiciel faible :
Execution réseau :
couplage matériel faible,
donc coût de communication élevé,
donc couplage logiciel fort "couteux".
Ordinateur
Ordinateur
Ordinateur
Ordinateur
vs
Logiciel réseau simple
Logiciel réseau faiblement couplé
Logiciel réseau réparti
(telnet, wget, ssh)
(NFS, iCloud Drive)
(calcul distribué)
Conception logicielle combat ce couplage
Pour le client, une API simple, inconsciente de la répartition.
Client
Serveur
Serveur
Serveur
Système réparti
Les serveurs offrent un service indépendant de la répartition.
Une couche logicielle gère l'aspect réparti.
Le challenge est d'optimiser le couplage logiciel effectif pour assurer une performance élevée.
On pourrait donc dire qu'un système réparti est
l'execution d'une logique nécessitant un couplage logiciel fort,
sur du matériel limité à un couplage matériel faible.
Un bon système réparti
Qu'est-ce qu'un bon système réparti ?
1. Abstraction
2. Fiabilité
3. Performance
4. Dimensionnement
Qu'est-ce qu'un bon système réparti ?
1. Abstraction
Emplacement des processus et données
Pas d'adresses physiques des machines ou des données.
Migration des processus et données
Déplacement de ressource (processus, données) invisible.
Duplication des données
Gestion implicite des copies éventuelles.
Cohérence des données
Gestion implicite de la concurrence.
Qu'est-ce qu'un bon système réparti ?
1. Abstraction
2. Fiabilité
3. Performance
4. Dimensionnement
(Emplacement, Migration, Duplication, Cohérence)
Qu'est-ce qu'un bon système réparti ?
2. Fiabilité
Disponibilité
Résilience aux pannes de machines et de réseau
Cohérence
État toujours correct (récupération après panne, résistance aux attaques)
Qu'est-ce qu'un bon système réparti ?
1. Abstraction
2. Fiabilité
3. Performance
4. Dimensionnement
(Emplacement, Migration, Duplication, Cohérence)
(Disponibilité, Cohérence)
Qu'est-ce qu'un bon système réparti ?
3. Performance
Parallélisme maximal
Tirer profit du parallélisme, éviter qu'une machine soit en attente de travail.
Communication minimale
Diminuer le nombre d'échange de messages.
Tradeoff Performance-Fiabilité :
Garantir la fiabilité nécessite des protocoles limitant les performances.
Qu'est-ce qu'un bon système réparti ?
1. Abstraction
2. Fiabilité
3. Performance
4. Dimensionnement
(Emplacement, Migration, Duplication, Cohérence)
(Disponibilité, Cohérence)
(Parallélisme, Communication)
Qu'est-ce qu'un bon système réparti ?
4. Dimensionnement
Extensibilité
Ajouter une machine doit être possible et peu couteux.
Complexité algorithmique faible
Avoir plus de machines ne doit pas rendre le service notablement plus lent.
(scalability)
Ceci implique d'éviter les goulots d'étranglement, par exemple
Les algorithmes n'ont donc accès qu'à des informations partielles du système
Qu'est-ce qu'un bon système réparti ?
1. Abstraction
2. Fiabilité
3. Performance
4. Dimensionnement
(Emplacement, Migration, Duplication, Cohérence)
(Disponibilité, Cohérence)
(Parallélisme, Communication)
(Extensibilité, Complexité)
Copie du message
Dans les cas non-bloquants, le message est mis de coté (buffered) le temps de pouvoir être envoyé au destinataire, ou traité par le client.
Envoi bloquant
Client
Gestion réseau
Copie et envoi du message
Client
Gestion réseau
Copie du message
Envoi du message
Envoi non-bloquant
Client
Gestion réseau
Attente de réception et copie du message
Réception bloquante
Client
"Pas de message"
Attente de réception
Gestion réseau
Message reçu !
Réception non-bloquante