L'élasticité des bases de données sur le cloud computing - CoDE
L'élasticité des bases de données sur le cloud computing - CoDE
L'élasticité des bases de données sur le cloud computing - CoDE
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Un shard se compose d’un ou plusieurs serveurs. Via son processus mongod, il est en<br />
charge <strong>de</strong> stocker <strong>le</strong>s <strong>données</strong>.<br />
Les serveurs <strong>de</strong> configurations stockent <strong>le</strong>s méta-<strong>données</strong> du système c’est-à-dire <strong>le</strong>s<br />
informations basiques relative à chaque shard et <strong><strong>de</strong>s</strong> indications quant aux <strong>données</strong> stockées<br />
par ceux-ci.<br />
Ce service est indispensab<strong>le</strong>, il est donc nécessaire <strong>de</strong> l’as<strong>sur</strong>er en lui consacrant <strong>de</strong>ux voire<br />
trois instances. L’écriture <strong>sur</strong> ces services utilise <strong>le</strong> protoco<strong>le</strong> <strong>de</strong> validation en <strong>de</strong>ux phases (2phase<br />
commit en anglais) pour as<strong>sur</strong>er un stockage fiab<strong>le</strong> [38]. En cas <strong>de</strong> défaillance d’un<br />
service, tous <strong>le</strong>s autres serveurs passent en mo<strong>de</strong> <strong>de</strong> <strong>le</strong>cture unique (read only en anglais).<br />
Le processus Mongos redirige <strong>le</strong>s requêtes <strong><strong>de</strong>s</strong> applications clientes vers <strong>le</strong>s shards<br />
adéquats et regroupe <strong>le</strong>s résultats avant <strong>de</strong> <strong>le</strong>s transmettre à l’application cliente. Il n’a pas<br />
d’état persistant : son premier état provient <strong><strong>de</strong>s</strong> serveurs <strong>de</strong> configuration. Toute modification<br />
dans <strong>le</strong>s serveurs <strong>de</strong> configuration est propagée immédiatement aux processus mongos. Etant<br />
donné que ce service n’a pas d’état persistant, en cas <strong>de</strong> défaillance <strong>de</strong> ce service, seu<strong>le</strong>s <strong>le</strong>s<br />
applications s’y connectant seront affectées, aucun autre service ne sera affecté. Pour répondre<br />
à une tel<strong>le</strong> défaillance, il suffit <strong>de</strong> relancer <strong>le</strong> service.<br />
MongoDB distribue <strong>le</strong>s <strong>données</strong> en fonction <strong>de</strong> ses col<strong>le</strong>ctions c’est-à-dire que chaque<br />
col<strong>le</strong>ction peut définir sa propre politique <strong>de</strong> partionnement <strong>de</strong> <strong>données</strong>. Un morceau (chunk<br />
en anglais) est un ensemb<strong>le</strong> continu <strong>de</strong> documents d’une col<strong>le</strong>ction. Un morceau, défini via<br />
un trip<strong>le</strong>t (col<strong>le</strong>ction A, minKey, maxKey), contient <strong>le</strong>s <strong>données</strong> <strong>de</strong> la col<strong>le</strong>ction A dont la clé<br />
est comprise entre <strong>le</strong>s bornes minkey et maxKey.<br />
Les serveurs <strong>de</strong> configuration ont connaissance <strong>de</strong> chaque morceau et <strong>de</strong> <strong>le</strong>ur localisation<br />
(comme décrit en figure 3.1). La tail<strong>le</strong> d’un morceau ne peut dépasser 200MB. Lorsqu’il<br />
atteint cette limite, il est divisé en <strong>de</strong>ux nouveaux morceaux. Lorsque la limite <strong>de</strong> stockage<br />
d’un shard est atteinte, <strong><strong>de</strong>s</strong> morceaux lui appartenant émigreront vers un autre shard.<br />
Col<strong>le</strong>ction mink maxkey location<br />
users nom : “Degroodt” nom : “Skhiri” shard1<br />
users nom : “Skhiri” nom : “Zimányi” shard4<br />
Tab<strong>le</strong> 3.1 – MongoDB - Configuration Morceaux, Shard<br />
Actuel<strong>le</strong>ment, l’algorithme <strong>de</strong> répartition <strong><strong>de</strong>s</strong> <strong>données</strong> est très simp<strong>le</strong> et est appliqué <strong>de</strong><br />
manière automatique ; on ne sait pas <strong>le</strong> configurer (cette faib<strong>le</strong>sse est connue et est en cours<br />
d’amélioration [21]). L’algorithme déplace <strong>le</strong>s morceaux en fonction <strong>de</strong> la tail<strong>le</strong> <strong><strong>de</strong>s</strong> différents<br />
shards. Le but est <strong>de</strong> maintenir <strong>le</strong>s <strong>données</strong> distribuées <strong>de</strong> manière uniforme mais aussi <strong>de</strong><br />
réduire au minimum <strong>le</strong>s transferts <strong>de</strong> <strong>données</strong>. Pour qu’un déplacement ait lieu, il faut qu’un<br />
shard ait au minimum 9 morceaux <strong>de</strong> plus que <strong>le</strong> plus impopulaire <strong><strong>de</strong>s</strong> shards. A partir <strong>de</strong> ce<br />
point, <strong>le</strong>s morceaux vont être répartis <strong>de</strong> manière uniforme <strong>sur</strong> <strong>le</strong>s différents shards.<br />
3.4.4 Réplication <strong><strong>de</strong>s</strong> <strong>données</strong><br />
Le premier modè<strong>le</strong> <strong>de</strong> réplication proposé par MongoDB est <strong>le</strong> modè<strong>le</strong> maître-esclave.<br />
Récemment, MongoDB propose une nouvel<strong>le</strong> approche, la réplication par pairs (Replicat set<br />
en anglais), qui voit tous <strong>le</strong>s serveurs d’un shard comme <strong><strong>de</strong>s</strong> pairs qui éliront un maître<br />
temporaire. Dans <strong>le</strong>s <strong>de</strong>ux modè<strong>le</strong>s, la réplication est asynchrone.<br />
25