13.07.2013 Views

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

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!