algorithmes distribues pour le big data @ devoxxfr 2015
TRANSCRIPT
![Page 1: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/1.jpg)
@doanduyhai #AlgosBigData
Algorithmes Distribués pour le BigData
@doanduyhai [email protected] Datastax Évangéliste technique Cassandra
![Page 2: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/2.jpg)
@doanduyhai #AlgosBigData
Programme Comptage de grands nombres avec HyperLogLog
Consensus distribué avec Paxos
2
![Page 3: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/3.jpg)
@YourTwitterHandle @YourTwitterHandle @doanduyhai #AlgosBigData
HyperLogLog Philippe Flajolet 2007
![Page 4: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/4.jpg)
@doanduyhai #AlgosBigData
Compter le nombre d’éléments distincts, en distribué, dans un ensemble de grande cardinalité
Le défi
4
![Page 5: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/5.jpg)
@doanduyhai #AlgosBigData
Compter le nombre d’éléments distincts, en distribué, dans un ensemble de grande cardinalité
Le défi
5
![Page 6: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/6.jpg)
@doanduyhai #AlgosBigData
Compter le nombre d’éléments distincts, en distribué, dans un ensemble de grande cardinalité
Le défi
6
![Page 7: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/7.jpg)
@doanduyhai #AlgosBigData
Quelques approches possibles
7
Technique Stockage requis Nb d’éléments estimés Marge d’erreur
Java HashSet 10 447 016 (10M) 67 801 0%
Linear Probabilistic Counter 3 384 (3k) 67 080 1%
HyperLogLog 512 70 002 3% Source: http://highscalability.com/
![Page 8: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/8.jpg)
@doanduyhai #AlgosBigData 8
Jouons un peu !
![Page 9: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/9.jpg)
@doanduyhai #AlgosBigData
Lancés de dé
9
0
2
4
6
8
10
12
14
16
18
20
1 2 3 4 5 6
100 lancés de dé
![Page 10: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/10.jpg)
@doanduyhai #AlgosBigData
Lancés de dé
10
0
20
40
60
80
100
120
140
160
180
200
1 2 3 4 5 6
103 lancés de dé
![Page 11: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/11.jpg)
@doanduyhai #AlgosBigData
Lancés de dé
11
0
20000
40000
60000
80000
100000
120000
140000
160000
180000
1 2 3 4 5 6
106 lancés de dé
![Page 12: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/12.jpg)
@doanduyhai #AlgosBigData
Avant HyperLogLog, il y avait … LogLog
Algorithme LogLog
12
![Page 13: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/13.jpg)
@doanduyhai #AlgosBigData
Algorithmesimplifié LogLog 1) Choisir une fonction de hachage H très distributive
2) Pour chaque élément observé (login, article_id, uuid …), appliquer H
3) Convertir le hash en séquence binaire
4) Déduire des séquences binaires, la cardinalité
13
0111010010101… 0010010010001… 1010111001100…
…
![Page 14: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/14.jpg)
@doanduyhai #AlgosBigData
Intuition LogLog Équi-probabilité: 50% des séquences commencent par 0xxxxx 50% des séquences commencent par 1xxxxx 1/4 des séquences commencent par 00xxxxx 1/4 des séquences commencent par 01xxxxx 1/4 des séquences commencent par 10xxxxx 1/4 des séquences commencent par 11xxxxx
14
![Page 15: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/15.jpg)
@doanduyhai #AlgosBigData
Intuition LogLog
15
000000…0001xxxxxxx
On repère le 1er bit mis à 1 à la position r à partir du début 000000001xxxx à r = 9 0001xxxxxxxxx à r = 4 000001xxxxxxx à r = 6
rang r
![Page 16: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/16.jpg)
@doanduyhai #AlgosBigData
Intuition LogLog
16
000000…0001xxxxxxx
Il y a 2r combinaisons de chaine de bits de longueur r
000…0001, 000…0010, 000…0011,…, 111…1111
rang r
![Page 17: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/17.jpg)
@doanduyhai #AlgosBigData
Intuition LogLog
17
Équi-probabilité:
1/2r des séquences commencent par 000000…0001xxx 1/2r des séquences commencent par 000000…0010xxx … 1/2r des séquences commencent par 111111…1111xxx
![Page 18: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/18.jpg)
@doanduyhai #AlgosBigData 18
Raisonnons à l’envers !
![Page 19: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/19.jpg)
@doanduyhai #AlgosBigData 19
Raisonnons à l’envers !
J’ai autant de chance de voir 000000…0001xxx que de voir 000000…0010xxx
que de voir 000000…0011xxx etc…
![Page 20: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/20.jpg)
@doanduyhai #AlgosBigData 20
Raisonnons à l’envers !
Si j’ai observé 000000…0001xxx je verrai probablement 000000…0010xxx
et également 000000…0011xxx etc…
![Page 21: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/21.jpg)
@doanduyhai #AlgosBigData 21
Raisonnons à l’envers !
Si j’ai observé 000000…0001xxx il y a probablement 2r séquences binaires de rang r …
![Page 22: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/22.jpg)
@doanduyhai #AlgosBigData 22
Raisonnons à l’envers !
Si j’ai observé 000000…0001xxx il y a probablement 2r séquences binaires de rang r …
cardinalité estimée
![Page 23: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/23.jpg)
@doanduyhai #AlgosBigData
Formule LogLog Cherchons la position 000…01xxx la plus longue observée parmi tous les séquences binaires
23
cardinalité n ≈ 2max(r)
![Page 24: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/24.jpg)
@doanduyhai #AlgosBigData
Problème avec LogLog Exemple: sur 1000 éléments distincts (210 = 1024)
0010000100xxxxxxxxxx 0011001010xxxxxxxxxx 0000000001xxxxxxxxxx … 000000000000001xxxxx à rang r = 15. Cardinalité = 215 = 32768 (FAUX !) … 1100110100xxxxxxxxxx
24
![Page 25: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/25.jpg)
@doanduyhai #AlgosBigData
Problème avec LogLog
25
Éléments exceptionels
![Page 26: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/26.jpg)
@doanduyhai #AlgosBigData
Approche HyperLogLog 1) Éliminer et lisser les éléments exceptionnels ☞ moyenne harmonique
26
H =n
1x1+1x2+...+ 1
xnSource: Wikipedia
![Page 27: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/27.jpg)
@doanduyhai #AlgosBigData
Approche HyperLogLog Ex: moyenne harmonique de 3, 6, 7, 2 et 120
Moyenne arithmétique = 51 …
27
H =5
13+16+17+112
+1120
≈ 6.80
![Page 28: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/28.jpg)
@doanduyhai #AlgosBigData
Approche HyperLogLog 2) Distribuer le calcul ("diviser pour mieux régner") ☞ appliquer LogLog à n buckets
28
101101000xxxxxxx p = longueur du préfix (ici 6) nombre de buckets = 2p (ici 64)
![Page 29: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/29.jpg)
@doanduyhai #AlgosBigData
Approche HyperLogLog 2) Distribuer le calcul ("diviser pour mieux régner")
29
000000xxx
B1 B2 B3 B32 B33 B34 B64 … …
000001xxx 000010xxx 010000xxx 010001xxx 010011xxx 111111xxx
Flux de données
![Page 30: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/30.jpg)
@doanduyhai #AlgosBigData
Approche HyperLogLog 3) Appliquer LogLog dans chaque bucket
30
101101 0000001xxx p = préfix du bucket
r = rang pour LogLog
![Page 31: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/31.jpg)
@doanduyhai #AlgosBigData
Approche HyperLogLog Pour chaque bucket i, on calcule la cardinalité estimée du bucket, Mi
31
Mi ≈ 2max(ri)
ri = rang maximal trouvé dans le bucket Mi
![Page 32: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/32.jpg)
@doanduyhai #AlgosBigData
Formule HyperLogLog Moyenne harmonique des Mi, H(Mi), par définition
32
H(Mi) ≈ n/b
n = nb total d’éléments distincts (cardinalité recherchée) b = nb de buckets
☞ n ≈ b・H(Mi)
![Page 33: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/33.jpg)
@doanduyhai #AlgosBigData
HyperLogLog, les maths
33
H (xi ) =b
1x1+1x2+...+ 1
xb
= b 11xii=1
b∑
"
#
$$$$
%
&
''''
H (xi ) = b1xi
i=1b
∑"
#$$
%
&''
−1
= b xi−1
i=1
b∑"
#$
%
&'−1
![Page 34: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/34.jpg)
@doanduyhai #AlgosBigData
HyperLogLog, les maths On remplace les xi dans la formule par Mi
34
H (Mi ) = b Mi−1
i=1
b∑( )
−1
On remplace les Mi dans la formule par 2max(ri)
H (Mi ) = b 2i−max(ri )
i=1
b∑#
$%
&
'(−1
![Page 35: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/35.jpg)
@doanduyhai #AlgosBigData
HyperLogLog, les maths On remplace dans la formule initiale n ≈ b・H(Mi)
35
n ≈αbb2 2−max(ri )
i=1
b∑$
%&
'
()−1
n = cardinalité estimée
b = nb de buckets rang max dans chaque bucket 𝛼b = constante correctrice
![Page 36: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/36.jpg)
@doanduyhai #AlgosBigData
Quelles applications ? Nb de visiteurs uniques sur une page web Nb de clicks uniques sur un article en ligne Top N éléments (visiteurs, articles, …) …
36
![Page 37: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/37.jpg)
@doanduyhai #AlgosBigData
Exemples d’implémentation Cassandra: estimer taille d’une table distribuée Redis: data structure de base DataFu Pig: UDF standard Twitter Algebird: algorithmes d’algèbre pour Storm & Scalding
37
![Page 38: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/38.jpg)
@YourTwitterHandle @YourTwitterHandle @doanduyhai #AlgosBigData
Paxos Leslie LAMPORT 1989
![Page 39: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/39.jpg)
@doanduyhai #AlgosBigData
Trouver un consensus dans un système distribué, en présence de pannes aléatoires(réseau, machine,…).
Le défi
39
![Page 40: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/40.jpg)
@doanduyhai #AlgosBigData
Trouver un consensus dans un système distribué, en présence de pannes aléatoires(réseau, machine,…).
Le défi
40
![Page 41: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/41.jpg)
@doanduyhai #AlgosBigData
Trouver un consensus dans un système distribué, en présence de pannes aléatoires(réseau, machine,…).
Le défi
41
![Page 42: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/42.jpg)
@doanduyhai #AlgosBigData 42
• protocole bloquant • intervention humaine si manager
down
2 phase commit ?
![Page 43: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/43.jpg)
@doanduyhai #AlgosBigData 43
• état incohérent possible si partition réseau
3 phase commit ?
![Page 44: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/44.jpg)
@doanduyhai #AlgosBigData 44
• 2 allers/retours • 3/4 rôles • Proposer/Leader • Acceptor • Learner
• A besoin d’un quorum (majorité stricte)
Paxos
![Page 45: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/45.jpg)
@doanduyhai #AlgosBigData
Paxos phase 1: prepare
45
Proposer/Leader
Acceptor
prepare(n)
Acceptor
Acceptor
Acceptor
Acceptor
prepare(n)
prepare(n)
n = numéro de séquence
Client
![Page 46: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/46.jpg)
@doanduyhai #AlgosBigData
Paxos phase 1: promise
46
Proposer/Leader
Acceptor
Acceptor
Acceptor
Acceptor
Acceptor
promise()
promise()
promise()
![Page 47: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/47.jpg)
@doanduyhai #AlgosBigData
Paxos phase 2: accept
47
Proposer/Leader
Acceptor
Acceptor
Acceptor
Acceptor
Acceptor
accept(n,val)
val = valeur du consensus
accept(n,val)
accept(n,val)
![Page 48: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/48.jpg)
@doanduyhai #AlgosBigData
Paxos phase 2: accepted
48
Proposer/Leader
Acceptor
Acceptor
Acceptor
Acceptor
Acceptor
accepted(n,val)
accepted(n,val)
accepted(n,val)
Client
![Page 49: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/49.jpg)
@doanduyhai #AlgosBigData
Paxos phase 2: learn
49
Proposer/Leader
Acceptor
Acceptor
Acceptor
Acceptor
Acceptor
Learner
Learner val
val
val
Client Learner
![Page 50: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/50.jpg)
@doanduyhai #AlgosBigData
Paxos phase 1: prepare
50
Le proposer choisit un nombre n (séquence toujours croissante)
Il envoie prepare(n) à un quorum d’Acceptors
Proposer/Leader prepare(n)
Acceptor
![Page 51: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/51.jpg)
@doanduyhai #AlgosBigData
Paxos phase 1: promise
51
Chaque acceptor, à la réception d’un prepare(n):
• s’il a déjà accepté un accept(m,valm) de la part d’un autre proposer avec m ≤ n ☞ retourne promise(n,(m,valm))
Proposer/Leader
Acceptor
promise(n,(m, valm))
![Page 52: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/52.jpg)
@doanduyhai #AlgosBigData
Paxos phase 1: promise
52
Chaque acceptor, à la réception d’un prepare(n):
• s’il n’a accepté aucune proposition encore (accept(?,?)) ou s’il a retourné une promesse avec m < n ☞ retourne promise(n, ∅) ET promet de ne plus accepter aucun prepare(m) ou accept(m,?) avec m < n
Proposer/Leader
Acceptor
promise(n,∅)
![Page 53: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/53.jpg)
@doanduyhai #AlgosBigData
Paxos phase 1: promise
53
Chaque acceptor, à la réception d’un prepare(n):
• s’il a déjà fait une promesse/accepté une valeur avec m > n ☞ ignore la requête. Il peut renvoyer un Nack également (optimisation)
Proposer/Leader
Acceptor
Nack
![Page 54: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/54.jpg)
@doanduyhai #AlgosBigData
Paxos phase 1: objectifs
54
Buts de la phase 1:
• découvrir toute proposition en cours pour la faire progresser
• bloquer toute ancienne proposition qui n’a pas abouti
![Page 55: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/55.jpg)
@doanduyhai #AlgosBigData
Paxos phase 2: accept
55
Le leader reçoit plusieurs promise(n,(mi,vali)):
• si tous les couples (mi,vali) reçus sont vides (promise(∅, ∅)), le leader peut envoyer accept(n,val) avec val de son choix
• extrait tous les couples (mi,vali) pour garder vali avec le mi le plus grand ET envoie accept(n,valmax(mi)
) au quorum d’acceptors
Proposer/Leader
Acceptor
accept(n,valmax)
![Page 56: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/56.jpg)
@doanduyhai #AlgosBigData
Paxos phase 2: accepted
56
Chaque acceptor à la réception d’un accept(n,val):
• s’il n’a fait aucune promesse avec m > n, retourne accepted()
• sinon, ignore la requête
Proposer/Leader
Acceptor
accepted(n,val)
![Page 57: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/57.jpg)
@doanduyhai #AlgosBigData
Paxos phase 2: learn
57
Chaque acceptor après avoir envoyé un accepted():
• envoie la valeur val choisie à une liste de learners (stockage durable)
Le consensus est atteint et a pour valeur val ! Ceci définit un tour de Paxos
![Page 58: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/58.jpg)
@doanduyhai #AlgosBigData
Limites du Paxos théorique
58
Une fois la valeur val choisie, on ne peut plus la modifier !
Besoin de faire un reset de val pour un autre tour de Paxos
Multi-Paxos
• plusieurs tours de Paxos en parallèle • chaque serveur peut devenir tour à tour Proposer, Acceptor & Learner
Fast-Paxos, Egalitarian-Paxos etc …
![Page 59: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/59.jpg)
@doanduyhai #AlgosBigData
Situations de conflits
59
Le dernier arrivé fait progresser une proposition "en cours"
a1
a2
a3
a4
a5
prepare(n1) promise(∅)
promise(∅)
promise(∅)
prepare(n1)
prepare(n1)
Légende message reçu message envoyé
accept(n1,a) prepare(n2)
prepare(n2)
prepare(n2)
promise(n2,(n1,a))
promise(∅)
promise(∅)
propose(n2,a)
propose(n2,a)
propose(n2,a)
accepted()
☠ ☠
accept()
accept()
accept()
![Page 60: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/60.jpg)
@doanduyhai #AlgosBigData
Situations de conflits
60
Annulation d’une promesse précédente
a1
a2
a3
a4
a5
prepare(n1) promise(∅)
promise(∅)
promise(∅)
prepare(n1)
prepare(n1)
Légende message reçu message envoyé
accept(n1,a)
prepare(n2)
prepare(n2)
prepare(n2)
promise(∅)
promise(∅)
promise(∅)
propose(n2,b)
propose(n2,b)
propose(n2,b)
accepted()
accepted()
accept(n1,a)
accept(n1,a)
accepted() ❌
Nack
accepted()
accepted()
![Page 61: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/61.jpg)
@doanduyhai #AlgosBigData
Situations de conflits
61
Inter-deadlock
a1
a2
a3
a4
a5
Légende message reçu message envoyé
prepare(n2)
prepare(n2)
prepare(n2)
promise(∅)
promise(∅)
promise(∅)
accept(n2,b)
accept(n2,b)
accept(n1,a)
accept(n2,b) Nack
Nack accept(n1,a)
accept(n1,a) prepare(n1) promise(∅)
promise(∅)
promise(∅)
prepare(n1)
prepare(n1)
prepare(n3) promise(∅)
promise(∅)
promise(∅)
prepare(n3)
prepare(n3)
…
…
…
![Page 62: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/62.jpg)
@doanduyhai #AlgosBigData
Situations de conflits
62
Inter-deadlock
a1
a2
a3
a4
a5
Légende message reçu message envoyé
prepare(n2)
prepare(n2)
prepare(n2)
promise(∅)
promise(∅)
promise(∅)
accept(n2,b)
accept(n2,b)
accept(n1,a)
accept(n2,b) Nack
Nack accept(n1,a)
accept(n1,a) prepare(n1) promise(∅)
promise(∅)
promise(∅)
prepare(n1)
prepare(n1)
prepare(n3) promise(∅)
promise(∅)
promise(∅)
prepare(n3)
prepare(n3)
…
…
…
![Page 63: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/63.jpg)
@doanduyhai #AlgosBigData
Quelles applications ? Élection de master dans les architectures master/slave Atteindre un consensus distribué Créer un algorithme de Compare & Swap distribué
Créer un lock distribué
63
![Page 64: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/64.jpg)
@doanduyhai #AlgosBigData
Exemples d’implémentation Cassandra: lightweight transaction Google Chubby/Spanner: lock/transaction distribué(e) Heroku: à travers le framework Doozerd pour gérer la conf Neo4j (≥ 1.9): en replacement de ZooKeeper pour la haute disponibilité
64
![Page 65: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/65.jpg)
@doanduyhai #AlgosBigData
CREATE TABLE users( login text PRIMARY KEY, firstname text, … );
Cassandra Lightweight Transaction
65
Contrainte d’unicité
![Page 66: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/66.jpg)
@doanduyhai #AlgosBigData
INSERT INTO users(login,firstname,…) VALUES(‘jdupond’,’Jean’,…) IF NOT EXISTS;
Cassandra Lightweight Transaction
66
Contrainte d’unicité
![Page 67: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/67.jpg)
@doanduyhai #AlgosBigData
CREATE TABLE locks( lock_type text PRIMARY KEY, lock_id uuid, … );
Cassandra Lightweight Transaction
67
Compare & swap distribué
![Page 68: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/68.jpg)
@doanduyhai #AlgosBigData
//Acquérir un lock UPDATE locks USING TTL 60 SET lock_id = 110e8400-e29b-11d4-a716-446655440000 WHERE lock_type = ‘TRANSACTION_ACHAT’ IF lock_id = null; //Relâcher un lock UPDATE locks SET lock_id = null WHERE lock_type = ‘TRANSACTION_ACHAT’ IF lock_id = 110e8400-e29b-11d4-a716-446655440000;
Cassandra Lightweight Transaction
68
Compare & swap distribué
![Page 69: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/69.jpg)
@doanduyhai #AlgosBigData
Q & R
! " "
69
![Page 70: Algorithmes distribues pour le big data @ DevoxxFR 2015](https://reader033.vdocuments.net/reader033/viewer/2022052509/55a929941a28abbd768b4832/html5/thumbnails/70.jpg)
@doanduyhai #AlgosBigData
MERCI "
70