Slides (in french) of my university talk at Devoxx France on April 18th 2012.
Here is the video (in french), splitted in 3 part as it is almost 3h long:
* part 1: https://www.youtube.com/watch?v=2zBY4OquaOg
* part 2: https://www.youtube.com/watch?v=FlPH78xaFMY
* part 3: https://www.youtube.com/watch?v=ZrmzDMXoe2o
2. University Talk
• Tout public
• 3h pour vraiment comprendre Cassandra
• Pédagogique
2
3. University Talk
• Démarre doucement
• Continue doucement
• Mais en 3h nous allons couvrir beaucoup de sujets
• Devrait vous chatouiller un peu le cerveau
• Conseil: prenez des notes
3
27. Super column
nromanetti@jaxio.com
login
ed
t )
caaitre
nroma
e r
twitter
e prdispa
@nromanetti
D (v
a
ville
Paris
users['france']['nromanetti@jaxio.com']['ville'] = 'Paris'
Super row key super sub col. sub
col. Family col. name name col. value
27
41. Où stocker une row?
• Tous les serveurs sont identiques (symétrie)
• Postulats
• 1 row doit tenir sur 1 seul serveur
• On veut répartir les rows uniformément
41
42. Consistent Hashing
bytes Consistent Un ‘token’ entre
e.g. String Hash 0 et 2^127
0
tokenB
row keyA f(keyA)
tokenA
row keyB f(keyB)
(2^127) / 2 ≃ 10^38
42
43. Consistent Hashing
tokenB
N0
N7 N1 token1=1*(2^127)/8
token range
token6=6*(2^127)/8 N6
N2 token2=2*(2^127)/8
tokenA
N5 N3
N4
node 2 = contient 1ère replica des rows ayant leur token compris entre token1 et token2
43
83. Exemple 1
Pourquoi N1 ?
N0
Client v2
read N7 N1
re ad
digest v1
OK N6
N2
v2 dig
est
N5 N3
N4 v2
RF = 3 Donnée la plus récente parmi ONE replica
CL = ONE
83
93. Exemple 1
N0
Client v2
read N7 N1
re ad
digest v2
OK N6
N2
v2 dig
est
N5 N3
N4 v2
RF = 3 Donnée la plus récente parmi 3 replicas
CL = ALL
93
94. Consistence Forte
• Comment être certain que la donnée lue est la plus
récente?
• formule W + R > RF
W: nb de replica contactées en écriture
R: nb de replica contactées en lecture
RF: replication factor
• Cas trivial: écriture en ALL et lecture en ONE
94
95. Consistency
RF = 3
N0 QUORUM N0 QUORUM
N7 N1
N7 N1
Write Write
N2
N6 N2
N6
Read Read
N5 N3
N5 N3
N4
QUORUM
N4
ONE
«Weak» «Strong»
95
96. Démo - calculer Token
import java.math.BigInteger;
public class SimpleTokenCalculator {
public static void main(String args[]) {
int nbNodes = Integer.parseInt(args[0]);
for (int i = 0; i < nbNodes; i++) {
BigInteger token = new BigInteger("2");
token = token.pow(127);
token = token.multiply(new BigInteger("" + i));
token = token.divide(new BigInteger("" + nbNodes));
System.out.println("token " + i + ": " + token);
}
}
}
96
97. Démo - création KS + CF
• create keyspace ks with placement_strategy =
'SimpleStrategy' and strategy_options =
{replication_factor:2};
• use ks;
• create column family user with key_validation_class =
'AsciiType' and comparator = 'AsciiType' and
default_validation_class = 'AsciiType';
• set user['antonio@devoxx.fr']['nom']= 'Goncalves';
• get user['antonio@devoxx.fr'];
97
113. Lecture
MemTable 1- Pertinent lorsque le client spécifie le nom de la colonne
Row Cache
Mémoire
Fichiers
SSTable
SSTable
SSTable 6- Contient la valeur...
113
114. Lecture
MemTable 1- Pertinent lorsque le client spécifie le nom de la colonne
Row Cache 2- Stocke l’intégralité d’une row
BloomFilter
BloomFilter
BloomFilter
Mémoire
Fichiers
SSTable
SSTable
SSTable 6- Contient la valeur...
114
119. Bloom Filter (lecture)
keyY
f(keyY) g(keyY)
keyY présent? OUI... mais c’est un faux positif
119
120. Lecture
MemTable 1- Pertinent lorsque le client spécifie le nom de la colonne
Row Cache 2- Stocke l’intégralité d’une row
BloomFilter
BloomFilter 3- répond à «La SSTable contient-elle un fragment de row ?»
BloomFilter Attention, faux positif possible.
Key Cache
Mémoire
Fichiers
SSTable
SSTable
SSTable 6- Contient la valeur...
120
121. Lecture
MemTable 1- Pertinent lorsque le client spécifie le nom de la colonne
Row Cache 2- Stocke l’intégralité d’une row
BloomFilter
BloomFilter 3- répond à «La SSTable contient-elle un fragment de row ?»
BloomFilter Attention, faux positif possible.
Key Cache 4- Donne la position exacte du fragment de row dans la SSTable
Mémoire Index Summary
Fichiers
SSTable
SSTable
SSTable 6- Contient la valeur...
121
122. Lecture
MemTable 1- Pertinent lorsque le client spécifie le nom de la colonne
Row Cache 2- Stocke l’intégralité d’une row
BloomFilter
BloomFilter 3- répond à «La SSTable contient-elle un fragment de row ?»
BloomFilter Attention, faux positif possible.
Key Cache 4- Donne la position exacte du fragment de row dans la SSTable
Mémoire Index Summary 5- Donne la position approximative (intervalle) du fragment de row dans la
SSTable
Fichiers
SSTable
SSTable
SSTable 6- Contient la valeur...
122
124. Multi Data Center
DC USA DC Europe
Rack 1 Rack 1
Replica 1 token o token n
token s token r Replica 4
token w token v
Rack 2 Rack 2
Replica 3 token q token p Replica 2
RF = 4 token u
token y
token t
token x
Pas de symétrie entre les DC
QUORUM implique nécessairement 2 DC => latence
124
125. DataCenter «Aware»
NetworkTopologyStrategy + alternance tokens
RF = 3 RF = 3
DC USA DC Europe
Rack 1 Rack 1
token n+1 token n
token p+1 Replica 4 token p Replica 1
token r+1 Replica 6 token r Replica 3
Rack 2 Rack 2
token o+1 token o
token q+1 Replica 5 token q Replica 2
token s+1 token s
125
126. Ring 2 DataCenter (+1)
token n
token n+1
rack 1
rack 2 token s token s+1 token o token o+1 rack 2
rack 1 token r token r+1 token p token p+1 rack1
rack 2
token q
Europe token q+1
USA
126
127. Latence du QUORUM
RF = 3 RF = 3
DC USA DC Europe
Rack 1 Rack 1
Client
☹
Rack 2 Rack 2
127
128. LOCAL_QUORUM
RF = 3 RF = 3
DC USA DC Europe
Rack 1 Rack 1
Client
☺
Rack 2 Rack 2
128
129. EACH_QUORUM
RF = 3 RF = 3
DC USA DC Europe
Rack 1 Rack 1
Client
Rack 2 Rack 2
token q
token s
129
130. Autres usages Multi DC
• 1 DC pour backup
• 1 DC pour traitement particulier
130
132. Doubler la taille du cluster
t + n/2 n/2
0
t n
(n+o)/2 3*(2^127)/16
(s+t)/2
s
o 2*(2^127)/8 = 4*(2^127)/16
(r+s)/2 (o+p)/2
r p
q
(q+r)/2 (p+q)/2
132
133. Ajouter 1 noeud
0
t n
n’’ 2*(2^127)/9
o
s
r p
q
On crée un déséquilibre...
133
134. Ajouter 1 noeud
0 0
t’ n’
t n
n’’
s’ n’’
o
s
r’ o’
r p
q’ p’
q
re-balancing
134
136. Architecture Interne & Monitoring
Stage z
evt en sortie
Stage y
Traitement de l’evt par une thread
Stage x (thread pool)
les evts font la queue
certains peuvent expirer avant d’être traité!
SEDA: Staged Event-Driven Architecture...
136