Introduction aux algorithmes distribués
Introduction aux algorithmes distribués
distribués de base
Nabil Abdennadher
[Link]@[Link]
Infrastructure
2
Plan
• Hypothèses de travail
• Généralités
• Collecte (Convergecast)
• Diffusion (Broadcast)
• Construction d’arbres de recouvrement
• Identification des noeuds d’un réseau
• Calcul du plus court chemin
• Algorithme d’élection
• Algorithmes de recherche
Hypothèses de travail
4
Hypothèses de travail: Routage
6
Flux de contrôle: Store and forward
8
Flux de contrôle: flow control (wormhole
routing)
Plan
! Hypothèses de travail
! Généralités
! Collecte (Convergecast)
! Diffusion (Broadcast)
! Construction d’arbres de recouvrement
! Identification des noeuds d’un réseau
! Calcul du plus court chemin
! Algorithme d’élection
! Algorithmes de recherche
10
Objectifs
11
Généralités
12
Template d’un algorithme distribué
• Task_t
• Faire un traitement d’intialisation
• Envoyer un message à un sous ensemble de Outt (peut
être l’ensemble vide)
• Répéter
• A la réception d’un message sur un canal c1 (de intt) et Cond1 "
• Faire un traitement
• Envoyer un message à un sous ensemble de Outt
• ou …
• A la réception d’un message sur un canal cn (de intt) et Condn "
• Faire un traitement
• Envoyer un message à un sous ensemble de Outt
• Jusqu’à (une condition de fin)
13
Remarques …
• Condition d’arrêt
• La tâche est capable de « détecter » la condition d’arrêt à partir des
messages qu’elle reçoit
• La condition d’arrêt suppose aussi que la tâche ne reçoit plus de
messages
• guard " command
• La commande est exécutée lorsque « guard » est prêt: message
reçu et condition booléenne Condi vérifiée
• Un seul « guard » est exécuté à chaque itération
• En cas de présence de plusieurs « guard », un est sélectionné au
hasard
• En cas d’absence de « guard », la tâche ne fait rien
14
Encore des remarques …
15
Plan
! Hypothèses de travail
! Généralités
! Collecte (Convergecast)
! Diffusion (Broadcast)
! Construction d’arbres de recouvrement
! Identification des noeuds d’un réseau
! Calcul du plus court chemin
! Algorithme d’élection
! Algorithmes de recherche
16
Qu’est ce qu’un convergecast ?
17
18
Exemple d’arbre de recouvrement
Racine
19
Convergecast : Exemple
nr nr
n4
D5 D6
n6
D1 n5
Liens du AR
D3
D2 Liens non AR
n1 n1
Le noeud a reçu tous
n2 n3 les messages n2 n3
Le noeud n’a pas encore
reçu tous les messages
20
Convergecast : Algorithme
21
Convergecast : Complexité
• n – 1 messages
• n opérations
22
Plan
• Hypothèses de travail
• Généralités
• Collecte (Convergecast)
• Diffusion (Broadcast)
• Construction d’arbres de recouvrement
• Identification des noeuds d’un réseau
• Calcul du plus court chemin
• Algorithme d’élection
• Algorithmes de recherche
23
24
Broadcast avec arbre de
recouvrement : Exemple
nr nr
D D D D
Liens du AR
Liens non AR
noeud racine
25
• Nœud racine nr
• Envoie la donnée D à tous les fils (arbre AR)
• Noeuds ni (i ≠ r)
• A la réception de la donnée D de la part du père
• Si ni n’est pas un nœud feuille
• Envoyer D à tous les fils de ni
26
Broadcast avec arbre de
recouvrement : Complexité
• Chaque noeud :
• Reçoit un message de son père (sauf la racine)
• Envoie un message à ses fils (arbre AR)
27
D
noeuds possédant D
noeud ne possédant pas D
28
Première vague : générée par N0
29
• atteinti = faux;
• Si ni appartient à N0
• atteinti = vrai
• Envoyer D à tous les voisins directs (vi)
30
Broadcast par vagues : Complexité
31
32
Broadcast par vagues avec
accusé de réception
33
34
Broadcast par vagues avec accusé de
réception : Algorithme
• Nombre de messages : 2m
• 2m – n + 1
• En plus de l’accusé de réception : n – 1 (nombre de
liens dans l’arbre construit)
• Nombre “d’opérations” : n
36
Broadcast par vagues avec ou sans
accusé de réception : Non déterminisme
Exécution 2
Exécution 1
37
38
Plan
• Hypothèses de travail
• Généralités
• Collecte (Convergecast)
• Diffusion (Broadcast)
• Construction d’arbres de recouvrement
• Identification des noeuds d’un réseau
• Calcul du plus court chemin
• Algorithme d’élection
• Algorithmes de recherche
39
Trois algorithmes
40
Exemple
nr
M : Demande d’adoption R
nr P : Salut papa
M P R : Non ! Tu n’es pas papa
M M P
P
M M
M M
M
Liens du AR
Liens non AR
Le noeud a reçu
le message M
Le noeud n’a pas
encore reçu M
41
Structure de données
42
Les messages
43
44
Algorithme (exécuté par ni , i ≠ r)
• Répéter
• A la première réception de M de la part de nj
• ni envoie un message <P> à nj
• parent = nj
• ni envoie un message <M> à tous les voisins autres que nj
• Pour les autres messages <M> reçus
• ni envoie le message <R> à l’émetteur
• Pour un message <P> reçu
• Actualiser la liste des processus fils : F
•?
• Pour un message <R> reçu
• Actualiser la liste des processus non fils : NF
• Jusquà (condition d’arrêt)
45
Test d’arrêt
pére
46
Remarques
47
Trois algorithmes
48
Structure de données
49
Algorithme
50
Algorithme … suite
• Au niveau d’un noeud ni
• A la réception de <M> de la part de nj
• si parent = NULL /* Premier Message M reçu */
• parent = nj
• Enlever le nœud nj de NE
• si NE ≠ NULL
• Choisir un nœud nk et l’enlever de NE
• Envoi <M> à nk
• sinon /* Le Message M reçu n’est pas le premier */
• ni envoie le message <R> à l’émetteur
• A la réception de <P> ou <R> de la part de nj
• si le message reçu est <R> alors ajouter nj à NF
• si le message reçu est <P> alors ajouter nj à F
• si NEi ≠ NULL
• Choisir un nœud nk et l’enlever de NE
• Envoyer <M> à nk
51
Test d’arrêt
52
Trois algorithmes
53
Algorithme
56
Algorithme … suite (au niveau de ni)
Test d’arrêt
père
58
Plan
! Hypothèses de travail
! Généralités
! Collecte (Convergecast)
! Diffusion (Broadcast)
! Construction d’arbres de recouvrement
! Identification des noeuds d’un réseau
! Calcul du plus court chemin
! Algorithme d’élection
! Algorithmes de recherche
59
Problématique
• Objectif
• Disposer d’une vue du réseau au niveau de chaque
nœud
• Chaque nœud s’identifie aux autres :
• Type, Processeur, OS, performance, ressources, etc.
• Pourquoi ?
• Tolérance aux pannes : panne de certains nœuds du
réseau
• Gérer la qualité de service (Quality of Service)
• Choix du meilleur nœud pour un service donné
60
Solutions
• 1ère solution
• Exécuter séquentiellement l’algorithme Broadcast avec
ACK n fois
• Chaque nœud envoie son identification aux autres
• 2ème solution
• Exécuter en parallèle l’algorithme Broadcast avec ACK:
Algorithme Test_Connectivity (TC)
61
Algorithme TC : Principe
• Algorithme Test_Connectivity
• Exécution en parallèle de l’algorithme Broadcast avec
accusé de réception
• Génération de n arbres de recouvrement (AR)
• Chaque nœud envoie son identificateur id à tous ses
voisins
• Les voisins propagent l’id reçu vers tous les nœuds
voisins (sauf le nœud émetteur)
62
Algorithme TC
63
Algorithme TC : Structure de
données
64
Algorithme TC
• ni appartient à N0
• initi := vrai;
• atteinti (i) := vrai;
• Envoyer idi à tous les nœuds de vi
65
Algorithme TC … Suite
• Répéter
• A la réception de idk de la part de nj
• si non (initi) // ni envoie ses informations
• initi := vrai; atteinti (i) := vrai;
• Envoyer idi à tous les nœuds de vi
• counti (k) := counti (k) + 1;
• si non (atteinti (k))
• atteinti (k) := vrai
• parenti (k) := nj
• Envoyer idk à tous les voisins directs de ni ≠ nj
• si (counti (k) = |vi|) et (parenti (k) ≠ NULL)
• Envoyer idk à parenti (k)
67
Plan
! Hypothèses de travail
! Généralités
! Collecte (Convergecast)
! Diffusion (Broadcast)
! Construction d’arbres de recouvrement
! Identification des noeuds d’un réseau
! Calcul du plus court chemin
! Algorithme d’élection
! Algorithmes de recherche
68
Calcul des plus courts chemins :
Calcul_PCC
69
Algorithme Synchrone :
S_Calcul_PCC
70
Algorithme Synchrone :
S_Calcul_PCC
71
• disti (k) = t ;
• firsti (k) = nj; seti(t)
ni
• seti(t) = seti(t)+{nk}
• Finpour
Version asynchrone …
74
Structure de données (A_Calcul_PCC)
• Initialement, statei = 0
77
Algorithme A_Calcul_PCC
(exécuté par tous les ni)
• Hypothèses de travail
• Généralités
• Collecte (Convergecast)
• Diffusion (Broadcast)
• Construction d’arbres de recouvrement
• Identification des noeuds d’un réseau
• Calcul du plus court chemin
• Algorithme d’élection
• Algorithmes de recherche
79
Algorithmes d’élection
80
Algorithme S_Elect_Leader
• 2ème solution
• Les nœuds candidats sont ceux qui désirent être leaders
• Chaque nœud envoie son identifiant (id) à un seul (20)
destinataire, puis à 2 (21) destinataires, puis à 4 (22)
destinataires, etc.
• Lors de la kéme étape, un nœud envoie son id à 2k-1
destinataires
• Pour envoyer à tous les nœuds, il faut log(n) étapes
• Complexité
• O(n log(n)) pour les messages
• O(n) pour le traitement
81
Algorithme S_Elect_Leader
82
Algorithme d’élection: S_Elect_Leader
• Structure de données
• candidati
• Initialisé à vrai pour les nœuds de No, à faux pour les autres
• triedi(j)
• concerne les nœuds appartenant à vi. Il est à vrai pour les
voisins à qui ni a déjà envoyé un message, faux sinon
• owneri
• Propriétaire du nœud ni, initialisé à NULL
83
Algorithme S_Elect_Leader
(exécuté par tous les ni)
• Initialisation
• t = 0; // horloge ou pulsation
• MSGi = {};
• Pour les nœuds candidats (appartenant à No), faire
• candidati = true
• owneri = idi
• Choisir un nœud nj de vi
• Envoyer capture(idi) à nj
• t = t + 1;
84
Algorithme S_Elect_leader
(exécuté par tous les ni)
• t impair:
• Recevoir MSGi //union des captures reçus
• Sélectionner nk tel que idk >= idj, nj étant les nœuds
qui ont envoyé une demande de capture à ni.
• Si owneri < idk alors
• Si candidati alors candidati = faux;
• owneri = idk
• Envoyer ACK à nk
• t = t + 1;
85
Algorithme S_Elect_Leader
(exécuté par tous les ni)
• t est pair:
• Recevoir MSGi //union des ACK reçus
• Si candidati alors
• Si «le nombre de messages envoyés (captures) est supérieur
(strictement) à celui des ACK reçus»
• alors candidati = faux;
• sinon
87
Algorithme asynchrone
A_Elect_Leader
88
A_Elect_Leader : comment ça marche?
89
• ni demande la capture de nj :
• ni envoie à nj un message capture (leveli, idi )
• A la réception de ce message, nj effectue le test:
• Si (levelj, propriétairej) > (leveli, idi ) alors
• nj envoie un message nack à ni
• Sinon
• levelj = leveli
• Si nj est candidat
• nj n’est plus candidat
• nj envoie un message ack à ni
• A la réception du message ack, ni devient le propriétaire de nj.
90
A_Elect_Leader : comment ça marche?
91
A_Elect_Leader : Algorithme
• Structure de données
• candidati
• Initialisé à vrai pour les nœuds de No, à faux pour les autres
• triedi(j)
• concerne les nœuds appartenant à vi. Il est à vrai pour les voisins à
qui ni a déjà envoyé un message de capture, faux sinon
• propriétairei
• Propriétaire du nœud ni, initialisé à NULL
• leveli : log (ownsk) nk est le propriétaire de ni
• nb_capturési : nombre de nœuds capturés
• p_proriétairei: proprétaire potentiel du nœud ni
• p_capturéi: nœud en cours de capture par ni
92
A_Elect_Leader : Algorithme …
suite
• Si ni appartient à No
• candidati = vrai;
• owneri = idi
• ownsi = 0;
• leveli = 0;
• p_owneri = NULL
• p_capturéi = NULL
• On choisit un nœud nj appartenant à vi (vi contient les
autres nœuds du graphe puisque G est complet)
• triedi(j) = vrai
• Envoyer capture (leveli, idi) à nj
93
A_Elect_Leader : Algorithme …
suite
• A la réception de nack
• Si candidati alors candidati = faux;
• A la réception de check (j)
• Si candidati alors envoyer eliminate (leveli, idi) à nj;
95
A_Elect_Leader : Algorithme …
suite
96
A_Elect_Leader : Algorithme …
suite
• A la réception de ack ()
• nb_capturési = nb_capturési + 1;
• leveli = E [log(ownsi )];
• S = {nj appartiennent à vi tels que triedi(j) = faux}
• Si S ≠ {} alors
• On choisit un nœud de S : nj
• triedi (j) = vrai
• Envoyer capture (leveli, idi) à nj
97
Plan
• Hypothèses de travail
• Généralités
• Collecte (Convergecast)
• Diffusion (Broadcast)
• Construction d’arbres de recouvrement
• Identification des noeuds d’un réseau
• Calcul du plus court chemin
• Algorithme d’élection
• Algorithmes de recherche
98
Gnutella
Principe de recherche
• Une requête de recherche :
• Fichier recherché,
• Durée de vie (Time To Live : TTL)
•Site Gnutella
•Site Gnutella •3 •Client
•2
•3
•Site Gnutella
•2
•1 •Site Gnutella •3
•2
•Site Gnutella
•2
•Connexion Gnutella
•Fichier trouvé •Site Gnutella •2 •Site Gnutella
•x •TTL
•1
FreeNet
Réseau Freenet
•67 c
•55 b
•10 e •c
•55 b •67 c
•a •b •50 d
•98 d
•d
•Connexion Freenet
•f
•e •45 f
•45 f •98 d
•55 b •10 e
Principe de la recherche
Algorithme de recherche
•Recherche d’un document : clé = 50
•50 d •67 c
•55 b
•50 d •10 e •c
•55 b •67 c •2
•1 •3
•a •b •50 d
•Requête •98 d
•12
•11 •d
•7 •6 •4 •9
•Réponse positive
•Requête •10
•Réponse négative •f •5
•e •45 f
•Connexion Freenet •8
•45 f •98 d
•55 b •10 e
•50 d