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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Faculté <strong>de</strong> Sciences<br />

Département Informatique<br />

L’élasticité <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong><br />

<strong>sur</strong> <strong>le</strong> <strong>cloud</strong> <strong>computing</strong><br />

Nicolas Degroodt<br />

Directeur : Prof. Esteban Zimányi<br />

En collaboration avec<br />

Mémoire présenté en vue <strong>de</strong><br />

l’obtention du gra<strong>de</strong> <strong>de</strong><br />

Master en Sciences Informatiques<br />

Année académique 2010–2011


Remerciements<br />

Je tiens à remercier <strong>le</strong> professeur Esteban Zimányi, mon directeur <strong>de</strong> mémoire, pour ses<br />

nombreux conseils tant <strong>de</strong> direction et <strong>de</strong> rédaction que scientifiques, qui m’ont permis <strong>de</strong><br />

fournir un travail que j’espère pertinent et intéressant.<br />

La collaboration avec la société Euranova fut aussi très agréab<strong>le</strong> et instructive. Je tiens à<br />

remercier tous ses membres pour <strong>le</strong>ur accueil et plus particulièrement Sabri Skhiri dit Gabouje<br />

et Nam-Luc Tran pour <strong>le</strong>urs conseils et nos discussions qui ont sou<strong>le</strong>vé <strong><strong>de</strong>s</strong> problèmes fort<br />

intéressants et y ont souvent trouvé <strong><strong>de</strong>s</strong> solutions. Je tiens éga<strong>le</strong>ment à souligner <strong>le</strong>s précieuses<br />

informations et recommandations que m’ont apporté Hervé Bath, Eric Delacroix et Ivan Frain.<br />

Je <strong>le</strong>ur en suis très reconnaissant.<br />

Enfin, je souhaite remercier Peter Van Roy, Boris Mejias et Thibault Dory, membres du<br />

département d’ingénierie informatique (INGI) <strong>de</strong> l’Université catholique <strong>de</strong> Louvain (UCL)<br />

qui m’ont accueilli dans <strong>le</strong>ur groupe <strong>de</strong> discussion autour du <strong>cloud</strong> <strong>computing</strong>, <strong>le</strong>urs remarques<br />

furent très instructives.


Tab<strong>le</strong> <strong><strong>de</strong>s</strong> matières<br />

1 Introduction 1<br />

1.1 Contexte et objectifs du mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . 1<br />

1.2 Structure du mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

1.3 Contributions du mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2<br />

2 Le <strong>cloud</strong> <strong>computing</strong> et ses services 4<br />

2.1 Contexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />

2.1.1 Origine et modè<strong>le</strong>s . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4<br />

2.1.2 Caractéristiques spécifiques et capacités . . . . . . . . . . . . . . . . . . 6<br />

2.1.3 Amazon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6<br />

2.2 Définition du <strong>cloud</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7<br />

2.3 Propriétés fondamenta<strong>le</strong>s <strong><strong>de</strong>s</strong> services . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.3.1 La haute disponibilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.3.2 Passer à l’échel<strong>le</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10<br />

2.4 Le théorème CAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12<br />

3 Etu<strong>de</strong> comparative <strong>de</strong> différents systèmes <strong>de</strong> gestion <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong> 15<br />

3.1 Classification <strong><strong>de</strong>s</strong> systèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

3.1.1 Le modè<strong>le</strong> <strong>de</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15<br />

3.1.2 Les choix CAP et PACELC . . . . . . . . . . . . . . . . . . . . . . . . . 16<br />

3.1.3 La réplication synchrone ou asynchrone . . . . . . . . . . . . . . . . . . 16<br />

3.1.4 Le modè<strong>le</strong> <strong>de</strong> consistance . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

3.1.5 Le modè<strong>le</strong> <strong>de</strong> requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17<br />

3.2 Les <strong>bases</strong> <strong>de</strong> <strong>données</strong> relationnel<strong>le</strong>s distribuées . . . . . . . . . . . . . . . . . . . 18<br />

3.2.1 Le modè<strong>le</strong> <strong>de</strong> <strong>données</strong> relationnel . . . . . . . . . . . . . . . . . . . . . . 18<br />

3.2.2 Les propriétés ACID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

3.2.3 MySQL Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18<br />

3.2.4 Autres solutions SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19<br />

3.2.5 Les solutions SQL-MR . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.3 Le mouvement NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20<br />

3.3.1 Les modè<strong>le</strong>s <strong>de</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . 21<br />

3.3.2 BASE en réponse à ACID . . . . . . . . . . . . . . . . . . . . . . . . . . 22<br />

3.4 MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

3.4.1 Modè<strong>le</strong> <strong>de</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23<br />

3.4.2 Choix CAP et PACELC . . . . . . . . . . . . . . . . . . . . . . . . . . . 24<br />

3.4.3 Vue d’ensemb<strong>le</strong> <strong>de</strong> l’architecture . . . . . . . . . . . . . . . . . . . . . . 24


3.4.4 Réplication <strong><strong>de</strong>s</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . 25<br />

3.4.5 Modè<strong>le</strong> <strong>de</strong> consistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.4.6 Modè<strong>le</strong> <strong>de</strong> requête . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.5 Cassandra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.5.1 Modè<strong>le</strong> <strong>de</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28<br />

3.5.2 Le choix CAP et PACELC . . . . . . . . . . . . . . . . . . . . . . . . . 29<br />

3.5.3 Vue d’ensemb<strong>le</strong> <strong>de</strong> l’architecture . . . . . . . . . . . . . . . . . . . . . . 30<br />

3.5.4 Réplication <strong><strong>de</strong>s</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . 31<br />

3.5.5 Modè<strong>le</strong> <strong>de</strong> consistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32<br />

3.5.6 Modè<strong>le</strong> <strong>de</strong> requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

3.6 HBase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33<br />

3.6.1 The Hadoop Distributed Fi<strong>le</strong>system . . . . . . . . . . . . . . . . . . . . 33<br />

3.6.2 Modè<strong>le</strong> <strong>de</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34<br />

3.6.3 Choix CAP et PAELC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35<br />

3.6.4 Vue d’ensemb<strong>le</strong> <strong>de</strong> l’architecture . . . . . . . . . . . . . . . . . . . . . . 35<br />

3.6.5 Réplication <strong><strong>de</strong>s</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . 36<br />

3.6.6 Consistance <strong><strong>de</strong>s</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

3.6.7 Modè<strong>le</strong> <strong>de</strong> requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

3.7 Vol<strong>de</strong>mort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

3.8 Comparaison <strong><strong>de</strong>s</strong> différents systèmes . . . . . . . . . . . . . . . . . . . . . . . . 37<br />

4 Bases <strong>de</strong> <strong>données</strong> et élasticité 39<br />

4.1 Etat <strong>de</strong> l’art . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39<br />

4.2 Problèmes liés à la me<strong>sur</strong>e <strong>de</strong> l’élasticité . . . . . . . . . . . . . . . . . . . . . . 41<br />

4.3 Notre solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />

4.3.1 Scénario <strong>de</strong> tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />

4.3.2 Paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />

4.3.3 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48<br />

4.4 Expériences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51<br />

4.4.1 Considérations complémentaires . . . . . . . . . . . . . . . . . . . . . . 51<br />

4.4.2 Montée à l’échel<strong>le</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52<br />

4.4.3 Descente à l’échel<strong>le</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58<br />

4.4.4 Analyse <strong><strong>de</strong>s</strong> résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61<br />

4.5 Les travaux <strong>de</strong> Thibault Dory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

4.5.1 Méthodologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

4.5.2 Définitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65<br />

4.5.3 Résultats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

4.5.4 Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67<br />

4.6 Conclusion - Comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72<br />

4.6.1 Critiques <strong>de</strong> l’approche comparative . . . . . . . . . . . . . . . . . . . . 73<br />

4.6.2 Vers une nouvel<strong>le</strong> approche . . . . . . . . . . . . . . . . . . . . . . . . . 74<br />

5 Influence <strong><strong>de</strong>s</strong> choix techniques <strong>sur</strong> l’élasticité 76<br />

5.1 Modè<strong>le</strong> <strong>de</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76<br />

5.2 Modè<strong>le</strong> <strong>de</strong> consistance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77<br />

5.2.1 Fina<strong>le</strong>ment ou fortement consistant . . . . . . . . . . . . . . . . . . . . 77<br />

5.2.2 Le verrouillage d’entrée et la consistance transactionnel<strong>le</strong> . . . . . . . . 77<br />

i


5.3 Réplication <strong>de</strong> <strong>données</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

5.4 Modè<strong>le</strong> <strong>de</strong> requêtes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78<br />

5.5 Ajout d’instances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

5.6 Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79<br />

5.7 Tab<strong>le</strong>au récapitulatif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80<br />

6 Conclusion 82<br />

Bibliographie 84<br />

A Liste d’accronymes 88<br />

B Rapport <strong>de</strong> stage 89<br />

B.1 Cadre du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89<br />

B.2 Chronologie du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89<br />

B.3 Bilan du stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

B.4 Autres documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

B.4.1 Artic<strong>le</strong> . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90<br />

B.4.2 L’entrée dans <strong>le</strong> blog d’ Euranova . . . . . . . . . . . . . . . . . . . . . . 99<br />

ii


Chapitre 1<br />

Introduction<br />

1.1 Contexte et objectifs du mémoire<br />

“Cloud <strong>computing</strong> emerges as a new <strong>computing</strong> paradigm which aims to provi<strong>de</strong><br />

reliab<strong>le</strong>, customized and Quality of Service guaranteed <strong>computing</strong> dynamic environments<br />

for end-users” [36]<br />

Le <strong>cloud</strong> <strong>computing</strong> (CC, <strong>cloud</strong>) est un nouveau paradigme émergent très à la mo<strong>de</strong>. Il<br />

s’agit d’un domaine d’étu<strong>de</strong> hautement compétitif et emprunté par <strong>de</strong> grands acteurs tels<br />

que la Nasa, Amazon, etc. Les solutions <strong>sur</strong> <strong>le</strong> marché, déjà très convaincantes, offrent à<br />

<strong>le</strong>urs utilisateurs <strong><strong>de</strong>s</strong> services hautement disponib<strong>le</strong>s, capab<strong>le</strong>s <strong>de</strong> passer à l’échel<strong>le</strong> et ceci <strong>de</strong><br />

manière dynamique. Mais qu’en est-il <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong> <strong>sur</strong> <strong>cloud</strong> ? Peuvent-el<strong>le</strong>s jouir <strong><strong>de</strong>s</strong><br />

fonctionnalités offertes par <strong>le</strong> <strong>cloud</strong> ou, au contraire, sont-el<strong>le</strong>s un frein à l’évolution d’une<br />

application <strong>sur</strong> <strong>le</strong> <strong>cloud</strong> ?<br />

Ces <strong>de</strong>rnières années, nous avons apparaître <strong>de</strong> nouvel<strong>le</strong>s applications <strong>sur</strong> internet (tel<strong>le</strong>s<br />

que Facebook et Twitter) connaissant un succès fou et par conséquent <strong><strong>de</strong>s</strong> charges énormes.<br />

Ces systèmes font face, en autre, à <strong>de</strong>ux gros défis ; <strong>le</strong> premier est <strong>le</strong> volume <strong>de</strong> <strong>données</strong> qu’ils<br />

doivent gérer et <strong>le</strong> second est la croissance exponentiel<strong>le</strong> <strong>de</strong> ce volume. Les <strong>bases</strong> <strong>de</strong> <strong>données</strong> <strong>de</strong><br />

ces applications doivent donc être capab<strong>le</strong>s <strong>de</strong> gérer un énorme volume <strong>de</strong> <strong>données</strong> mais aussi<br />

être capab<strong>le</strong> <strong>de</strong> passer à l’échel<strong>le</strong> <strong>de</strong> manière dynamique, c’est-à-dire sans <strong>de</strong>voir interrompre<br />

<strong>le</strong>ur service (pour pouvoir gérer l’évolution <strong>de</strong> ce volume <strong>de</strong> <strong>données</strong>).<br />

Dans ce mémoire, nous nous intéresserons à l’élasticité <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong> <strong>sur</strong> <strong>cloud</strong>,<br />

c’est-à-dire la capacité à passer à l’échel<strong>le</strong> <strong>de</strong> manière dynamique. Cette propriété est, à<br />

l’heure actuel<strong>le</strong>, très peu étudiée dans <strong>le</strong> domaine académique. Il s’agira dès lors <strong>de</strong> la définir<br />

<strong>de</strong> manière rigoureuse et <strong>de</strong> proposer un scénario et <strong><strong>de</strong>s</strong> paramètres permettant <strong>de</strong> l’étudier.<br />

Le domaine du <strong>cloud</strong> est emprunté par énormément d’acteurs, chacun utilisant ses propres<br />

termes pour <strong><strong>de</strong>s</strong> propriétés qui ne sont pas définies rigoureusement dans un langage scientifique.<br />

Le terme <strong>cloud</strong> peut donc malheureusement se définir tel un terme à la mo<strong>de</strong>, très<br />

aguicheur, ce qui entraîne une incompréhension <strong>sur</strong> <strong>le</strong> domaine. Nous <strong>de</strong>vrons donc avant tout<br />

ramener ce paradigme dans <strong>le</strong> domaine scientifique. Nous <strong>le</strong> définirons <strong>de</strong> manière concise ainsi<br />

que <strong>le</strong>s propriétés fondamenta<strong>le</strong>s <strong><strong>de</strong>s</strong> services qu’il propose.<br />

Ces nouvel<strong>le</strong>s applications n’ont pas trouvé dans <strong>le</strong>s <strong>bases</strong> <strong>de</strong> <strong>données</strong> traditionnel<strong>le</strong>s <strong>de</strong><br />

solutions à <strong>le</strong>ur problème <strong>de</strong> gestion <strong>de</strong> <strong>données</strong> et ont dès lors opté pour créer <strong>de</strong> nouveaux<br />

systèmes <strong>de</strong> gestion <strong>de</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong> (SGBDs). Ceux-ci sont fort différents <strong>le</strong>s uns <strong><strong>de</strong>s</strong><br />

autres. Nous proposerons une étu<strong>de</strong> comparative <strong>de</strong> différentes <strong>bases</strong> <strong>de</strong> <strong>données</strong> adaptab<strong>le</strong>s<br />

1


au <strong>cloud</strong> (<strong>le</strong>s systèmes NoSQL, SQL-MR, etc.). Nous proposerons <strong><strong>de</strong>s</strong> dimensions permettant<br />

<strong><strong>de</strong>s</strong> <strong>le</strong>s démarquer et <strong>de</strong> comprendre quel<strong>le</strong>s directions, choix techniques el<strong>le</strong>s prennent. Cette<br />

étu<strong>de</strong> nous permettra aussi <strong>de</strong> comprendre <strong>le</strong>s fonctionnement (modè<strong>le</strong> <strong>de</strong> réplication, <strong>de</strong><br />

distribution <strong><strong>de</strong>s</strong> <strong>données</strong>, etc.) <strong>de</strong> ces systèmes.<br />

Il n’existe, à l’heure actuel<strong>le</strong> et à notre connaissance, aucun standard, définition, paramètre<br />

permettant <strong>de</strong> définir l’élasticité. Dans ce mémoire, nous lui apporterons une définition<br />

et proposerons une étu<strong>de</strong> analytique <strong>de</strong> l’élasticité d’un SGBD. Nous appliquerons cette étu<strong>de</strong><br />

à Cassandra que nous ferons monter et <strong><strong>de</strong>s</strong>cendre à l’échel<strong>le</strong> <strong>de</strong> manière dynamique. Nous proposerons<br />

une série <strong>de</strong> paramètres permettant <strong>de</strong> décrire intuitivement et <strong>de</strong> manière complète<br />

ce phénomène. Ces paramètres nous permettront <strong>de</strong> quantifier l’élasticité d’une transition<br />

d’un système passant <strong>de</strong> n à m instances.<br />

Etre en me<strong>sur</strong>e <strong>de</strong> quantifier l’élasticité permettra <strong>de</strong> comprendre l’influence <strong><strong>de</strong>s</strong> paramètres<br />

<strong>de</strong> configuration d’un système <strong>sur</strong> son comportement et éga<strong>le</strong>ment <strong>de</strong> prédire <strong>le</strong> comportement<br />

du système en cas <strong>de</strong> modification. L’administrateur d’une base <strong>de</strong> <strong>données</strong> pourra,<br />

<strong>sur</strong> <strong>bases</strong> <strong><strong>de</strong>s</strong> paramètres <strong>de</strong> cette étu<strong>de</strong>, déterminer s’il est judicieux <strong>de</strong> modifier son système<br />

ou non.<br />

Enfin <strong>sur</strong> base <strong><strong>de</strong>s</strong> étu<strong><strong>de</strong>s</strong> comparative et analytique, nous dresserons un portrait <strong>de</strong> la<br />

manière dont <strong>le</strong>s différents choix techniques pris par <strong>le</strong>s <strong>bases</strong> <strong>de</strong> <strong>données</strong> influencent <strong>sur</strong> <strong>le</strong>ur<br />

élasticité. Ce portrait permettra à l’utilisateur <strong>de</strong> choisir, en fonction <strong>de</strong> ses exigences, une<br />

base <strong>de</strong> <strong>données</strong> et ses choix techniques en connaissant l’impact qu’ils auront <strong>sur</strong> l’élasticité<br />

du service.<br />

1.2 Structure du mémoire<br />

Afin <strong>de</strong> mieux comprendre <strong>le</strong> contexte <strong>de</strong> ce mémoire, nous ferons d’abord un détour,<br />

au chapitre 2, par <strong>le</strong> domaine du <strong>cloud</strong> <strong>computing</strong>. Nous examinerons <strong>le</strong> domaine socioéconomique<br />

dans <strong>le</strong>quel il se place et expliquerons <strong>le</strong>s évolutions technologiques qui ont mené<br />

à son développement. Nous analyserons aussi la solution la plus connue <strong>sur</strong> <strong>le</strong> marché : Amazon<br />

Elastic Compute Cloud. Ceci nous permettra <strong>de</strong> définir <strong>le</strong> <strong>cloud</strong> et <strong>le</strong>s propriétés <strong>de</strong> ses<br />

services.<br />

Les notions <strong>de</strong> base revues, nous décortiquerons (au chapitre 3) MongoDB, Cassandra et<br />

Hbase pour mettre en évi<strong>de</strong>nce <strong>le</strong>s différentes technologies et techniques qu’ils mettent en<br />

place. Nous proposerons une étu<strong>de</strong> comparative <strong>de</strong> ces systèmes ainsi que d’autres SGBDs.<br />

Dans <strong>le</strong> chapitre 4, nous étudierons l’élasticité <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong> (BDs) et ses caractéristiques.<br />

Nous mettrons en place une métho<strong>de</strong> analytique d’évaluation <strong>de</strong> l’élasticité et<br />

soumettrons Cassandra à cette métho<strong>de</strong>.<br />

Enfin, dans <strong>le</strong> chapitre 5, nous analyserons <strong>le</strong>s différentes caractéristiques et technologies<br />

<strong>de</strong> ces nouveaux SGBDs et déterminerons <strong>le</strong>s différents impacts <strong>sur</strong> l’élasticité <strong><strong>de</strong>s</strong> BDs <strong>sur</strong><br />

<strong>cloud</strong>.<br />

1.3 Contributions du mémoire<br />

Les contributions <strong>de</strong> ce mémoire sont <strong>le</strong>s suivantes :<br />

1. Nous apportons <strong><strong>de</strong>s</strong> définitions concises et scientifiques du <strong>cloud</strong> et <strong><strong>de</strong>s</strong> propriétés <strong>de</strong> ses<br />

services.<br />

2


2. Nous apportons une étu<strong>de</strong> détaillée <strong>de</strong> trois systèmes NoSQL différents : MongoDB ,<br />

Cassandra et Hbase.<br />

3. Nous proposons une étu<strong>de</strong> comparative <strong>de</strong> différents SGBDs ainsi que <strong><strong>de</strong>s</strong> dimensions<br />

permettant <strong><strong>de</strong>s</strong> <strong>le</strong>s distinguer et <strong>le</strong>s comprendre dans <strong>le</strong>ur globalité<br />

4. La contribution principa<strong>le</strong> <strong>de</strong> ce mémoire est l’étu<strong>de</strong> analytique <strong>de</strong> l’élasticité d’une<br />

base <strong>de</strong> <strong>données</strong>. Nous proposons <strong><strong>de</strong>s</strong> scénarios <strong>de</strong> tests et <strong><strong>de</strong>s</strong> paramètres nécessaires et<br />

suffisants pour analyser, décrire et quantifier l’élasticité d’un système en transition.<br />

5. Nous proposons une liste <strong><strong>de</strong>s</strong> influences <strong>de</strong> choix techniques pris par <strong>le</strong>s <strong>bases</strong> <strong>de</strong> <strong>données</strong><br />

<strong>sur</strong> <strong>le</strong>ur élasticité.<br />

3


Chapitre 2<br />

Le <strong>cloud</strong> <strong>computing</strong> et ses services<br />

Le <strong>cloud</strong> est très à la mo<strong>de</strong> et utilisé par <strong><strong>de</strong>s</strong> nombreux acteurs pour décrire <strong><strong>de</strong>s</strong> concepts<br />

qui peuvent être très différents. Il en perd souvent sa pertinence. Dans ce rapport, il est donc<br />

nécessaire <strong>de</strong> <strong>le</strong> replacer dans un contexte scientifique.<br />

Dans ce chapitre, nous ferons un rapi<strong>de</strong> tour d’horizon <strong><strong>de</strong>s</strong> évolutions qui ont mené au<br />

<strong>cloud</strong>. Nous proposerons ensuite un tour d’horizon <strong>de</strong> la solution <strong>cloud</strong> la plus réputée <strong>sur</strong> <strong>le</strong><br />

marché : Amazon EC2. Ce tour d’horizon nous permettra <strong>de</strong> mieux comprendre <strong>le</strong> <strong>cloud</strong> et<br />

<strong>le</strong> concepts <strong>de</strong> service qu’il met en avant.<br />

Dans un contexte scientifique, nous apporterons ensuite une définition du <strong>cloud</strong> et énoncerons<br />

<strong>le</strong>s propriétés fondamenta<strong>le</strong>s <strong><strong>de</strong>s</strong> services qu’il propose. Nous décrirons ensuite <strong>le</strong> théorème<br />

CAP, central à ce mémoire, qui énonce l’impossibilité pour <strong>le</strong> service base <strong>de</strong> <strong>données</strong><br />

<strong>de</strong> maintenir simultanément consistance, tolérance à la partition et haute disponibilité.<br />

2.1 Contexte<br />

2.1.1 Origine et modè<strong>le</strong>s<br />

Les 20 années précé<strong>de</strong>ntes ont vu la démocratisation <strong>de</strong> l’informatique, d’internet et <strong><strong>de</strong>s</strong><br />

réseaux <strong>de</strong> hauts débits. Le <strong>cloud</strong> suit cette chute <strong><strong>de</strong>s</strong> prix et l’émergence <strong>de</strong> virtualisation <strong><strong>de</strong>s</strong><br />

serveurs d’applications : il consiste en la coopération <strong>de</strong> ressources informatiques, situées ou<br />

non dans <strong>le</strong> même parc informatique. Cette coopération sous-entend que ces machines vont<br />

travail<strong>le</strong>r ensemb<strong>le</strong> dans un but commun via <strong><strong>de</strong>s</strong> protoco<strong>le</strong>s et <strong><strong>de</strong>s</strong> standards <strong>de</strong> communication<br />

qui sont basés <strong>sur</strong> ceux d’internet [32].<br />

Le <strong>cloud</strong> se veut capab<strong>le</strong> <strong>de</strong> s’auto-gérer, <strong>de</strong> fournir un certain <strong>de</strong>gré d’automatisme. Tous<br />

ces mécanismes sont transparents pour l’utilisateur final qui pense <strong>le</strong> <strong>cloud</strong> tel une série <strong>de</strong><br />

services et fait donc tota<strong>le</strong>ment abstraction <strong>de</strong> tout autre composant. L’utilisateur final voit<br />

la solution <strong>cloud</strong> comme étant dynamique, capab<strong>le</strong> <strong>de</strong> s’adapter à la charge à laquel<strong>le</strong> il est<br />

soumis, comme une solution qu’il peut payer à la <strong>de</strong>man<strong>de</strong>.<br />

“Pour <strong>le</strong>s entreprises utilisatrices (du grand compte multinational à la PME loca<strong>le</strong>),<br />

<strong>le</strong> Cloud Computing peut se définir comme une approche <strong>le</strong>ur permettant<br />

<strong>de</strong> disposer d’applications, <strong>de</strong> puissance <strong>de</strong> calcul, <strong>de</strong> moyens <strong>de</strong> stockage, etc.<br />

comme autant <strong>de</strong> « services ». Ceux-ci seront mutualisés, dématérialisés (donc<br />

indépendants <strong>de</strong> toutes contingences matériel<strong>le</strong>s, logiciel<strong>le</strong>s et <strong>de</strong> communication),<br />

4


contractualisés (en termes <strong>de</strong> performances, niveau <strong>de</strong> sécurité, coûts. . . ), évolutifs<br />

(en volume, fonction, caractéristiques. . . ) et en libre-service.” [32]<br />

Il existe trois modè<strong>le</strong>s <strong>de</strong> <strong>cloud</strong> :<br />

– Le <strong>cloud</strong> privé : <strong>le</strong>s ressources physiques sont entièrement prises en charge par l’entreprise.<br />

– Le <strong>cloud</strong> public : il est externe à l’organisation, géré par un prestataire externe et<br />

accessib<strong>le</strong> via internet (tel<strong>le</strong> la solution proposée par Amazon). Les services peuvent<br />

donc être hébergés physiquement <strong>sur</strong> la même machine qu’un autre service extérieur.<br />

– Le <strong>cloud</strong> hybri<strong>de</strong> : il s’agit d’un mélange <strong><strong>de</strong>s</strong> <strong>de</strong>ux précé<strong>de</strong>nts. Typiquement, lorsqu’une<br />

société vient à manquer <strong>de</strong> ressources physiques, el<strong>le</strong> peut louer <strong><strong>de</strong>s</strong> services à un prestataires<br />

<strong>de</strong> <strong>cloud</strong> public. Les <strong>de</strong>ux solutions seront alors amenées à partager applications<br />

et <strong>données</strong> via <strong><strong>de</strong>s</strong> canaux <strong>de</strong> communication sécurisés.<br />

L’abstraction faite via la virtualisation peut être extrapolée. On voit ainsi naître <strong>le</strong> paradigme<br />

<strong>de</strong> service. Traditionnel<strong>le</strong>ment, on décrivait <strong>le</strong> <strong>cloud</strong> tel une architecture comportant 3<br />

couches <strong>de</strong> services (figure 2.1) :<br />

– Infrastructure as a Service (IaaS) : dans ce modè<strong>le</strong>, <strong>le</strong> client dispose d’une infrastructure<br />

informatique hébergée <strong>sur</strong> laquel<strong>le</strong> il a un accès comp<strong>le</strong>t (sans restriction).A la différence<br />

<strong><strong>de</strong>s</strong> services traditionnels, l’infrastructure mise au service du client n’est plus une<br />

infrastructure physique (un parc <strong>de</strong> serveur) mais une infrastructure virtualisée.<br />

– Platform as a Service (PaaS) : <strong>le</strong> fournisseur met à disposition un environnement fonctionnel<br />

et performant. Le client ne doit plus qu’y déployer son application.<br />

– Software as a Service (SaaS) : ce modè<strong>le</strong> permet <strong>de</strong> déporter l’application chez un tiers.<br />

Figure 2.1 – Les 3 modè<strong>le</strong>s <strong>de</strong> <strong>cloud</strong>[32]<br />

En fait, l’expansion du <strong>cloud</strong> fait naître <strong>le</strong> modè<strong>le</strong> <strong>de</strong> “XaaS” signifiant “Tout comme un<br />

service” (everything-as-a-service en anglais). On voit par exemp<strong>le</strong> apparaitre la notion <strong>de</strong><br />

Human as a Service(HuaaS) [15] qui caractérise une couche supérieure à SaaS correspondant<br />

à une ressource humaine élastique. Cette intelligence “artificiel<strong>le</strong>ment artificiel<strong>le</strong>” peut, par<br />

exemp<strong>le</strong>, servir pour <strong><strong>de</strong>s</strong> décisions arbitraires comme choisir <strong>le</strong>s vidéos <strong>le</strong>s plus intéressantes à<br />

afficher (pour un système comme Youtube). Le service Amazon Mechanical Turk [2] s’inscrit<br />

5


dans cette couche. Cette classification en couches <strong>de</strong> services quitte <strong>le</strong> domaine <strong>de</strong> ce mémoire<br />

mais reste un domaine d’étu<strong>de</strong> fort intéressant.<br />

2.1.2 Caractéristiques spécifiques et capacités<br />

Outre <strong>le</strong>s caractéristiques techniques (<strong>sur</strong> <strong>le</strong>squel<strong>le</strong>s nous reviendrons plus tard), distinguons,<br />

parmi <strong>le</strong>s différentes caractéristiques essentiel<strong>le</strong>s et re<strong>le</strong>vantes, <strong>le</strong>s non-fonctionnel<strong>le</strong>s et<br />

<strong>le</strong>s économiques [37].<br />

Les aspects non-fonctionnels décrivent <strong>le</strong>s propriétés intrinsèques du <strong>cloud</strong>. Parmi ces<br />

aspects nous listons :<br />

– L’élasticité : il s’agit d’une <strong><strong>de</strong>s</strong> caractéristiques <strong>le</strong>s plus essentiel<strong>le</strong>s dans notre vision<br />

du <strong>cloud</strong>. El<strong>le</strong> définit la capacité d’une infrastructure donnée à s’adapter <strong>de</strong> manière<br />

dynamique au changement. L’élasticité fait intervenir la capacité à passer à l’échel<strong>le</strong><br />

mais aussi l’agilité.<br />

– La capacité à s’adapter : <strong>le</strong> <strong>cloud</strong> doit fournir un ensemb<strong>le</strong> d’automatismes lui permettant<br />

<strong>de</strong> s’auto-gérer. Son administration <strong>de</strong>vra nécessiter <strong>le</strong> minimum possib<strong>le</strong> d’interventions<br />

humaines.<br />

– La qualité <strong>de</strong> service : est un autre aspect essentiel du <strong>cloud</strong> ; à l’ai<strong>de</strong> <strong>de</strong> métriques tel<strong>le</strong>s<br />

que <strong>le</strong> temps <strong>de</strong> réponse, <strong>le</strong> nombre d’opérations à la secon<strong>de</strong>, <strong>le</strong> service fournit <strong><strong>de</strong>s</strong><br />

garanties à ses utilisateurs. Il n’appartient plus à l’utilisateur <strong>de</strong> <strong>de</strong>voir déci<strong>de</strong>r quel<strong>le</strong>s<br />

ressources déployer mais plutôt <strong>de</strong> définir <strong><strong>de</strong>s</strong> bornes que <strong>le</strong> service doit satisfaire. Le<br />

<strong>cloud</strong> s’adaptera <strong>de</strong> manière à as<strong>sur</strong>er ses bornes.<br />

– La haute disponibilité : en jouant <strong>sur</strong> <strong><strong>de</strong>s</strong> <strong>données</strong> répliquées dans <strong><strong>de</strong>s</strong> centres <strong>de</strong> <strong>données</strong><br />

différents, <strong>le</strong> <strong>cloud</strong> doit fournir un service fiab<strong>le</strong>, non sensib<strong>le</strong> à la défaillance d’une<br />

instance voire d’un centre <strong>de</strong> <strong>données</strong>.<br />

Les aspects économiques du <strong>cloud</strong> séduisent <strong>de</strong> plus en plus <strong>le</strong>s sociétés. Parmi ces aspects,<br />

nous listons :<br />

– la réduction <strong><strong>de</strong>s</strong> coûts : son modè<strong>le</strong> <strong>de</strong> paiement à l’utilisation (Pay Per Use en anglais)<br />

signifie que l’utilisateur paie uniquement <strong>le</strong> service en fonction <strong>de</strong> son taux d’utilisation<br />

(alors qu’il payait par forfait auparavant).<br />

– Un retour <strong>sur</strong> l’investissement : Le paiement à l’utilisation est particulièrement intéressant<br />

pour <strong>le</strong>s entreprises <strong>de</strong> petite tail<strong>le</strong> qui peuvent à présent profiter <strong><strong>de</strong>s</strong> avantages<br />

d’un service fonctionnel dès <strong>le</strong> départ. L’idée sous-jacente est donc la suivante : <strong>le</strong> service<br />

<strong>de</strong>viendra coûteux pour une société dans la me<strong>sur</strong>e où il est fort utilisé, c’est-à-dire à la<br />

condition qu’il lui rapporte <strong>de</strong> l’argent. On passe dès lors <strong>de</strong> dépenses d’investissement<br />

en capital (l’achat <strong>de</strong> serveurs d’application) aux dépenses d’exploitation (l’achat <strong>de</strong><br />

ressources consommab<strong>le</strong>s).<br />

– Une démarche écologique : l’allocation <strong>de</strong> ressources à la stricte nécessité permet <strong>de</strong><br />

réduire la consommation énergique <strong><strong>de</strong>s</strong> parcs informatiques. Outre l’aspect économique,<br />

ces réductions énergétiques permettent <strong>de</strong> diminuer l’empreinte écologique <strong>de</strong> la société.<br />

2.1.3 Amazon<br />

Après avoir introduit <strong>le</strong> <strong>cloud</strong>, son contexte et ses caractéristiques, faisons un rapi<strong>de</strong> détour<br />

par la <strong><strong>de</strong>s</strong>cription d’une solution <strong>cloud</strong> reconnue pour sa stabilité et <strong>le</strong> nombre considérab<strong>le</strong><br />

d’applications qu’el<strong>le</strong> héberge : Amazon. Disposant d’une architecture <strong>cloud</strong> très aboutie,<br />

Amazon fournit à ses clients une liste <strong>de</strong> services ; <strong>le</strong> plus basique, l’elastic compute <strong>cloud</strong>,<br />

6


peut être vu <strong>de</strong> manière abstraite comme une instance dont <strong>le</strong>s ressources pourraient être<br />

ajustées à la <strong>de</strong>man<strong>de</strong>.<br />

Ce n’est qu’en combinant ce service basique à d’autres services (tels que <strong>le</strong> CloudWatch, l’<br />

Auto Scaling) que <strong>le</strong> client commencera à disposer d’une architecture qu’il exploitera tel son<br />

propre <strong>cloud</strong>. Afin <strong>de</strong> mieux comprendre <strong>le</strong> concept <strong>de</strong> services et l’interaction existant entre<br />

eux, reprenons ci-<strong><strong>de</strong>s</strong>sous quelques services proposé par Amazon. Ces services sont <strong>de</strong> type<br />

SaaS ; <strong>le</strong> client a accès à un service dont l’infrastructure sous-jacente lui est abstraite.<br />

“Amazon Elastic Compute Cloud (Amazon EC2) is a web service that provi<strong><strong>de</strong>s</strong><br />

resizab<strong>le</strong> compute capacity in the <strong>cloud</strong>. It is <strong><strong>de</strong>s</strong>igned to make web-sca<strong>le</strong> <strong>computing</strong><br />

easier for <strong>de</strong>velopers.” [1]<br />

Amazon Elastic Compute Cloud propose un service dont la capacité <strong>de</strong> calcul est redimensionnab<strong>le</strong>.<br />

Le terme “service” met en évi<strong>de</strong>nce la volonté <strong>de</strong> faire abstraction <strong><strong>de</strong>s</strong> composants<br />

physiques tandis que “redimensionnab<strong>le</strong>” fait référence à la possibilité d’adapter la capacité<br />

<strong>de</strong> calcul <strong>de</strong> cette instance virtuel<strong>le</strong> à la <strong>de</strong>man<strong>de</strong> du client. L’utilisateur du service profitera<br />

dès lors p<strong>le</strong>inement <strong><strong>de</strong>s</strong> avantages <strong>cloud</strong> sans avoir même à considérer l’environnement <strong>cloud</strong>.<br />

CloudWatch est un service qui fournit une <strong>sur</strong>veillance pour <strong>le</strong>s autres services Amazon.<br />

Il fournit une visibilité <strong><strong>de</strong>s</strong> ressources (usage CPU, mémoire) utilisées et <strong><strong>de</strong>s</strong> performances <strong>de</strong><br />

ces services. Cette visibilité permettra (lorsqu’on coup<strong>le</strong> CloudWatch à un autre service) <strong>de</strong><br />

déc<strong>le</strong>ncher certains triggers forts uti<strong>le</strong>s.<br />

Auto Scaling, couplé au service EC2 et CloudWatch, est un service qui permet d’ajuster<br />

la capacité <strong>de</strong> EC2 en fonction <strong>de</strong> la <strong>de</strong>man<strong>de</strong>. Ce service définit <strong><strong>de</strong>s</strong> conditions et <strong><strong>de</strong>s</strong> actions<br />

à effectuer lorsqu’el<strong>le</strong>s sont atteintes ; par exemp<strong>le</strong>, on peut déci<strong>de</strong>r d’ajouter 3 nouvel<strong>le</strong>s<br />

instances EC2 au parc lorsque l’utilisation moyenne <strong>de</strong> l’unité centra<strong>le</strong> atteint 70 %. Auto<br />

Scaling permet aussi <strong>de</strong> s’as<strong>sur</strong>er d’avoir un parc d’instances saines <strong>de</strong> tail<strong>le</strong> fixe en décidant<br />

donc <strong>de</strong> remplacer toute instance défaillante par une nouvel<strong>le</strong> saine.<br />

Elastic Load Balancing (traduit par Equilibreur <strong>de</strong> charge élastique) distribue automatiquement<br />

<strong>le</strong> trafic entrant à travers <strong>de</strong> multip<strong>le</strong>s instances EC2 appartenant, ou non, à la<br />

même zone <strong>de</strong> disponibilité. Elastic Load Balancing détecte aussi <strong>le</strong>s défaillances d’instances<br />

(appartenant à son domaine) et redirige <strong>le</strong> trafic qui <strong>le</strong>ur était <strong><strong>de</strong>s</strong>tiné (vers d’autres instances<br />

saines) jusqu’à ce que <strong>le</strong>s instances défaillantes soient assainies. On peut dès lors créer une<br />

tolérance à la défaillance 1 : en plaçant <strong><strong>de</strong>s</strong> instances EC2 dans différentes zones <strong>de</strong> disponibilité,<br />

<strong>le</strong> service Elastic Load Balancing peut automatiquement gérer <strong>le</strong> trafic (<strong>le</strong> diriger vers<br />

<strong><strong>de</strong>s</strong> instances saines). Couplé à Auto Scaling, on peut s’as<strong>sur</strong>er que <strong>le</strong> nombre d’instances sous<br />

Elastic Load Balancing ne soit jamais inférieur à un nombre voulu ou bien s’as<strong>sur</strong>er que <strong>le</strong><br />

temps <strong>de</strong> latence d’une application n’excè<strong>de</strong> jamais un seuil fixé par l’administrateur.<br />

Simp<strong>le</strong> Queue Service (SQS) est une fi<strong>le</strong> d’attente fiab<strong>le</strong> et capab<strong>le</strong> <strong>de</strong> monter à l’échel<strong>le</strong>.<br />

Utilisée pour transmettre <strong><strong>de</strong>s</strong> messages entre différents services, el<strong>le</strong> facilite la création d’un<br />

flux <strong>de</strong> travail automatisé.<br />

2.2 Définition du <strong>cloud</strong><br />

Dans cette section, nous tenterons une approche plus théorique <strong><strong>de</strong>s</strong> concepts énoncés<br />

précé<strong>de</strong>mment.<br />

1. Nous définirons <strong>le</strong> terme <strong>de</strong> tolérance à la défaillance dans la section 2.2.<br />

7


Le <strong>cloud</strong> dans la littérature<br />

“A <strong>cloud</strong> (...) is an “elastic execution environment of resources involving multip<strong>le</strong><br />

stakehol<strong>de</strong>rs and providing a metered service at multip<strong>le</strong> granularities for a specified<br />

<strong>le</strong>vel of quality (of service)”<br />

EU Expert Group [37]<br />

“Cloud <strong>computing</strong> is a mo<strong>de</strong>l for enabling convenient, on-<strong>de</strong>mand network access<br />

to a shared pool of configurab<strong>le</strong> <strong>computing</strong> resources (e.g., networks, servers, storage,<br />

applications, and services) that can be rapidly provisioned and re<strong>le</strong>ased with<br />

minimal management effort or service provi<strong>de</strong>r interaction.”<br />

National Institute of Standards and Technology [29]<br />

Ces <strong>de</strong>ux définitions ont retenu notre attention. Chacune propose <strong><strong>de</strong>s</strong> paradigmes fort<br />

intéressants même si réel<strong>le</strong>ment différents. Essayons <strong>de</strong> <strong>le</strong>s souligner :<br />

Les experts <strong>de</strong> l’Union Européenne mettent en avant la notion d’élasticité inhérente à<br />

notre mémoire. Ils soulignent aussi la nature hétérogène <strong>de</strong> ses acteurs (fournisseurs et clients)<br />

et enfin la notion <strong>de</strong> qualité <strong><strong>de</strong>s</strong> services fournis. Soulignons que cette notion <strong>de</strong> qualité <strong>de</strong><br />

services est un modè<strong>le</strong> essentiel du <strong>cloud</strong> qui, malheureusement, quitte <strong>le</strong> cadre <strong>de</strong> ce mémoire.<br />

L’institut national <strong><strong>de</strong>s</strong> standards et <strong>de</strong> la technologie met en avant <strong>le</strong>s caractéristiques<br />

d’adaptabilité et, sans la nommer comme tel<strong>le</strong>, l’élasticité du <strong>cloud</strong> qu’il définit comme la<br />

capacité <strong>de</strong> passer rapi<strong>de</strong>ment à l’échel<strong>le</strong> en nécessitant un minimum d’effort humain.<br />

On remarque que <strong>le</strong>s <strong>de</strong>ux définitions proposent une certaine abstraction en parlant <strong>de</strong><br />

ressources informatiques (définissant un large panel <strong>de</strong> composants). Un second point commun<br />

entre ces <strong>de</strong>ux définitions, <strong>le</strong>ur haut <strong>de</strong>gré d’abstraction, nous pousse à proposer notre propre<br />

définition du <strong>cloud</strong> (dans la suite <strong>de</strong> cette section) que nous voudrons plus précise.<br />

Cluster et <strong>cloud</strong><br />

Définition 1.<br />

Un cluster d’ordinateur est un parc d’ordinateurs interconnectés (on par<strong>le</strong> souvent<br />

<strong>de</strong> grappe) afin <strong>de</strong> partager <strong>le</strong>urs ressources dans un but commun.<br />

Définition 2.<br />

Un <strong>cloud</strong> est un modè<strong>le</strong> d’architecture qui fournit un parc d’instances virtuel<strong>le</strong>s<br />

capab<strong>le</strong> <strong>de</strong> s’auto-gérer et d’adapter ses capacités (modulo son support physique) <strong>de</strong><br />

manière dynamique et automatique à la charge à laquel<strong>le</strong> il est soumis.<br />

8


Le cluster est donc <strong>de</strong> manière assez basique l’architecture matériel<strong>le</strong> nécessaire au déploiement<br />

d’une solution <strong>cloud</strong>. La définition du <strong>cloud</strong> nécessite quant à el<strong>le</strong> quelques éclaircissements<br />

:<br />

– Les ressources que propose <strong>le</strong> <strong>cloud</strong> sont virtuel<strong>le</strong>s. On par<strong>le</strong> donc <strong>de</strong> ressources logiques<br />

(par opposition aux ressources physiques).<br />

– L’architecture est capab<strong>le</strong> <strong>de</strong> s’auto-gérer. Est comprise dans l’architecture toute la<br />

couche <strong>de</strong> gestion <strong><strong>de</strong>s</strong> instances, <strong><strong>de</strong>s</strong> défaillances, etc.<br />

– Le <strong>cloud</strong> est capab<strong>le</strong> <strong>de</strong> s’adapter à la charge en changeant <strong>le</strong> nombre <strong>de</strong> ses instances,<br />

ou en modifiant <strong>le</strong>urs caractéristiques.<br />

– Il est capab<strong>le</strong> <strong>de</strong> s’adapter <strong>de</strong> manière dynamique et automatique ; <strong>le</strong> <strong>cloud</strong> est capab<strong>le</strong><br />

<strong>de</strong> détecter lui-même ses propres défaillances et <strong>de</strong> ré-instancier <strong>le</strong>s modu<strong>le</strong>s nécessaires<br />

à son bon fonctionnement.<br />

– Il est aussi capab<strong>le</strong> <strong>de</strong> re<strong>le</strong>ver <strong>le</strong>s métriques re<strong>le</strong>vantes, <strong>de</strong> déterminer s’il procure un<br />

service satisfaisant et, s’il ne <strong>le</strong> fait pas, d’augmenter ses capacités (<strong>de</strong> s’adapter à la<br />

charge).<br />

Il existe naturel<strong>le</strong>ment une limite à sa capacité <strong>de</strong> s’adapter à la charge ; <strong>le</strong> <strong>cloud</strong> reposant<br />

<strong>sur</strong> un cluster, il ne pourra excé<strong>de</strong>r <strong>le</strong>s ressources dont il dispose. Remarquons néanmoins qu’un<br />

modè<strong>le</strong> public ou hybri<strong>de</strong> semb<strong>le</strong> dès lors assumer <strong><strong>de</strong>s</strong> variations <strong>de</strong> charge plus importantes.<br />

Mais cette capacité est toujours limitée par <strong>le</strong>s ressources physiques.<br />

Cloud et gril<strong>le</strong> <strong>de</strong> calcul<br />

La définition précé<strong>de</strong>nte peut provoquer une confusion entre <strong>le</strong> <strong>cloud</strong> et la gril<strong>le</strong> <strong>de</strong> calcul<br />

(grid en anglais). Effectivement, <strong>le</strong>urs architectures sont assez similaires mais ils sont <strong><strong>de</strong>s</strong>tinés<br />

à <strong><strong>de</strong>s</strong> fonctions bien différentes. Le <strong>cloud</strong>, comme nous l’avons vu, est <strong><strong>de</strong>s</strong>tiné à être capab<strong>le</strong><br />

<strong>de</strong> monter en charge c’est-à-dire traiter un nombre important <strong>de</strong> requêtes concurrentes.<br />

La gril<strong>le</strong> <strong>de</strong> calcul est plutôt <strong><strong>de</strong>s</strong>tinée à traiter un nombre plus réduit <strong>de</strong> requêtes. Ces<br />

requêtes sont, en règ<strong>le</strong> généra<strong>le</strong>, bien plus comp<strong>le</strong>xes et peuvent faci<strong>le</strong>ment être divisées en<br />

sous-requêtes qui seront adressées à d’autres nœuds. La figure 2.2 nous donne un aperçu visuel<br />

<strong>de</strong> cette différence.<br />

nombre <strong>de</strong> tâches<br />

Cloud<br />

Gril<strong>le</strong> <strong>de</strong> calcul<br />

comp<strong>le</strong>xité <strong>de</strong> la tâche<br />

Figure 2.2 – Cloud Vs Gril<strong>le</strong> <strong>de</strong> calcul<br />

9


Cette différence <strong>de</strong> vocation fait que <strong>le</strong> <strong>cloud</strong> et la gril<strong>le</strong> <strong>de</strong> calcul se pensent différemment.<br />

Néanmoins, on constate que certaines approches pensées pour l’un peuvent se décliner pour<br />

l’autre. Récemment, <strong>le</strong> concept <strong>de</strong> distribution-réduction (Map-Reduce en anglais), pensé<br />

à l’origine pour la gril<strong>le</strong> <strong>de</strong> calcul, semb<strong>le</strong> particulièrement bien s’adapter au <strong>cloud</strong>.<br />

2.3 Propriétés fondamenta<strong>le</strong>s <strong><strong>de</strong>s</strong> services<br />

Après ce tour d’horizon du <strong>cloud</strong>, décrivons à présent <strong>le</strong>s propriétés fondamenta<strong>le</strong>s <strong><strong>de</strong>s</strong><br />

services <strong>sur</strong> <strong>cloud</strong>. Notons que <strong>le</strong> SGBD est un service du <strong>cloud</strong>. A ce titre, toutes <strong>le</strong>s définitions<br />

suivantes sont immédiatement applicab<strong>le</strong>s aux <strong>bases</strong> <strong>de</strong> <strong>données</strong>. Nous conseillons donc au<br />

<strong>le</strong>cteur <strong>de</strong> <strong>le</strong>s lire en pensant au service <strong>de</strong> base <strong>de</strong> <strong>données</strong>.<br />

2.3.1 La haute disponibilité<br />

Définition 3.<br />

Un service est dit hautement disponib<strong>le</strong> (High availab<strong>le</strong> en anglais) si toute requête<br />

reçu par un nœud n’étant victime d’aucune défaillance retourne un résultat.<br />

traduit <strong>de</strong> [26]<br />

La haute disponibilité d’un service caractérise sa capacité à as<strong>sur</strong>er son effective accessibilité<br />

durant une pério<strong>de</strong> donnée. Le service <strong>de</strong>vra donc pouvoir détecter <strong>le</strong>s points <strong>de</strong><br />

défaillances et réduire l’impact <strong>de</strong> <strong>le</strong>ur potentiel<strong>le</strong> défaillance grâce à la mise en place <strong>de</strong><br />

techniques <strong>de</strong> redondance et/ou réplication.<br />

2.3.2 Passer à l’échel<strong>le</strong><br />

Un <strong><strong>de</strong>s</strong> principaux atouts d’une solution <strong>cloud</strong> est sa capacité à passer à l’échel<strong>le</strong> que<br />

nous décrirons plus loin. Définissons d’abord sa capacité à monter à l’échel<strong>le</strong> :<br />

Définition 4.<br />

La capacité à monter à l’échel<strong>le</strong> d’un service est sa capacité à pouvoir assumer<br />

une production constante lorsque <strong>le</strong> nombre <strong>de</strong> requêtes augmente.<br />

Cette définition ne fait intervenir aucune notion <strong>de</strong> dynamisme ; quel que soit <strong>le</strong> moyen<br />

d’étendre ses capacités, un <strong>cloud</strong> est capab<strong>le</strong> <strong>de</strong> monter à l’échel<strong>le</strong> s’il peut monter en charge<br />

jusqu’à sa limite (cel<strong>le</strong> <strong>de</strong> ses composants physiques). Plus précisément, on distingue <strong>de</strong>ux<br />

types <strong>de</strong> montée à l’échel<strong>le</strong> : vertica<strong>le</strong> et horizonta<strong>le</strong>.<br />

10


Définition 5.<br />

Considérant un service, sa capacité à monter à l’échel<strong>le</strong> vertica<strong>le</strong>ment est<br />

la propriété qui décrit l’évolution apportée à sa capacité <strong>de</strong> traitement lorsqu’on<br />

augmente ses ressources (CPU, mémoire, etc.).<br />

On dira donc, par exemp<strong>le</strong>, qu’un service est capab<strong>le</strong> <strong>de</strong> monter à l’échel<strong>le</strong> <strong>de</strong> manière<br />

vertica<strong>le</strong> en terme d’usage <strong>de</strong> mémoire RAM s’il est capab<strong>le</strong> d’augmenter ses performances<br />

lorsqu’on augmente sa mémoire RAM.<br />

Définition 6.<br />

Considérant un service, sa capacité à monter en charge horizonta<strong>le</strong>ment est<br />

la propriété qui décrit l’évolution apportée à sa capacité <strong>de</strong> traitement lorsqu’on<br />

augmente <strong>le</strong> nombre d’instances.<br />

On dira donc qu’un service est capab<strong>le</strong> <strong>de</strong> monter en charge (horizonta<strong>le</strong>ment) <strong>de</strong> manière<br />

linéaire 2 si une augmentation <strong>de</strong> X% <strong>de</strong> ses ressources augmente ses performances <strong>de</strong> X%.<br />

On remarque dès à présent que décrire l’augmentation du nombre d’instances en terme <strong>de</strong><br />

pourcentage est sujet à discussion, nous <strong>le</strong> discutons à la section 4.2. Supposons, à ce sta<strong>de</strong>,<br />

que chaque instance est i<strong>de</strong>ntique et que <strong>le</strong> pourcentage se résume donc au rapport du nombre<br />

d’instances futur <strong>sur</strong> <strong>le</strong> précé<strong>de</strong>nt.<br />

La plupart <strong><strong>de</strong>s</strong> solutions <strong>cloud</strong> mettent en avant <strong>le</strong>urs capacités à monter à l’échel<strong>le</strong> pour<br />

<strong><strong>de</strong>s</strong> raisons commercia<strong>le</strong>s. La capacité à <strong><strong>de</strong>s</strong>cendre à l’échel<strong>le</strong> est souvent négligée mais n’en<br />

est pas moins intéressante : pour <strong><strong>de</strong>s</strong> enjeux économiques et écologiques, il est très intéressant<br />

<strong>de</strong> pouvoir diminuer ses ressources lorsqu’el<strong>le</strong>s sont sous-exploitées.<br />

Le <strong>cloud</strong> doit être capab<strong>le</strong> <strong>de</strong> s’adapter et ceci ne peut se résumer à la capacité à monter<br />

à l’échel<strong>le</strong>. Il faut aussi considérer sa capacité à <strong><strong>de</strong>s</strong>cendre à l’échel<strong>le</strong>. L’union <strong>de</strong> ses <strong>de</strong>ux<br />

propriétés est sa capacité à passer à l’échel<strong>le</strong> que nous définissons comme suit :<br />

Définition 7.<br />

La capacité à passer à l’échel<strong>le</strong> d’un service (( Scalability en anglais), est sa<br />

capacité à pouvoir assumer la variation (<strong><strong>de</strong>s</strong>cente ou montée) <strong>de</strong> la charge à laquel<strong>le</strong><br />

il est soumis.<br />

2. Dans la suite <strong>de</strong> ce mémoire, nous nous intéressons particulièrement aux adaptations horizonta<strong>le</strong>s, qui<br />

sont particulières au <strong>cloud</strong>. Nous omettrons <strong>le</strong> terme horizontal et ne préciserons que lorsqu’il s’agira <strong><strong>de</strong>s</strong><br />

propriétés vertica<strong>le</strong>s.<br />

11


Par “assumer”, on entend fournir <strong><strong>de</strong>s</strong> performances constantes. De manière assez intuitive,<br />

on peut comprendre qu’un facteur pouvant caractériser cette capacité à passer à l’échel<strong>le</strong><br />

pourrait être <strong>le</strong> rapport entre <strong>le</strong> gain en performance et l’augmentation <strong><strong>de</strong>s</strong> ressources du<br />

service nécessaire à ce gain <strong>de</strong> performance.<br />

L’élasticité<br />

Dans cette section, nous proposerons notre définition <strong>de</strong> l’élasticité du <strong>cloud</strong> à titre d’introduction.<br />

Le chapitre 4 étudie <strong>de</strong> façon plus poussée l’élasticité.<br />

Définition 8.<br />

L’élasticité d’un service est sa capacité à passer à l’échel<strong>le</strong> <strong>de</strong> manière dynamique<br />

(c’est-à-dire sans nécessiter sa réinitialisation et sans entraîner <strong><strong>de</strong>s</strong> effets collatéraux<br />

trop importants).<br />

Par “collatéraux”, on entent <strong><strong>de</strong>s</strong> pertes en performance inacceptab<strong>le</strong>s. L’élasticité d’un<br />

service est une caractérisation <strong>de</strong> sa capacité à passer à l’échel<strong>le</strong> ; el<strong>le</strong> requiert son dynamisme.<br />

Le terme “dynamisme” signifie que <strong>le</strong> système sous-jacent au service doit être assez agi<strong>le</strong><br />

que pour garantir la continuité et la stabilité <strong>de</strong> ce <strong>de</strong>rnier. Listons <strong>le</strong>s conséquence <strong>de</strong> ces<br />

exigences :<br />

– Le service doit être continu ; son passage à l’échel<strong>le</strong> ne doit pas nécessiter sa réinitialisation.<br />

– Le service doit être continu et stab<strong>le</strong> ; <strong>le</strong>s modifications internes nécessaires à son passage<br />

à l’échel<strong>le</strong> ne doivent pas entrainer son inaccessibilité (ou <strong><strong>de</strong>s</strong> temps <strong>de</strong> réaction trop<br />

<strong>le</strong>nts).<br />

Les paramètres nécessaires à caractériser tout passage à l’échel<strong>le</strong> ne suffisent plus. Il s’agit<br />

aussi <strong>de</strong> pouvoir caractériser ses “effets collatéraux” ainsi que <strong>le</strong>urs impacts. Nous discutons <strong>de</strong><br />

ce sujet en section 4.3. Un service ne peut entrer dans <strong>le</strong> mouvement <strong>cloud</strong> qu’à la condition<br />

qu’il soit élastique : si son passage à l’échel<strong>le</strong> n’est pas dynamique, ce <strong>de</strong>rnier ne pourra pas<br />

être hautement disponib<strong>le</strong>.<br />

2.4 Le théorème CAP<br />

La spécificité du service base <strong>de</strong> <strong>données</strong> est qu’il stocke <strong><strong>de</strong>s</strong> <strong>données</strong> dont on doit pouvoir<br />

garantir une certaine intégrité. Cette contrainte est assez bloquante lorsqu’on pense <strong>le</strong>s <strong>bases</strong><br />

<strong>de</strong> <strong>données</strong> comme un service <strong>cloud</strong> c’est-à-dire capab<strong>le</strong> <strong>de</strong> monter à l’échel<strong>le</strong>. Ce problème<br />

peut être résumé par une conjecture connue sous <strong>le</strong> nom <strong>de</strong> théorème CAP 3 ou sous <strong>le</strong> nom<br />

<strong>de</strong> théorème <strong>de</strong> Brewer 4 .<br />

Cette conjecture est énoncée comme suit :<br />

3. Dans la suite <strong>de</strong> ce mémoire, nous par<strong>le</strong>rons <strong>de</strong> “CAP” pour signifier “<strong>le</strong> théorème CAP”.<br />

4. E. Brewer énonce cette conjecture en 2009. Remarquons que S. Gilbert et N. Lynch démontrent en 2002<br />

cette conjecture pour un modè<strong>le</strong> asynchrone <strong>de</strong> systèmes distribués [26].<br />

12


Conjecture 1.<br />

Parmi <strong>le</strong>s trois propriétés suivantes : consistance, haute disponibilité et tolérance à<br />

la partition, tout système <strong>de</strong> <strong>données</strong> distribué ne peut respecter, au plus, que <strong>de</strong>ux<br />

d’entre el<strong>le</strong>s.<br />

Consistency Availability<br />

To<strong>le</strong>rance to network<br />

Partitions<br />

You can have at most two<br />

of these properties for any<br />

shared-data system<br />

Figure 2.3 – CAP (reproduction <strong>de</strong> [18])<br />

CAP (représenté par la figure 2.3) introduit <strong>de</strong>ux propriétés relatives aux systèmes distribués<br />

qui nous sont inconnues. Nous allons maintenant <strong>le</strong>s décrire.<br />

La consistance <strong><strong>de</strong>s</strong> <strong>données</strong> 5 est un concept qui décrit <strong>le</strong>s mo<strong><strong>de</strong>s</strong> d’accès aux <strong>données</strong>,<br />

<strong>le</strong>ur intégrité et validée. Nous <strong>le</strong> verrons à la section 3.1.4, il existe plusieurs modè<strong>le</strong>s <strong>de</strong><br />

consistance <strong><strong>de</strong>s</strong> <strong>données</strong>. La consistance <strong><strong>de</strong>s</strong> <strong>données</strong>, tel<strong>le</strong> que CAP l’entend, décrit <strong>le</strong> fait<br />

que <strong>le</strong>s <strong>données</strong> auxquel<strong>le</strong>s on accè<strong>de</strong>ra seront toujours à jour.<br />

Pour <strong><strong>de</strong>s</strong> raisons <strong>de</strong> performance (passage à l’échel<strong>le</strong>) et <strong>de</strong> sécurité (réplication <strong><strong>de</strong>s</strong> <strong>données</strong>),<br />

<strong>le</strong>s systèmes distribués tirent profit du fait <strong>de</strong> pouvoir s’étirer <strong>sur</strong> plusieurs instances.<br />

Répartir un service <strong>sur</strong> <strong>de</strong> nombreuses instances augmente <strong>le</strong> risque <strong>de</strong> défaillance d’une partie<br />

du service et causer ainsi une partition du service en plusieurs sous-ensemb<strong>le</strong>s. Pour expliquer<br />

<strong>le</strong> phénomène <strong>de</strong> partition, imaginons notre service distribué <strong>sur</strong> <strong>de</strong>ux boites noires ; un phénomène<br />

<strong>de</strong> partition arrive lorsque <strong>le</strong> câb<strong>le</strong> reliant ces <strong>de</strong>ux boites noires est débranché ; <strong>le</strong>s <strong>de</strong>ux<br />

sous-systèmes ne sont plus capab<strong>le</strong>s <strong>de</strong> communiquer. Un service distribué tolérant à la partition<br />

est un système tel qu’un phénomène <strong>de</strong> partition n’altère pas son bon fonctionnement.<br />

Ou <strong>de</strong> manière plus pragmatique :<br />

5. Il faudrait par<strong>le</strong>r <strong>de</strong> la cohérence <strong><strong>de</strong>s</strong> <strong>données</strong> (data consistency en anglais) mais par abus <strong>de</strong> langage,<br />

nous parlons <strong>de</strong> la consistance <strong><strong>de</strong>s</strong> <strong>données</strong><br />

13


Définition 9.<br />

Dans un service tolérant à la partition, aucun ensemb<strong>le</strong> <strong>de</strong> défaillance autre que la<br />

défaillance <strong>de</strong> la totalité du réseau ne peut causer <strong><strong>de</strong>s</strong> réponses incorrectes du service.<br />

Discussion<br />

traduit <strong>de</strong> [26]<br />

CAP est un problème inhérent au <strong>cloud</strong> puisqu’on veut un service base <strong>de</strong> <strong>données</strong> hautement<br />

disponib<strong>le</strong> (en passant notamment par la bonne gestion du phénomène <strong>de</strong> partition)<br />

capab<strong>le</strong> <strong>de</strong> stocker <strong>de</strong> manière cohérente nos <strong>données</strong>. CAP retient dès lors l’attention d’un<br />

bon nombre d’acteurs. A titre d’exemp<strong>le</strong>, citons [42] et [19] qui l’illustrent par <strong><strong>de</strong>s</strong> exemp<strong>le</strong>s<br />

et discutent <strong>le</strong>s défis et enjeux <strong>de</strong> cette conjecture. Afin <strong>de</strong> mieux appréhen<strong>de</strong>r <strong>le</strong> phénomène<br />

introduit par CAP, nous tenons à résumer l’approche <strong>de</strong> D. Abadi [16] qui tend à critiquer<br />

CAP et en donner une approche plus pragmatique et une compréhension, à nos yeux, plus<br />

pertinente.<br />

Soulignons <strong>de</strong>ux problèmes à CAP vus par Abadi [16] :<br />

– Suivant CAP, nous aurons soit <strong><strong>de</strong>s</strong> systèmes dits CA (consistants et hautement disponib<strong>le</strong>s),<br />

CP (consistants et tolérants à la partition) ou AP (hautement disponib<strong>le</strong>s et<br />

tolérants à la partition). Il existe une asymétrie entre la va<strong>le</strong>ur <strong>de</strong> la disponibilité et <strong>de</strong><br />

la consistance : un système CP acceptera <strong>de</strong> sacrifier sa disponibilité mais seu<strong>le</strong>ment en<br />

cas <strong>de</strong> partition, tandis qu’un système AP déci<strong>de</strong>ra <strong>de</strong> sacrifier sa consistance tout <strong>le</strong><br />

temps.<br />

– Le second problème souligné est que, en pratique, la différence entre <strong>le</strong>s systèmes CA et<br />

CP est diffici<strong>le</strong> à discerner. En effet, que veut dire “non tolérant à la partition”? Dans la<br />

pratique, toujours selon Adabi, cela signifie que, en cas <strong>de</strong> partition, <strong>le</strong> système perdra<br />

en disponibilité. Il n’existe donc en pratique que <strong>de</strong>ux types <strong>de</strong> systèmes : CP/CA et<br />

AP.<br />

Il s’agit donc <strong>de</strong> remplacer CAP par PACELC :<br />

“if there is a partition (P) how does the system tra<strong>de</strong>off between availability and<br />

consistency (A and C) ; else (E) when the system is running as normal in the<br />

absence of partitions, how does the system tra<strong>de</strong>off between latency (L) and consistency<br />

(C) ?”<br />

Dans la pratique, <strong>le</strong>s systèmes AP – qui ont tendance à relâcher la consistance en cas<br />

<strong>de</strong> partition – tireront aussi profit <strong>de</strong> ce relâchement pour une améliorer <strong>le</strong>urs performances<br />

lorsqu’il n’y a pas <strong>de</strong> partition du système. Ces systèmes sont donc, dans la théorie d’Abadi<br />

<strong><strong>de</strong>s</strong> systèmes PA/EL.<br />

Nous tenterons dans la suite <strong>de</strong> ce mémoire, <strong>de</strong> classifier <strong>le</strong>s différents SGBDs non seu<strong>le</strong>ment<br />

en fonction <strong>de</strong> CAP mais aussi en fonction <strong>de</strong> PACELC.<br />

[16]<br />

14


Chapitre 3<br />

Etu<strong>de</strong> comparative <strong>de</strong> différents<br />

systèmes <strong>de</strong> gestion <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong><br />

<strong>données</strong><br />

Dans ce chapitre, nous proposerons une analyse <strong><strong>de</strong>s</strong> différentes dimensions caractérisant un<br />

SGBD <strong>sur</strong> <strong>cloud</strong>. Nous ferons un tour d’horizon du courant SQL et <strong>de</strong> ses systèmes distribués<br />

(section 3.2). Nous introduirons éga<strong>le</strong>ment <strong>le</strong> nouveau courant dit NoSQL et ses concepts<br />

(section 3.3).<br />

Nous analyserons ensuite, <strong>de</strong> manière plus approfondie, trois différentes solutions NoSQL :<br />

MongoDB [10], Cassandra [5] et Hbase [6] et étudierons <strong>de</strong> manière plus abstraite Vol<strong>de</strong>mort<br />

[12].<br />

Nous résumerons fina<strong>le</strong>ment ces analyses et comparerons ces différents systèmes grâce aux<br />

dimensions préalab<strong>le</strong>ment établies.<br />

3.1 Classification <strong><strong>de</strong>s</strong> systèmes<br />

Examinons tout d’abord <strong>le</strong>s différentes décisions architectura<strong>le</strong>s caractérisant un SGBD,<br />

à savoir :<br />

– Le modè<strong>le</strong> <strong>de</strong> <strong>données</strong><br />

– Le choix CAP<br />

– Le choix PACELC<br />

– La réplication synchrone ou asynchrone<br />

– Le modè<strong>le</strong> <strong>de</strong> consistance<br />

– Le modè<strong>le</strong> <strong>de</strong> requêtes<br />

Remarquons que <strong>le</strong>s quelques autres étu<strong><strong>de</strong>s</strong> comparatives <strong>de</strong> SGDBs ([20], [17], [40]) nous<br />

servant <strong>de</strong> référence, s’attar<strong>de</strong>nt <strong>sur</strong> <strong>le</strong>urs licences, <strong>le</strong>ur langages <strong>de</strong> programmations, etc. Dans<br />

<strong>le</strong> cadre <strong>de</strong> notre analyse, nous ne pensons pas que ces dimensions apporteraient une va<strong>le</strong>ur<br />

ajoutée.<br />

3.1.1 Le modè<strong>le</strong> <strong>de</strong> <strong>données</strong><br />

Le modè<strong>le</strong> <strong>de</strong> <strong>données</strong> caractérise l’architecture, <strong>le</strong> schéma logique respecté pour décrire<br />

<strong>le</strong>s <strong>données</strong> stockées ; allant d’un modè<strong>le</strong> simpliste clé-va<strong>le</strong>ur jusqu’au modè<strong>le</strong> comp<strong>le</strong>xe re-<br />

15


on-OLTP applications that<br />

ured and unstructured data<br />

ciency than RDBMs and<br />

stem<br />

ncing, garbage col<strong>le</strong>ction<br />

ypertab<strong>le</strong>)<br />

ystem<br />

No<strong>de</strong> No<strong>de</strong><br />

Topology<br />

Tab<strong>le</strong>t<br />

Server n<br />

FS n<br />

(a commit doesn’t occur<br />

n to at <strong>le</strong>ast two separate<br />

s are optimized for writes<br />

are formatted to hand<strong>le</strong><br />

<br />

The NoSQL database<br />

rocessing (mapReduce,<br />

<br />

nterpart to the data grid<br />

feeds the computational<br />

he NoSQL database.<br />

<br />

continuing to operate)<br />

<br />

failures cause the system to fail)<br />

Since only two of these characteristics are guaranteed for any<br />

given scalab<strong>le</strong> system, use your functional specification and<br />

16<br />

business SLA (service <strong>le</strong>vel agreement) to <strong>de</strong>termine what your<br />

<br />

lationnel. Cette dimension aura <strong><strong>de</strong>s</strong> répercussions <strong>sur</strong> <strong>le</strong>s performances et la réputation <strong><strong>de</strong>s</strong><br />

your requirements, and proceed to imp<strong>le</strong>ment the appropriate<br />

SGBDs.<br />

technology.<br />

De manière intuitive, on peut comprendre que <strong>le</strong> modè<strong>le</strong> <strong>le</strong> plus basique atteindra <strong>de</strong><br />

meil<strong>le</strong>ures performances vu qu’il est plus proche <strong><strong>de</strong>s</strong> mécanismes <strong>de</strong> la machine physique.<br />

Tandis, qu’un modè<strong>le</strong> <strong>de</strong> plus Ru<strong>le</strong> haut of Thumb: niveau, NoSQL’s permettant primary une goal modélisation is to achieve plus abstraite, éloi-<br />

Hot<br />

gnée <strong><strong>de</strong>s</strong> composants physiques horizontal et plus scalability. procheIt Tip<br />

<strong>de</strong> attains l’application this by reducing en verra ses performances<br />

réduites mais une utilisationtransactional bien plus aisée. semantics and referential integrity.<br />

3.1.2 Les choix CAP et PACELC <br />

<br />

Comme décrit en section 2.4, chaque système s’inscrit parmi <strong>le</strong>s trois systèmes CA, CP et<br />

NoSQL systems listed.<br />

AP décrit par CAP ou peut se catégoriser via la proposition PACELC d’Abadi.<br />

Consistency Availability<br />

RDBMs (Orac<strong>le</strong>, MySQL), Aster Data, Green Plum, Vertica<br />

C A<br />

mongoDB, Terrastore, Datastore, Hypertab<strong>le</strong>, Hbase,<br />

Redis, Berke<strong>le</strong>y DB, MemcacheDB, Scalaris<br />

Relational<br />

Key-Value<br />

Column-Oriented<br />

Document-Oriented<br />

Pick Any Two<br />

P<br />

Partition to<strong>le</strong>rance<br />

Dynamo, Vol<strong>de</strong>mort, Tokyo Cabinet, KAI, Cassandra,<br />

Simp<strong>le</strong>DB, CouchDB, Riak<br />

Figure 3 - CAP Se<strong>le</strong>ction Chart<br />

(source: Nathan Hurst's Blog)<br />

Figure 3.1 – Classification <strong><strong>de</strong>s</strong> systèmes grâce à CAP [22]<br />

DZone, La catégorisation Inc. | www.dzone.com via CAP est fort uti<strong>le</strong> ; el<strong>le</strong> permet en seu<strong>le</strong>ment <strong>de</strong>ux <strong>le</strong>ttres <strong>de</strong> comprendre<br />

la politique voulue par un système (voir figure 3.1). Toutefois, nous estimons que<br />

PACELC semb<strong>le</strong> bien plus <strong><strong>de</strong>s</strong>criptif et dès lors mérite d’être repris lors <strong>de</strong> notre analyse<br />

comparative. Remarquons que la classification <strong><strong>de</strong>s</strong> systèmes via PACELC ne va pas du tout<br />

à l’encontre <strong>de</strong> CAP mais permet une meil<strong>le</strong>ure compréhension.<br />

3.1.3 La réplication synchrone ou asynchrone<br />

La réplication <strong>de</strong> <strong>données</strong> est <strong>le</strong> processus consistant à maintenir R copies d’un ensemb<strong>le</strong><br />

<strong>de</strong> <strong>données</strong> <strong>sur</strong> d’autres instances <strong>de</strong> stockage. Ce nombre <strong>de</strong> copies (R) est appelé facteur <strong>de</strong><br />

réplication. La réplication peut servir à rendre <strong>le</strong> système plus disponib<strong>le</strong> (en redirigeant <strong>le</strong><br />

trafic d’une instance défaillante vers sa réplique), à éviter la perte <strong>de</strong> <strong>données</strong> et à améliorer<br />

<strong>le</strong>s performances (en divisant et redirigeant la charge d’une instance vers ses répliques).


Plusieurs approches sont possib<strong>le</strong>s pour la réplication : la réplication synchrone et la<br />

réplication asynchrone.<br />

– La réplication synchrone s’as<strong>sur</strong>e que toutes <strong>le</strong>s copies soient à jour, ce qui peut potentiel<strong>le</strong>ment<br />

entrainer <strong><strong>de</strong>s</strong> temps <strong>de</strong> réponses plus <strong>le</strong>nts lors <strong><strong>de</strong>s</strong> mises-à-jour. Remarquons<br />

que <strong>le</strong> mo<strong>de</strong> <strong>de</strong> réplication synchrone peut être bloquant pour la disponibilité : si une<br />

réplique connaît une défaillance, <strong>le</strong> système pourrait rester bloqué.<br />

– Dans une réplication asynchrone, une instance mère stocke <strong>le</strong>s <strong>données</strong> actualisées et<br />

transmet <strong>le</strong>s <strong>données</strong> modifiées aux répliques <strong>de</strong> manière différée. Il existe donc très<br />

certainement un gain à l’écriture <strong><strong>de</strong>s</strong> <strong>données</strong> (on doit s’as<strong>sur</strong>er que la modification n’ait<br />

eu lieu que <strong>sur</strong> une seu<strong>le</strong> copie) mais celui-ci implique <strong>le</strong> risque <strong>de</strong> perdre <strong><strong>de</strong>s</strong> <strong>données</strong><br />

si l’instance mère connait une défaillance avant d’avoir pu transmettre l’information<br />

aux répliques. Ce mo<strong>de</strong> <strong>de</strong> réplication peut aussi impliquer la nécessité <strong>de</strong> mécanismes<br />

d’assemblage <strong>de</strong> versions pour assemb<strong>le</strong>r différentes versions d’une donnée en une seu<strong>le</strong><br />

va<strong>le</strong>ur mise-à-jour.<br />

Comme nous l’avons déjà mentionné, <strong>le</strong> mo<strong>de</strong> <strong>de</strong> réplication a une forte influence <strong>sur</strong> <strong>le</strong><br />

comportement du système. Il est donc nécessaire d’entendre <strong>le</strong> mo<strong>de</strong> <strong>de</strong> réplication comme<br />

une dimension <strong>de</strong> notre étu<strong>de</strong> comparative.<br />

3.1.4 Le modè<strong>le</strong> <strong>de</strong> consistance<br />

En réponse à la montée en charge exceptionnel<strong>le</strong> à laquel<strong>le</strong> <strong>de</strong> nombreux acteurs ont dû<br />

faire face, ceux-ci ont créé <strong><strong>de</strong>s</strong> systèmes relâchant la consistance transactionnel<strong>le</strong> pour passer<br />

à un autre modè<strong>le</strong> <strong>de</strong> consistance. Ces nouveaux modè<strong>le</strong>s ont une influence théorique très<br />

importante <strong>sur</strong> <strong>le</strong>s performances, la disponibilité et la tolérance à la partition (cf. CAP). Mais<br />

ce niveau <strong>de</strong> relâchement ne peut être accepté par toute application (on imagine mal une<br />

application bancaire accepter <strong>de</strong> perdre <strong><strong>de</strong>s</strong> transactions faites par ses clients).<br />

Les modè<strong>le</strong>s <strong>de</strong> consistance proposés par <strong>le</strong>s SGBDs sont donc une caractéristique très<br />

significative et importante. Nous pouvons distinguer, en fonction <strong>de</strong> <strong>le</strong>ur <strong>de</strong>gré <strong>de</strong> consistance,<br />

quatre sous-ensemb<strong>le</strong>s <strong>de</strong> modè<strong>le</strong>s (du plus faib<strong>le</strong> au plus fort) :<br />

– Fina<strong>le</strong>ment consistant : garantit que si aucune modification n’est faite <strong>sur</strong> la donnée,<br />

<strong>le</strong>s accès en <strong>le</strong>cture <strong>sur</strong> la donnée retournent fina<strong>le</strong>ment sa va<strong>le</strong>ur actualisée [42]. Ceci<br />

peut notamment se faire par <strong><strong>de</strong>s</strong> systèmes <strong>de</strong> réparation à la <strong>le</strong>cture (nous verrons dans<br />

ce chapitre <strong>le</strong>s techniques mises en place par <strong>le</strong>s différentes SGBDs).<br />

– Consistance forte : s’as<strong>sur</strong>e que chaque <strong>le</strong>cture d’une va<strong>le</strong>ur retourne la va<strong>le</strong>ur actuel<strong>le</strong><br />

<strong>de</strong> la va<strong>le</strong>ur (c’est-à-dire la va<strong>le</strong>ur <strong>de</strong> la <strong>de</strong>rnière écriture réussie et finie).<br />

– Le verrouillage d’entrée signifie que l’on va pouvoir verrouil<strong>le</strong>r une entrée et donc garantir<br />

son intégrité.<br />

– Transactionnel : S’as<strong>sur</strong>e qu’une transaction respecte <strong>le</strong>s propriétés ACID (voir section<br />

3.2.2)<br />

3.1.5 Le modè<strong>le</strong> <strong>de</strong> requêtes<br />

Le modè<strong>le</strong> <strong>de</strong> requêtes comprend <strong>le</strong> langage <strong>de</strong> communication et <strong>le</strong>s requêtes qu’il est<br />

possib<strong>le</strong> <strong>de</strong> faire <strong>sur</strong> la BD. Celui <strong><strong>de</strong>s</strong> SGBDs relationnels (SGBDRs) traditionnels était riche<br />

et plus ou moins similaire pour chaque système. Ceux <strong><strong>de</strong>s</strong> nouveaux systèmes sont, en règ<strong>le</strong><br />

généra<strong>le</strong>, bien plus pauvres et diffèrent fortement d’un système à l’autre.<br />

17


Or la richesse du modè<strong>le</strong> <strong>de</strong> requêtes sera un argument prépondérant lors du choix du<br />

SGBD. De plus, el<strong>le</strong> peut aussi avoir son impact <strong>sur</strong> <strong>le</strong>s performances <strong>de</strong> celui-ci. Par exemp<strong>le</strong>,<br />

un modè<strong>le</strong> permettant l’utilisation <strong>de</strong> fonctions Map-Reduce (MR) permettra, en répartissant<br />

une charge en sous-charges, <strong>de</strong> traiter plus aisément <strong><strong>de</strong>s</strong> requêtes comp<strong>le</strong>xes.<br />

3.2 Les <strong>bases</strong> <strong>de</strong> <strong>données</strong> relationnel<strong>le</strong>s distribuées<br />

Des “<strong>bases</strong> <strong>de</strong> <strong>données</strong> relationnel<strong>le</strong>s extensib<strong>le</strong>s” tel est <strong>le</strong> terme utilisé par Catell pour<br />

décrire <strong>le</strong>s SGBDRs adaptés aux clusters. Les SGBDRs traditionnels ont été développés durant<br />

<strong>le</strong>s <strong>de</strong>rnières décennies et sont généra<strong>le</strong>ment la meil<strong>le</strong>ure solution <strong>sur</strong> <strong>le</strong> marché pour <strong>le</strong>s<br />

services ne <strong>de</strong>vant pas passer à l’échel<strong>le</strong> : ils sont pensés pour tenir <strong>sur</strong> une seu<strong>le</strong> instance.<br />

Dans cette section, nous décrirons <strong>le</strong>urs adaptations au cluster ainsi que <strong>le</strong>s mécanismes mis<br />

en place pour permettre <strong>de</strong> <strong>le</strong>s distribuer <strong>sur</strong> plusieurs instances.<br />

3.2.1 Le modè<strong>le</strong> <strong>de</strong> <strong>données</strong> relationnel<br />

Un schéma relationnel est essentiel<strong>le</strong>ment un groupe <strong>de</strong> tab<strong>le</strong>s représentant <strong><strong>de</strong>s</strong> objets et<br />

<strong><strong>de</strong>s</strong> relations entre ceux-ci. Ces tab<strong>le</strong>s, faites <strong>de</strong> lignes et colonnes, peuvent être interrogées à<br />

l’ai<strong>de</strong> d’un langage d’interrogation structuré (SQL).<br />

Dans un schéma relationnel, <strong>le</strong>s tab<strong>le</strong>s sont normalisées dans <strong>le</strong> but d’éviter <strong>le</strong>s doublons et<br />

<strong>de</strong> consoli<strong>de</strong>r <strong>le</strong>s <strong>données</strong>. Chaque entité ou relation possè<strong>de</strong> une représentation minimaliste<br />

qui peut s’étendre grâce à <strong><strong>de</strong>s</strong> jointures <strong><strong>de</strong>s</strong> tab<strong>le</strong>s.<br />

3.2.2 Les propriétés ACID<br />

Les SGBDRs traditionnels reposent <strong>sur</strong> la notion <strong>de</strong> transaction et la propriété ACID. La<br />

notion <strong>de</strong> transaction dans <strong>le</strong>s BD décrit une interaction qui fait passer une BD d’un état A<br />

à un état B tout en satisfaisant <strong>le</strong>s propriétés d’atomicité, <strong>de</strong> consistance, d’isolation et <strong>de</strong><br />

durabilité (ACID) :<br />

– Atomicité : l’ensemb<strong>le</strong> <strong><strong>de</strong>s</strong> opérations est une suite indissociab<strong>le</strong> c’est-à-dire qu’en cas<br />

d’échec d’une opération, tout l’ensemb<strong>le</strong> sera annulé (y compris <strong>le</strong>s opérations précé<strong>de</strong>ntes).<br />

– Consistance : <strong>le</strong> résultat <strong>de</strong> l’ensemb<strong>le</strong> <strong><strong>de</strong>s</strong> opérations doit être cohérent. Les règ<strong>le</strong>s <strong>de</strong><br />

cohérence varient en fonction <strong>de</strong> la sémantique <strong><strong>de</strong>s</strong> <strong>données</strong>.<br />

– Isolation : lorsque <strong>de</strong>ux transactions ont lieu en même temps, <strong>le</strong>s modifications effectuées<br />

par la première ne sont visib<strong>le</strong>s par la secon<strong>de</strong> que lorsque la première est terminée et<br />

validée.<br />

– Durabilité : une transaction terminée ne peut être annulée ou recouverte.<br />

3.2.3 MySQL Cluster<br />

Comme premier élément <strong>de</strong> tour d’horizon, nous nous attardons <strong>sur</strong> MySQL Cluster [8]<br />

car c’est la solution SQL la plus mature. Il s’agit une version <strong>de</strong> MySQL sortie en 2004 qui<br />

remplace <strong>le</strong> moteur InnoDB par une nouvel<strong>le</strong> couche distribuée NDB [20]. MySQL Cluster<br />

respecte <strong>le</strong> modè<strong>le</strong> “ne partageant rien” (shared nothing en anglais) et distribue <strong>le</strong>s <strong>données</strong><br />

<strong>sur</strong> <strong><strong>de</strong>s</strong> nœuds multip<strong>le</strong>s.<br />

18


Choix CAP et PACELC Les systèmes respectant la propriété ACID sont <strong><strong>de</strong>s</strong> systèmes CA<br />

(point <strong>de</strong> vue CAP), c’est-à-dire que pour préserver l’intégrité <strong>de</strong> <strong>le</strong>urs <strong>données</strong>, ils sont prêts<br />

à sacrifier la tolérance à la partition. MySQL Cluster a choisi <strong>de</strong> préserver la consistance au<br />

détriment <strong><strong>de</strong>s</strong> performances et <strong>de</strong> la tolérance à la partition. Ces systèmes sont donc PC/LC.<br />

En cas <strong>de</strong> partition, vu son modè<strong>le</strong> <strong>de</strong> réplication synchrone, MySQL cluster empêchera <strong>le</strong>s<br />

opérations <strong>de</strong> mises-à-jour.<br />

Réplication Pour éviter <strong>de</strong> propager la fail<strong>le</strong> d’une instance, <strong>le</strong>s <strong>données</strong> sont répliquées <strong>de</strong><br />

façon synchrone[8] c’est-à-dire que lors <strong>de</strong> l’écriture (insertion ou mise-à-jour) d’une entrée,<br />

l’information est propagée <strong>sur</strong> toutes <strong>le</strong>s répliques et l’opération n’est validée que lorsque<br />

toutes <strong>le</strong>s répliques l’ont validée.<br />

Dans <strong>le</strong> cas où toutes <strong>le</strong>s répliques d’une donnée sont à jour, si une instance subit une défaillance,<br />

on peut alors rediriger son trafic <strong>sur</strong> une réplique et éviter ainsi que cette défaillance<br />

soit fata<strong>le</strong> pour tout <strong>le</strong> système.<br />

Modè<strong>le</strong> <strong>de</strong> consistance MySQL Cluster, vu son respect <strong><strong>de</strong>s</strong> propriétés ACID, opte pour<br />

une consistance transactionnel<strong>le</strong>. En pratique, MySQL Cluster ne propose pas <strong>de</strong> consistance<br />

transactionnel<strong>le</strong> complète mais une consistance transactionnel<strong>le</strong> Read Committed [8]. Lors<br />

d’une <strong>le</strong>cture, la requête voit <strong>le</strong>s <strong>données</strong> tel<strong>le</strong>s qu’el<strong>le</strong>s sont avant que la requêtes ait été<br />

effectuée : <strong>le</strong>s modifications validées par <strong>le</strong>s transactions concurrentes sont retournées par la<br />

<strong>le</strong>cture.<br />

Le modè<strong>le</strong> <strong>de</strong> requêtes MySQL Cluster gar<strong>de</strong> toute la richesse <strong><strong>de</strong>s</strong> versions non distribuées<br />

<strong>de</strong> MySQL. On peut effectuer toutes <strong>le</strong>s requêtes SQL comme si la BD n’était pas distribuée<br />

et tous <strong>le</strong>s mécanismes internes sont transparents pour l’utilisateur.<br />

3.2.4 Autres solutions SQL<br />

Dans cette section, nous passerons en revue quelques initiatives SQL entreprises. Nous<br />

ne nous attar<strong>de</strong>rons pas <strong>sur</strong> cel<strong>le</strong>s-ci car, même si <strong>le</strong>urs concepts sont très intéressants, ces<br />

solutions ne sont pas encore matures. Il est donc fort diffici<strong>le</strong> <strong>de</strong> juger <strong>de</strong> <strong>le</strong>ur efficacité.<br />

De manière théorique, nous suivons l’avis <strong>de</strong> Catell pour dire que <strong>le</strong>s SGBDRs <strong>de</strong>vraient<br />

être capab<strong>le</strong>s <strong>de</strong> passer à l’échel<strong>le</strong> tant que <strong>le</strong>s applications évitent <strong>le</strong>s opérations traversant<br />

plusieurs nœuds et <strong><strong>de</strong>s</strong> transactions <strong>de</strong> gran<strong>de</strong> amp<strong>le</strong>ur [20]. On remarque que cette concession<br />

n’affecte pas <strong>le</strong>ur capacité à concurrencer <strong>le</strong>s solutions NoSQL (étudiées en section 3.3) qui<br />

traitent aussi diffici<strong>le</strong>ment (voire ne sont pas du tout capab<strong>le</strong>s <strong>de</strong> traiter) <strong>de</strong> tel<strong>le</strong>s opérations.<br />

Sca<strong>le</strong>DB [11] se veut la version MySQL <strong>de</strong> Orac<strong>le</strong> RAC. Tout comme MySQL Cluster, il<br />

se place <strong>sur</strong> une version <strong>de</strong> MySQL en remplaçant InnoDB. Son principe est <strong>de</strong> se reposer <strong>sur</strong><br />

une architecture à mémoire partagée (shared memory en anglais) : tout nœud a accès à tout<br />

disque. La distribution <strong><strong>de</strong>s</strong> <strong>données</strong> est automatique au travers <strong><strong>de</strong>s</strong> serveurs. Sca<strong>le</strong>DB n’utilise<br />

pas <strong>de</strong> réplication mais <strong><strong>de</strong>s</strong> sauvegar<strong><strong>de</strong>s</strong> sont faites <strong>sur</strong> disque (pour récupérer <strong>le</strong>s <strong>données</strong> en<br />

cas <strong>de</strong> défaillances).<br />

19


3.2.5 Les solutions SQL-MR<br />

Map-Reduce<br />

MapReduce est un modè<strong>le</strong> <strong>de</strong> programmation (initié par Goog<strong>le</strong>) pour manipu<strong>le</strong>r et gérer<br />

un large ensemb<strong>le</strong> <strong>de</strong> <strong>données</strong>. Le principe est relativement simp<strong>le</strong> ; l’utilisateur définit un<br />

schéma <strong>de</strong> redirection et une fonction <strong>de</strong> réduction [28]. Un nœud peut alors, en suivant <strong>le</strong><br />

schéma <strong>de</strong> redirection (Map), diviser une charge en plusieurs sous-charges qu’il soumettra<br />

à ses nœuds fils (l’opération peut être récursive). Les nœuds sous-traitants remontent <strong>le</strong>urs<br />

résultats au nœud parent qui combine ces résultats via la fonction <strong>de</strong> réduction.<br />

SQL-MR<br />

SQL-MR unit un système SQL épuré au concept <strong>de</strong> MapReduce. Les fonctions <strong>de</strong> réduction<br />

se chargent <strong>de</strong> toutes <strong>le</strong>s tâches non relationnel<strong>le</strong>s et optimisations liées au domaine [24].<br />

Ces fonctions (qui peuvent être écrites dans <strong>de</strong> nombreux langages <strong>de</strong> programmation)<br />

sont, par défaut, parallè<strong>le</strong>s. Les requêtes sont donc prises en charge par ces fonctions et<br />

distribuées en parallè<strong>le</strong> <strong>sur</strong> <strong>le</strong>s nœuds du cluster, ce qui as<strong>sur</strong>e au système <strong>de</strong> supporter la<br />

montée en charge. Les fonctions reçoivent <strong><strong>de</strong>s</strong> relations (tab<strong>le</strong>s) en entrée et retournent <strong><strong>de</strong>s</strong><br />

relations. El<strong>le</strong>s sont adaptatives c’est-à-dire qu’en fonction du contexte, el<strong>le</strong>s déterminent<br />

quel<strong>le</strong>s relations retourner.<br />

Les systèmes SQL-MR<br />

Les systèmes SQL-MR <strong>le</strong>s plus reconnus sont AsterData, VoltDB et Greenplum.<br />

VoltDB [13] est une nouvel<strong>le</strong> solution open-source qui est pensée pour être performante<br />

<strong>sur</strong> chaque nœud et capab<strong>le</strong> <strong>de</strong> passer à l’échel<strong>le</strong> (notamment grâce au fait qu’il est orienté<br />

colonnes). Les tab<strong>le</strong>s sont partitionnées et distribuées <strong>sur</strong> <strong>le</strong>s différents nœuds <strong>de</strong> manière<br />

automatique (mais l’utilisateur peut en définir <strong>le</strong>s paramètres). Les <strong>données</strong> peuvent être<br />

répliquées (réplication synchrone) et l’application peut distribuer ses requêtes <strong>de</strong> <strong>le</strong>cture <strong>sur</strong><br />

<strong>le</strong>s répliques pour améliorer ses performances.<br />

VoltDB propose <strong><strong>de</strong>s</strong> solutions intéressantes (même si el<strong>le</strong>s ne sont pas encore mises en<br />

place) : <strong>le</strong>s in<strong>de</strong>xes et la structure <strong><strong>de</strong>s</strong> <strong>données</strong> sont pensées pour s’adapter à une BD qui<br />

tiendrait entièrement en mémoire. Cette solution optimise nettement <strong>le</strong>s écritures. VoltDB<br />

serait 100 fois plus rapi<strong>de</strong> que MySQL et 13 fois plus rapi<strong>de</strong> que Cassandra [34].<br />

3.3 Le mouvement NoSQL<br />

Les systèmes NoSQL (Not Only SQL) proposent <strong>de</strong> <strong>sur</strong>prenantes architectures quittant<br />

<strong>le</strong> chemin relationnel. Le message transmis est que, si on veut une BD capab<strong>le</strong> <strong>de</strong> passer à<br />

l’échel<strong>le</strong>, on ne peut plus utiliser un SGBDR. Nous examinons dans cette partie <strong>le</strong>s concepts<br />

variés qu’ils mettent en place.<br />

Dans cette section, nous donnerons un aperçu <strong><strong>de</strong>s</strong> différents modè<strong>le</strong>s <strong>de</strong> <strong>données</strong> du mouvement<br />

NoSQL (section 3.3.1) et du paradigme BASE (section 3.3.2) qu’il propose en réponse<br />

aux propriétés ACID <strong><strong>de</strong>s</strong> solutions SQL.<br />

Les sections 3.4, 3.5 et 3.6 décrivent <strong>de</strong> manière approfondie <strong>le</strong>s moyens mis en place par<br />

MongoDB, Cassandra et HBase. La section 3.7 donne un aperçu <strong>de</strong> Vol<strong>de</strong>mort.<br />

20


3.3.1 Les modè<strong>le</strong>s <strong>de</strong> <strong>données</strong><br />

Les différents systèmes NoSQL utilisent <strong><strong>de</strong>s</strong> terminologies fort différentes. Cattell [20]<br />

différencie comme suit <strong>le</strong>s modè<strong>le</strong>s <strong>de</strong> structure qu’ils adoptent :<br />

– Un n-up<strong>le</strong>t est un ensemb<strong>le</strong> <strong>de</strong> paires clé-va<strong>le</strong>ur tel<strong>le</strong>s que <strong>le</strong>s noms d’attributs sont<br />

définis dans <strong>le</strong> schéma et <strong>le</strong>s va<strong>le</strong>urs sont basiques. On par<strong>le</strong> souvent <strong>de</strong> modè<strong>le</strong> cléva<strong>le</strong>ur<br />

– un document est un ensemb<strong>le</strong> <strong>de</strong> paires clé-va<strong>le</strong>ur tel<strong>le</strong>s que <strong>le</strong>s va<strong>le</strong>urs peuvent être<br />

composées (d’autres paires clé-va<strong>le</strong>ur) et que <strong>le</strong>s noms d’attributs sont définis dynamiquement<br />

pour chaque document.<br />

– Une entrée extensib<strong>le</strong> est un hybri<strong>de</strong> entre un n-up<strong>le</strong>t et un document où <strong><strong>de</strong>s</strong> famil<strong>le</strong>s<br />

d’attributs sont définies dans <strong>le</strong> schéma tout en permettant <strong>de</strong> définir <strong>de</strong> nouveaux<br />

attributs à la volée. On par<strong>le</strong> souvent <strong>de</strong> modè<strong>le</strong>s orientés colonnes voire orientés famil<strong>le</strong>s<br />

<strong>de</strong> colonnes.<br />

– Un graphe qui représente l’information sous forme <strong>de</strong> graphe. Selon la mise en oeuvre,<br />

<strong>le</strong> graphe peut représenter <strong>le</strong> schéma et l’architecture <strong>de</strong> la BD ou peut servir à enco<strong>de</strong>r<br />

toute la DB.<br />

Le modè<strong>le</strong> clé-va<strong>le</strong>ur<br />

Le modè<strong>le</strong> clé-va<strong>le</strong>ur (figure 3.2) est d’une gran<strong>de</strong> simplicité : il peut être vu comme une<br />

large tab<strong>le</strong> <strong>de</strong> hachage persistante. Il est, par conséquent, adapté aux caches et offre, dès lors,<br />

<strong>de</strong> hautes performances en terme d’accès aux informations.<br />

Figure 3.2 – BD clé-va<strong>le</strong>ur [30]<br />

Cette modélisation la plus simpliste est justifiée par <strong>le</strong> constat qu’un bon nombre d’accès<br />

aux <strong>bases</strong> <strong>de</strong> <strong>données</strong> se résume à <strong>de</strong> simp<strong>le</strong>s <strong>le</strong>ctures ou écritures à partir d’un in<strong>de</strong>x.<br />

Le modè<strong>le</strong> orienté document<br />

La représentation orientée documents est une extension du modè<strong>le</strong> clé-va<strong>le</strong>ur.A l’instar <strong>de</strong><br />

celui-ci, el<strong>le</strong> associe à chaque clé un document qui contient <strong><strong>de</strong>s</strong> <strong>données</strong> organisées <strong>de</strong> manière<br />

hiérarchique à l’image d’un document XML (figure 3.3).<br />

Le modè<strong>le</strong> d’entrées extensib<strong>le</strong>s<br />

Aussi connu <strong>sur</strong> <strong>le</strong> nom <strong>de</strong> représentation orientée colonnes (figure 3.4), ce modè<strong>le</strong> est une<br />

<strong>de</strong>uxième évolution, multidimensionnel<strong>le</strong>, du stockage clé-va<strong>le</strong>ur. Les <strong>données</strong> y sont représentées<br />

comme <strong><strong>de</strong>s</strong> groupes <strong>de</strong> colonnes.<br />

21


Le modè<strong>le</strong> en graphe<br />

Figure 3.3 – BD orientées documents [30]<br />

Figure 3.4 – BD orientées colonne [30]<br />

Ce modè<strong>le</strong> (figure 3.5) permet une modélisation plus aisée d’objets et <strong>de</strong> <strong>le</strong>urs interactions.<br />

Un exemp<strong>le</strong> typique serait <strong>le</strong>s interactions entre acteurs, réalisateurs, producteurs et films.<br />

3.3.2 BASE en réponse à ACID<br />

Figure 3.5 – BD orientées graphe [30]<br />

Si <strong>le</strong>s solutions SQL avaient tendance à être <strong><strong>de</strong>s</strong> systèmes CA, <strong>le</strong> NoSQL lui s’oriente plutôt<br />

vers un modè<strong>le</strong> AP (voire CP). Le courant veut redéfinir <strong>de</strong> nouvel<strong>le</strong>s formes <strong>de</strong> consistance en<br />

fournissant, en réponse à la propriété ACID, <strong>le</strong> paradigme BASE : essentiel<strong>le</strong>ment disponib<strong>le</strong><br />

(Basically Availab<strong>le</strong> en anglais), à état variab<strong>le</strong> dans <strong>le</strong> temps (Soft State en anglais) et fina-<br />

22


<strong>le</strong>ment consistant (Eventually Consistant en anglais). Le principe est d’oublier <strong>le</strong> ’C’ et <strong>le</strong> ’I’<br />

d’ACID pour une dégradation avantageuse <strong>de</strong> consistance et pour une amélioration <strong><strong>de</strong>s</strong> performances.<br />

Pour plus <strong>de</strong> détails, nous dirigeons <strong>le</strong> <strong>le</strong>cteur vers la présentation <strong>de</strong> Brewer [18].<br />

Pour <strong>le</strong> <strong>le</strong>cteur <strong>sur</strong>pris <strong>de</strong> cet affaiblissement <strong>de</strong> la consistance, nous proposons la <strong>le</strong>cture <strong>de</strong><br />

l’artic<strong>le</strong> <strong>de</strong> Volgels [42] qui explique pourquoi ces concessions et comment el<strong>le</strong>s peuvent être<br />

vues du point <strong>de</strong> vue client et serveur.<br />

3.4 MongoDB<br />

MongoDB est un SGBD NoSQL <strong>de</strong> type document, open source, proposé par la société<br />

10gen. Sa popularité est grandissante, il est notament utilisé par FourSquare [35], SourceForge<br />

ou GitHub qui, à eux seuls, lui garantissent sa notoriété.<br />

3.4.1 Modè<strong>le</strong> <strong>de</strong> <strong>données</strong><br />

Le modè<strong>le</strong> <strong>de</strong> <strong>données</strong> <strong>de</strong> MongoDB est orienté documents. Etudions ce modè<strong>le</strong> via une<br />

approche bottom-up.<br />

Documents<br />

Un document, l’unité basique <strong>de</strong> MongoDB , est un ensemb<strong>le</strong> ordonné <strong>de</strong> paires clé-va<strong>le</strong>ur.<br />

Il est i<strong>de</strong>ntifié par son nom. Pour faire une analogie à SQL, un document peut être vu comme<br />

une entrée. A la différence d’une entrée SQL, <strong>le</strong> nombre <strong>de</strong> champs d’un document n’est pas<br />

défini préalab<strong>le</strong>ment. Un exemp<strong>le</strong> d’un simp<strong>le</strong> document est <strong>le</strong> suivant :<br />

Exemp<strong>le</strong> 1 (MongoDB - Document).<br />

{”nom” : “Degroodt”, “prenom” : “Nicolas”, “age” : 25}<br />

Les clés sont <strong><strong>de</strong>s</strong> strings alors que <strong>le</strong>s va<strong>le</strong>urs sont typées : dans notre exemp<strong>le</strong>, Degroodt<br />

et Nicolas sont <strong><strong>de</strong>s</strong> strings et 25 est un entier.<br />

Col<strong>le</strong>ctions<br />

Une col<strong>le</strong>ction est un ensemb<strong>le</strong> <strong>de</strong> documents (et peut donc être vu comme une tab<strong>le</strong> SQL).<br />

Les documents d’une col<strong>le</strong>ction peuvent avoir <strong><strong>de</strong>s</strong> formes très différentes comme l’illustre<br />

l’exemp<strong>le</strong> suivant<br />

Exemp<strong>le</strong> 2 (MongoDB - Col<strong>le</strong>ction).<br />

{”nom” : “Degroodt”, “prenom” : “Nicolas”, “age” : 25}<br />

{”marque” : “app<strong>le</strong>”, “nom” : “MacBook Pro”}<br />

23


MongoDB ne pose aucune restriction quant aux documents contenus dans une même<br />

col<strong>le</strong>ction. Pourtant, pour <strong><strong>de</strong>s</strong> raisons pratiques, il est intéressant <strong>de</strong> distinguer <strong><strong>de</strong>s</strong> documents<br />

différents en <strong>le</strong>s plaçant dans différentes col<strong>le</strong>ctions (et donc ne pas procé<strong>de</strong>r comme nous<br />

l’avons fait dans l’exemp<strong>le</strong> précé<strong>de</strong>nt).<br />

A la différence d’une tab<strong>le</strong> SQL, <strong>le</strong> nombre <strong>de</strong> champs <strong><strong>de</strong>s</strong> documents d’une même col<strong>le</strong>ction<br />

peut varier d’un document à l’autre.<br />

Bases <strong>de</strong> <strong>données</strong><br />

Une base <strong>de</strong> <strong>données</strong> est un conteneur pour <strong>le</strong>s col<strong>le</strong>ctions (tout comme une base <strong>de</strong><br />

<strong>données</strong> SQL contient <strong><strong>de</strong>s</strong> tab<strong>le</strong>s) avec ses propres permissions.<br />

3.4.2 Choix CAP et PACELC<br />

MongoDB a fait <strong>le</strong> choix CP favorisant la consistance à toute autre considération. MongoDB<br />

prévoit <strong><strong>de</strong>s</strong> mécanismes fort intéressants pour pallier à un bon nombre <strong>de</strong> défaillances<br />

(c’est-à-dire <strong>de</strong> manière à préserver consistance, disponibilité et tolérance à la partition).<br />

Néanmoins, lorsque ces mécanismes ne suffisent plus, <strong>le</strong> choix est fait <strong>de</strong> ne pas garantir la<br />

disponibilité et <strong>de</strong> rester tolérant à la partition.<br />

La politique <strong>de</strong> MongoDB est d’être consistant avant tout. Il s’inscrit donc dans un choix<br />

PC/EC. Néanmoins, si l’utilisateur désire augmenter <strong>le</strong>s performances du système, il serait<br />

possib<strong>le</strong> <strong>de</strong> libérer la consistance pour une amélioration <strong><strong>de</strong>s</strong> temps <strong>de</strong> réponse.<br />

3.4.3 Vue d’ensemb<strong>le</strong> <strong>de</strong> l’architecture<br />

Figure 3.6 – L’architecture <strong>de</strong> MongoDB [38]<br />

Comme illustré par l’image 3.6, MongoDB se décompose en 3 services différents mais<br />

dépendants <strong>le</strong>s uns <strong><strong>de</strong>s</strong> autres.<br />

24


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


Réplication maître-esclave<br />

Ce modè<strong>le</strong> (voir figure 3.7) est <strong>le</strong> plus répandu, il peut être utilisé comme outil <strong>de</strong> sauvegar<strong>de</strong>,<br />

<strong>de</strong> bascu<strong>le</strong>ment (failover en anglais) et peut servir à la montée en charge horizonta<strong>le</strong><br />

(pour <strong><strong>de</strong>s</strong> opérations <strong>de</strong> <strong>le</strong>cture).<br />

Figure 3.7 – Réplication maître-exclave[25]<br />

Les <strong>données</strong> sont, dans un premier temps, écrites <strong>sur</strong> <strong>le</strong> serveur maître, l’information est<br />

ensuite transmise <strong>de</strong> manière asynchrone aux serveurs esclaves.<br />

Si un serveur esclave subit une défaillance, il suffit <strong>de</strong> relancer l’instance et il synchronisera<br />

ses <strong>données</strong> avec <strong>le</strong> serveur maître via un fichier log (pour ne pas <strong>sur</strong>charger <strong>le</strong> réseau avec<br />

une migration <strong>de</strong> <strong>données</strong> <strong>de</strong>puis <strong>le</strong> début). Si un serveur maître subit une défaillance, <strong>le</strong><br />

système passe en mo<strong>de</strong> <strong>le</strong>cture unique jusqu’à ce que <strong>le</strong> serveur maître soit relancé. On voit<br />

donc ici que ce système <strong>de</strong> réplication permet un service <strong>de</strong> bascu<strong>le</strong>ment en cas <strong>de</strong> défaillance.<br />

Ces serveurs esclaves possè<strong>de</strong>nt donc une version plus ou moins actualisée <strong><strong>de</strong>s</strong> <strong>données</strong> et<br />

peuvent donc être utilisés en <strong>le</strong>cture par l’application si cel<strong>le</strong>-ci concè<strong>de</strong> un relâchement <strong>de</strong><br />

la consistance. Les esclaves allègent alors la charge subie par <strong>le</strong> serveur maître (<strong>le</strong> système<br />

<strong>de</strong>vient alors PA/EL). Une tel<strong>le</strong> utilisation favoriserait fortement <strong>le</strong>s applications à <strong>le</strong>ctures<br />

fréquentes.<br />

Réplication par pairs<br />

La réplication par pairs (Replicat Set en anglais) est une version améliorée du modè<strong>le</strong><br />

maître-esclave. El<strong>le</strong> offre un balancement automatique.<br />

Comme l’indique son nom, chaque serveur est i<strong>de</strong>ntique et a un rô<strong>le</strong> : primaire ou secondaire.<br />

Il n’y a qu’un serveur primaire par ensemb<strong>le</strong> <strong>de</strong> répliques. En cas <strong>de</strong> défaillance <strong>de</strong><br />

celui-ci, <strong>le</strong>s membres <strong>de</strong> l’ensemb<strong>le</strong> procè<strong>de</strong>nt à l’é<strong>le</strong>ction d’un nouveau serveur primaire (en<br />

fonction <strong>de</strong> celui qui détient <strong>le</strong>s informations <strong>le</strong>s plus récentes) 1 . Les figures 3.8, 3.9 et 3.10<br />

nous montrent un scénario d’é<strong>le</strong>ction.<br />

Ce modè<strong>le</strong> <strong>de</strong> réplication donne à MongoDB la capacité <strong>de</strong> s’auto-gérer ; il ne nécessite<br />

plus d’intervention humaine pour continuer son bon fonctionnement en cas <strong>de</strong> défaillance<br />

d’une instance <strong>de</strong> stockage.<br />

1. D’autres arguments peuvent être définis manuel<strong>le</strong>ment par l’utilisateur. Ces arguments donnent <strong><strong>de</strong>s</strong><br />

va<strong>le</strong>urs à chaque nœud qui seront prises en compte lors <strong>de</strong> l’é<strong>le</strong>ction du nouveau primaire.<br />

26


Figure 3.8 – Un ensemb<strong>le</strong> <strong>de</strong> réplicats[25]<br />

Figure 3.9 – Défaillance du serveur primaire, procédure d’é<strong>le</strong>ction[25]<br />

Figure 3.10 – Défaillance du serveur primaire, un nouveau serveur est élu[25]<br />

27


3.4.5 Modè<strong>le</strong> <strong>de</strong> consistance<br />

Par défaut, <strong>le</strong>s requêtes sont donc consistantes mais il est possib<strong>le</strong> <strong>de</strong> modéliser d’autres<br />

<strong>de</strong>grés <strong>de</strong> consistance [39], notamment via l’utilisation <strong><strong>de</strong>s</strong> instances <strong>de</strong> stockages secondaires<br />

(ou esclaves selon <strong>le</strong> mo<strong>de</strong> <strong>de</strong> réplication) (voir section 3.4.4).<br />

3.4.6 Modè<strong>le</strong> <strong>de</strong> requête<br />

Grâce à son modè<strong>le</strong> <strong>de</strong> <strong>données</strong> en documents, MongoDB propose une interface <strong>de</strong> programmation<br />

assez riche (sans doute parmi <strong>le</strong>s plus riches du mouvement NoSQL). A titre<br />

d’exemp<strong>le</strong>, nous proposons <strong>de</strong>ux listes non-exhaustives <strong>de</strong> ses fonctions.<br />

La première liste illustre <strong>le</strong>s différents opérateurs pour filtrer une sé<strong>le</strong>ction :<br />

– <strong>le</strong>s opérateurs , ≥<br />

– l’opération exists : utilisée pour filtrer <strong>le</strong>s entrées tel<strong>le</strong>s qu’il existe ou non un certain<br />

attribut<br />

– l’opérateur in : qui vérifie qu’une va<strong>le</strong>ur doit être présente dans l’entrée retournée<br />

– <strong><strong>de</strong>s</strong> expressions régulières qui peuvent être appliquées aux champs retournés<br />

La secon<strong>de</strong> liste reprend quelques métho<strong><strong>de</strong>s</strong> proposées par MongoDB :<br />

– COUNT qui retourne <strong>le</strong> nombre <strong>de</strong> documents correspondant aux critères <strong>de</strong> recherche<br />

– LIMIT qui limite <strong>le</strong> nombre <strong>de</strong> documents retournés<br />

– SORT qui trie <strong>le</strong>s documents retournés<br />

– SKIP qui permet <strong>de</strong> ne pas retourner <strong>le</strong>s n premiers documents<br />

De plus, Mongo propose une mise en oeuvre <strong>de</strong> MR. Les fonctions doivent être écrites en<br />

JavaScript [9].<br />

3.5 Cassandra<br />

Cassandra est un SGBD NoSQL orienté colonnes développé à l’origine par la société<br />

Facebook et repris par la suite sous licence Apache. Le but du projet est <strong>de</strong> faire tourner un<br />

système <strong>sur</strong> <strong><strong>de</strong>s</strong> milliers <strong>de</strong> serveurs [27]. A cette tail<strong>le</strong>, <strong>le</strong>s défaillances (gran<strong><strong>de</strong>s</strong> et petites) sont<br />

courantes. Cassandra propose une nouvel<strong>le</strong> façon <strong>de</strong> gérer l’état persistant <strong>de</strong> ses instances<br />

pour pallier à ces problèmes. Cassandra a été développé dans l’optique <strong>de</strong> diminuer <strong>le</strong>s coûts<br />

hardware et <strong>de</strong> gérer <strong><strong>de</strong>s</strong> <strong>données</strong> avec <strong><strong>de</strong>s</strong> fréquentes écritures.<br />

3.5.1 Modè<strong>le</strong> <strong>de</strong> <strong>données</strong><br />

Cassandra propose un modè<strong>le</strong> <strong>de</strong> <strong>données</strong> orienté colonnes. Nous décrivons ce modè<strong>le</strong> <strong>de</strong><br />

<strong>données</strong> via une approche top-down.<br />

Keyspace<br />

Un Keyspace est <strong>le</strong> point <strong>de</strong> départ <strong>de</strong> stockage, l’équiva<strong>le</strong>nt d’une base <strong>de</strong> <strong>données</strong> dans<br />

<strong>le</strong>s SGBDR. Il est conseillé d’avoir un et un seul Keyspace par application [33].<br />

Famil<strong>le</strong> <strong>de</strong> colonnes<br />

Une famil<strong>le</strong> <strong>de</strong> colonnes est un conteneur pour un ensemb<strong>le</strong> ordonné <strong>de</strong> colonnes (super<br />

ou simp<strong>le</strong>s colonnes). Les famil<strong>le</strong>s <strong>de</strong> colonnes étaient statiques et définies manuel<strong>le</strong>ment dans<br />

28


<strong>le</strong> fichier <strong>de</strong> configuration dans <strong>le</strong>s versions antérieures à 0.7. Depuis Cassandra 0.7, on peut<br />

ajouter/modifier/supprimer une famil<strong>le</strong> <strong>de</strong> colonnes à la volée.<br />

Une famil<strong>le</strong> <strong>de</strong> colonnes a <strong>de</strong>ux attributs : son nom et son comparateur qui définit <strong>le</strong> critère<br />

permettant d’ordonner ses colonnes (par exemp<strong>le</strong> un critère basé <strong>sur</strong> l’encodage UTF8).<br />

Les différentes famil<strong>le</strong>s <strong>de</strong> colonnes sont stockées <strong>sur</strong> différents fichiers. Ce fait est important<br />

lors <strong>de</strong> la modélisation du schéma <strong>de</strong> <strong>données</strong>. Pour former une famil<strong>le</strong> <strong>de</strong> colonnes, on ne<br />

pensera plus qu’à la sémantique <strong><strong>de</strong>s</strong> <strong>données</strong> mais aussi à la manière et à la fréquence dont on<br />

y a accès. Si <strong>de</strong>ux colonnes ont tendance à être lues ou modifiées en même temps, <strong>le</strong>s mettre<br />

dans un même fichier permettra <strong>de</strong> limiter cette opération en un seul accès fichier.<br />

Colonnes<br />

Une (simp<strong>le</strong>) colonne est l’unité la plus basique du modè<strong>le</strong>. Une colonne est un trip<strong>le</strong>t :<br />

la clé (<strong>le</strong> nom), la va<strong>le</strong>ur et l’heure (un timestamp) (figure 3.11) <strong>de</strong> la <strong>de</strong>rnière modification.<br />

Ces colonnes ne sont pas définies au départ et peuvent être ajoutées/retirées à la volée, ce qui<br />

permet une certaine f<strong>le</strong>xibilité.<br />

Figure 3.11 – Cassandra - La structure d’une colonne [33]<br />

Une super colonne (figure 3.12) est une colonne spécia<strong>le</strong> ; sa va<strong>le</strong>ur est un ensemb<strong>le</strong> <strong>de</strong><br />

colonnes simp<strong>le</strong>s. L’idée est donc <strong>de</strong> donner un <strong>de</strong>gré <strong>de</strong> hiérarchie en plus au modè<strong>le</strong>. (Ce<br />

concept <strong>de</strong> super-colonne est un <strong><strong>de</strong>s</strong> principaux aspects qui différencie <strong>le</strong> modè<strong>le</strong> <strong>de</strong> <strong>données</strong><br />

<strong>de</strong> Cassandra à celui <strong>de</strong> Dynamo).<br />

Figure 3.12 – Cassandra - La structure d’une super colonne [33]<br />

Remarquons que lorsqu’une famil<strong>le</strong> <strong>de</strong> colonnes contient <strong><strong>de</strong>s</strong> super-colonnes, cette famil<strong>le</strong><br />

<strong>de</strong>vient une famil<strong>le</strong> <strong>de</strong> super-colonnes et ne pourra plus stocker que <strong><strong>de</strong>s</strong> super-colonnes.<br />

Résumé<br />

Ce modè<strong>le</strong> peut donc être vu comme une architecture à 5 niveaux (figure 3.13 ) :<br />

[keyspace][famil<strong>le</strong> <strong>de</strong> colonne][clé][super colonne][colonne].<br />

3.5.2 Le choix CAP et PACELC<br />

Cassandra a très clairement été développé tel un système AP. Mais notons que ce système<br />

donne l’option <strong>de</strong> pouvoir établir un niveau <strong>de</strong> consistance différent pour chaque requête :<br />

(notamment en utilisant la technique <strong>de</strong> quorum 2 ). Toutefois, on remarque que, s’il est possib<strong>le</strong><br />

2. Cette technique sera décrite à la section 3.5.5<br />

29


Figure 3.13 – Cassandra - Un modè<strong>le</strong> <strong>de</strong> <strong>données</strong> à 5 niveaux<br />

grâce à cette métho<strong>de</strong> d’avoir la <strong>de</strong>rnière version d’une colonne, avoir la <strong>de</strong>rnière version <strong>de</strong><br />

toute une entrée reste impossib<strong>le</strong>. Ce choix est fait par Cassandra pour garantir la disponibilité<br />

et la tolérance à la partition.<br />

Cassandra a été pensé pour favoriser la disponibilité et la tolérance à la partition (système<br />

PA/EL). Grâce à son modè<strong>le</strong> <strong>de</strong> consistance, à ses <strong>le</strong>ctures réparatrices, Cassandra peut laisser<br />

<strong>le</strong> système disponib<strong>le</strong> en cas <strong>de</strong> partition (<strong>le</strong>s <strong>données</strong> seront réparées plus tard) ; sans partition,<br />

<strong>le</strong> système utilisera ce modè<strong>le</strong> pour améliorer <strong>le</strong>s performances.<br />

3.5.3 Vue d’ensemb<strong>le</strong> <strong>de</strong> l’architecture<br />

Cassandra propose une architecture décentralisée basée <strong>sur</strong> <strong>le</strong>s solutions Dynamo et Big-<br />

Tab<strong>le</strong>. Inspiration <strong>de</strong> Dynamo, chaque nœud <strong>de</strong> Cassandra est égal. Leur gestion <strong><strong>de</strong>s</strong> nœuds<br />

se base <strong>sur</strong> <strong>le</strong> protoco<strong>le</strong> peer-to-peer Gossip [33]. Cette décentralisation, par opposition à<br />

l’architecture maître-esclave, permet d’éviter <strong>le</strong>s points <strong>de</strong> défaillances isolés et <strong>le</strong>s goulots<br />

d’étrang<strong>le</strong>ment.<br />

Le Gossiper est en charge <strong>de</strong> s’as<strong>sur</strong>er que chaque information importante concernant<br />

l’état <strong><strong>de</strong>s</strong> nœuds du cluster est transmise à tous <strong>le</strong>s nœuds du cluster (et aussi aux futurs<br />

nœuds et ceux ayant subi une défaillance). Le service Gossip est aussi en charge <strong>de</strong> répartir<br />

<strong>le</strong>s clés <strong>sur</strong> <strong>le</strong>s différents nœuds.<br />

Une <strong><strong>de</strong>s</strong> principa<strong>le</strong>s fonctionnalités voulues pour Cassandra est la capacité <strong>de</strong> passer à<br />

30


l’échel<strong>le</strong> <strong>de</strong> manière linéaire, ce qui nécessite la capacité <strong>de</strong> distribuer <strong>le</strong>s <strong>données</strong> <strong>de</strong> manière<br />

dynamique <strong>sur</strong> <strong>le</strong>s différentes instances du <strong>cloud</strong>. Pour distribuer <strong>le</strong>s <strong>données</strong> au travers <strong><strong>de</strong>s</strong><br />

instances du système, Cassandra utilise une métho<strong>de</strong> <strong>de</strong> hachage cohérent (Constitent Hashing<br />

en anglais) à l’ai<strong>de</strong> d’une fonction <strong>de</strong> hachage préservant l’ordre [27]. Dans <strong>le</strong> hachage cohérent,<br />

l’ensemb<strong>le</strong> <strong><strong>de</strong>s</strong> instances est considéré comme un anneau (c’est-à-dire que <strong>le</strong> nœud d’indice<br />

(token en anglais) d’ordre <strong>le</strong> plus grand est suivi par <strong>le</strong> nœud d’indice <strong>le</strong> plus faib<strong>le</strong>). Lorsqu’un<br />

nœud se rajoute à l’anneau, on lui assigne un indice. Cet indice déterminera sa position dans<br />

l’anneau.<br />

Chaque donnée est i<strong>de</strong>ntifiée par <strong><strong>de</strong>s</strong> clés. Pour déterminer la position <strong>de</strong> la donnée dans<br />

l’anneau 3 , sa clé est donnée en entrée à la fonction <strong>de</strong> hachage qui détermine alors sa position<br />

dans l’anneau. Cette position déterminée, la donnée parcourt alors l’anneau jusqu’à trouver<br />

<strong>le</strong> premier nœud dont l’indice sera supérieur à sa position. Ce nœud sera alors responsab<strong>le</strong> <strong>de</strong><br />

cette donnée.<br />

Chaque nœud est dès lors responsab<strong>le</strong> <strong>de</strong> toutes <strong>le</strong>s <strong>données</strong> dont la position est supérieure<br />

à l’indice <strong>de</strong> son prédécesseur et inférieur au sien. On par<strong>le</strong> <strong>de</strong> nœud coordinateur. Le<br />

principal avantage <strong>de</strong> cette technique est que l’ajout/retrait d’une instance n’influence que<br />

ses prédécesseur et successeur directs.<br />

Pour assigner <strong>le</strong>s indices aux nœuds, Cassandra propose différents outils <strong>de</strong> partitions. En<br />

voici une liste non-exhaustive :<br />

– Le RandomPartitioner va assigner un indice compris entre 0 et 2 127 . C’est l’outil <strong>de</strong><br />

partition par défaut <strong>de</strong> Cassandra . Néanmoins, cet aspect aléatoire peut vite conduire<br />

à une répartition non-uniforme <strong><strong>de</strong>s</strong> charges et <strong><strong>de</strong>s</strong> <strong>données</strong>.<br />

– Le Or<strong>de</strong>rPreservingPartitioner va utiliser <strong>le</strong>s clés <strong><strong>de</strong>s</strong> <strong>données</strong> pour <strong>le</strong>s répartir dans<br />

l’anneau. C’est donc aux développeurs <strong>de</strong> l’application <strong>de</strong> bien choisir ses clés.<br />

3.5.4 Réplication <strong><strong>de</strong>s</strong> <strong>données</strong><br />

Cassandra utilise la réplication <strong>de</strong> <strong>données</strong> dans <strong>le</strong> but <strong>de</strong> proposer la haute disponibilité et<br />

durabilité <strong>de</strong> ses <strong>données</strong>. Le facteur <strong>de</strong> réplication N définit <strong>le</strong> nombre <strong>de</strong> copies <strong><strong>de</strong>s</strong> <strong>données</strong>.<br />

Chaque Keyspace a son facteur <strong>de</strong> réplication.<br />

Chaque nœud est donc chargé <strong>de</strong> stocker <strong>le</strong>s <strong>données</strong> dont il est <strong>le</strong> coordinateur mais<br />

aussi <strong>de</strong> s’as<strong>sur</strong>er que ses <strong>données</strong> soient répliquées N-1 fois au travers l’anneau. Cassandra<br />

propose plusieurs options <strong>de</strong> réplication. Dans la première, Rack Unaware, <strong>le</strong>s N − 1 copies<br />

sont répliquées dans <strong>le</strong>s nœuds successeurs directs du coordinateur. Dans <strong>le</strong>s suivantes, Rack<br />

Aware et Datacenter Aware, en utilisant <strong>le</strong> système Zookeeper 4 , un nœud <strong>le</strong>a<strong>de</strong>r est élu. Le<br />

<strong>le</strong>a<strong>de</strong>r dit à chaque nœud du système quel ensemb<strong>le</strong> <strong>de</strong> <strong>données</strong> (toujours en fonction <strong>de</strong> <strong>le</strong>ur<br />

clé) il est chargé <strong>de</strong> répliquer. Le <strong>le</strong>a<strong>de</strong>r fait en sorte (dans la me<strong>sur</strong>e du possib<strong>le</strong>) que chaque<br />

nœud ne soit jamais responsab<strong>le</strong> <strong>de</strong> plus <strong>de</strong> N − 1 jeux <strong>de</strong> <strong>données</strong> tout en s’as<strong>sur</strong>ant que <strong>le</strong>s<br />

<strong>données</strong> aient <strong><strong>de</strong>s</strong> copies dans différents centres <strong>de</strong> calcul ou racks.<br />

Le modè<strong>le</strong> <strong>de</strong> réplication entre ces différents nœuds est différent <strong>de</strong> tout ce que nous<br />

avons déjà vu. Il n’est ni synchrone, ni asynchrone. Cassandra permet <strong>de</strong> définir un <strong>de</strong>gré<br />

<strong>de</strong> consistance pour chacune <strong><strong>de</strong>s</strong> opérations l’attaquant, définissant ainsi (nous <strong>le</strong> verrons à<br />

la section 3.5.5) <strong>le</strong> nombre <strong>de</strong> serveurs <strong>de</strong>vant répondre pour que l’opération soit validée.<br />

Résumons <strong>le</strong> concept : l’application envoie une requête à chaque nœud stockant la donnée<br />

concernée et attend un certain nombre <strong>de</strong> réponses pour vali<strong>de</strong>r l’opération. Si ce nombre est<br />

3. Un cluster Cassandra peut être vu comme un anneau d’instance ayant un rô<strong>le</strong> similaire.<br />

4. Le service Zookeeper est décrit <strong>de</strong> manière plus précise en section 3.6.4<br />

31


égal au facteur <strong>de</strong> réplication, alors <strong>le</strong> modè<strong>le</strong> pourra être considéré comme synchrone ; dans <strong>le</strong><br />

cas contraire, la réplication sera asynchrone et un phénomène <strong>de</strong> réparation aura lieu durant<br />

<strong>le</strong>s <strong>le</strong>ctures.<br />

3.5.5 Modè<strong>le</strong> <strong>de</strong> consistance<br />

S’inspirant <strong>de</strong> Dynamo [31], Cassandra met en place <strong>le</strong> concept <strong>de</strong> “fina<strong>le</strong>ment consistant”<br />

(Eventually consistent en anglais) mais ne se limite pas à celui-ci. Son modè<strong>le</strong> <strong>de</strong> consistance<br />

est configurab<strong>le</strong> au quorum et permet dès lors une large gamme <strong>de</strong> consistance.<br />

Modè<strong>le</strong> au quorum<br />

Définissons <strong>le</strong>s trois variab<strong>le</strong>s suivantes :<br />

– N : <strong>le</strong> nombre <strong>de</strong> répliques<br />

– R : <strong>le</strong> quorum en <strong>le</strong>cture (<strong>le</strong> nombre <strong>de</strong> réponses <strong>de</strong> <strong>le</strong>ctures à attendre lors d’une requête<br />

<strong>de</strong> <strong>le</strong>cture)<br />

– W : <strong>le</strong> quorum en écriture (<strong>le</strong> nombre <strong>de</strong> confirmations d’écriture à attendre lors d’une<br />

requête d’écriture)<br />

– si W + R > N, la consistance sera dite forte<br />

– si W + R ≤ N, on dira <strong>le</strong> système fina<strong>le</strong>ment consistant. Il se peut que <strong>le</strong>s opérations<br />

d’écriture et <strong>de</strong> <strong>le</strong>cture ne se recouvrent pas. Des conflits <strong>de</strong> versions peuvent alors<br />

apparaitre. Ces conflits peuvent être résolus à l’ai<strong>de</strong> <strong>de</strong> vector clocks et un système <strong>de</strong><br />

gestion <strong>de</strong> versions.<br />

Niveaux <strong>de</strong> consistance<br />

Il y a quelques niveaux typiques <strong>de</strong> consistance que l’on peut déci<strong>de</strong>r. Ces niveaux peuvent<br />

être différents en fonction <strong>de</strong> l’opération (écriture ou <strong>le</strong>cture) [4].<br />

Ecriture : Voyons une liste non-exhaustive <strong>de</strong> ces différents niveaux (par consistance croissante)<br />

pour l’écriture :<br />

– ONE : s’as<strong>sur</strong>e que l’opération a été écrite <strong>sur</strong> au moins un nœud. Si un seul nœud<br />

répond, l’opération sera considérée comme réussie.<br />

– QUORUM : <strong>le</strong> quorum en écriture est assigné à nombre <strong>de</strong> répliques/2 +1. Par exemp<strong>le</strong>,<br />

pour un facteur <strong>de</strong> réplication <strong>de</strong> 8, Cassandra écrira l’information dans 5 nœuds (4+1)<br />

– ALL : tous <strong>le</strong>s nœuds (<strong>le</strong>ur nombre est spécifié par <strong>le</strong> facteur <strong>de</strong> réplication) doivent<br />

retourner une réponse positive. Si un seul nœud signa<strong>le</strong> une erreur, l’écriture est un<br />

échec.<br />

On <strong>le</strong> comprend, plus la consistance sera forte, plus <strong>le</strong>s performances seront faib<strong>le</strong>s.<br />

Lecture Voyons une liste non-exhaustive <strong>de</strong> ces différents niveaux (par consistance croissante)<br />

pour la <strong>le</strong>cture :<br />

– ONE : retourne la va<strong>le</strong>ur donnée par <strong>le</strong> premier nœud.<br />

– QUORUM : <strong>le</strong> quorum <strong>de</strong> <strong>le</strong>cture a la même va<strong>le</strong>ur que celui <strong>de</strong> l’écriture : nombre<br />

<strong>de</strong> répliques/2 +1. Via la gestion <strong><strong>de</strong>s</strong> conflits <strong>de</strong> versions <strong><strong>de</strong>s</strong> différentes réponses, on<br />

construit la donnée et, considérant <strong>le</strong> quorum <strong>de</strong> <strong>le</strong>cture et d’écriture, on a la garantie<br />

d’avoir une réponse consistante.<br />

32


– ALL : interroge tous <strong>le</strong>s nœuds. Si un seul ne répond pas la requête est considérée comme<br />

non validée. Dans <strong>le</strong> cas contraire, on reconstruit la donnée avec toutes <strong>le</strong>s réponses.<br />

On <strong>le</strong> comprend, tous <strong>le</strong>s mécanismes <strong>de</strong> réparation ont lieu à la <strong>le</strong>cture, ce qui peut<br />

entrainer <strong><strong>de</strong>s</strong> pertes <strong>de</strong> performances à la <strong>le</strong>cture. Cassandra a donc été modélisée pour <strong><strong>de</strong>s</strong><br />

écritures performantes (aux dépens <strong>de</strong> la performance en <strong>le</strong>cture).<br />

3.5.6 Modè<strong>le</strong> <strong>de</strong> requêtes<br />

Le modè<strong>le</strong> <strong>de</strong> requêtes <strong>de</strong> Cassandra peut être considéré comme assez riche (même si il est<br />

moins riche que celui <strong>de</strong> Mongo). A titre d’exemp<strong>le</strong>, nous proposons une liste non-exhaustive<br />

<strong><strong>de</strong>s</strong> différentes requêtes possib<strong>le</strong>s[4] 5 :<br />

– GET retourne une (super) colonne d’une entrée spécifiée par sa clé.<br />

– GET SLICE retourne un ensemb<strong>le</strong> <strong>de</strong> (super) colonnes (spécifiées par un Sli<strong>de</strong>Predicate<br />

6 ) d’une entrée spécifiée par sa clé.<br />

– MULTIGET SLICE retourne un ensemb<strong>le</strong> <strong>de</strong> (super) colonnes (spécifiées par un Slice-<br />

Predicate) <strong>de</strong> plusieurs entrées (spécifiées par <strong>le</strong>urs clés).<br />

– GET COUNT retourne <strong>le</strong> nombre <strong>de</strong> colonnes présentes dans une entrée et respectant<br />

un SlicePredicate.<br />

Si Cassandra est couplée à un cluster Hadoop (voir section 3.6.1), <strong><strong>de</strong>s</strong> fonctions MR<br />

peuvent être écrites pour faciliter l’exécution <strong>de</strong> tâches comp<strong>le</strong>xes.<br />

3.6 HBase<br />

HBase est un projet open-source écrit en JAVA Apache dont <strong>le</strong> but est <strong>de</strong> fournir un produit<br />

similaire au produit propriétaire Big Tab<strong>le</strong> <strong>de</strong> Goog<strong>le</strong>. Tout comme BigTab<strong>le</strong> se déployait<br />

au <strong><strong>de</strong>s</strong>sus du système <strong>de</strong> fichiers distribué Goog<strong>le</strong> Fi<strong>le</strong> System, Hbase se déploie <strong>sur</strong> un système<br />

<strong>de</strong> fichiers distribué open-source : The Hadoop Distributed Fi<strong>le</strong>system (HDFS) (un projet <strong>de</strong><br />

la fondation Apache) qui se charge <strong><strong>de</strong>s</strong> opérations <strong>de</strong> réplication 7 .<br />

3.6.1 The Hadoop Distributed Fi<strong>le</strong>system<br />

HDFS est conçu autour <strong>de</strong> l’idée que <strong>le</strong> mo<strong>de</strong> <strong>de</strong> traitement <strong>de</strong> <strong>données</strong> <strong>le</strong> plus efficace<br />

consiste en une et une seu<strong>le</strong> écriture et plusieurs <strong>le</strong>ctures pour chaque donnée. [43]. Un ensemb<strong>le</strong><br />

<strong>de</strong> <strong>données</strong> est donc copié ou généré une fois et analysé à <strong>de</strong> nombreuses reprises. Il est<br />

conçu pour pouvoir se déployer <strong>sur</strong> <strong><strong>de</strong>s</strong> nœuds différents <strong>le</strong>s uns <strong><strong>de</strong>s</strong> autres (pouvant appartenir<br />

à <strong><strong>de</strong>s</strong> clusters différents). Dans ce contexte, <strong>le</strong>s défaillances ne sont pas exceptionnel<strong>le</strong>s. Il<br />

est conçu <strong>de</strong> manière à gérer ces défaillances sans entrainer <strong>de</strong> trop longs temps d’interruption<br />

chez l’utilisateur [43].<br />

L’architectre HDFS repose <strong>sur</strong> <strong>de</strong>ux composants : <strong>le</strong> nœud <strong>de</strong> noms (nameno<strong>de</strong> en anglais)<br />

et <strong>le</strong>s nœuds <strong>de</strong> <strong>données</strong> (datano<strong><strong>de</strong>s</strong> en anglais) (figure 3.14) et suit <strong>le</strong> pattern maître-esclave :<br />

.<br />

5. Rappelons que la consistance <strong>de</strong> la plupart <strong><strong>de</strong>s</strong> requêtes peut être définie individuel<strong>le</strong>ment pour la plupart<br />

<strong><strong>de</strong>s</strong> requêtes<br />

6. Un SlicePredicate est l’équiva<strong>le</strong>nt d’un prédicat en logique mathématique.<br />

7. HBase peut se déployer <strong>sur</strong> d’autres systèmes <strong>de</strong> fichiers distribués mais il est d’usage courant <strong>de</strong> la<br />

coup<strong>le</strong>r à HDFS<br />

33


Figure 3.14 – Architecture HDFS<br />

Les nœuds <strong>de</strong> <strong>données</strong> sont <strong>le</strong>s esclaves. Ils stockent et retrouvent <strong>le</strong>s blocks. Ils signifient<br />

périodiquement au nœud <strong>de</strong> noms la liste <strong><strong>de</strong>s</strong> blocks qu’ils stockent. Tout comme <strong>le</strong>s systèmes<br />

<strong>de</strong> fichiers <strong>sur</strong> un simp<strong>le</strong> disque, HDFS coupe <strong>le</strong>s fichiers en block (64 MB par défaut), ce<br />

qui permet d’avoir <strong><strong>de</strong>s</strong> fichiers <strong>de</strong> gran<strong>de</strong> tail<strong>le</strong>, voire plus grands qu’un disque ; effectivement<br />

ces blocks composant un même fichier ne doivent pas nécessairement être contenus <strong>sur</strong> <strong>le</strong><br />

même disque. Le second avantage d’une tel<strong>le</strong> approche est qu’el<strong>le</strong> simplifie la gestion <strong><strong>de</strong>s</strong> soussystèmes,<br />

ce qui est particulièrement uti<strong>le</strong> et nécessaire dans la gestion <strong>de</strong> systèmes distribués.<br />

Ces blocks ayant <strong><strong>de</strong>s</strong> tail<strong>le</strong>s fixes, il est faci<strong>le</strong> <strong>de</strong> calcu<strong>le</strong>r combien chaque disque peut en<br />

contenir. Les méta-<strong>données</strong> (tel<strong>le</strong>s que <strong>le</strong>s permissions, etc.) ne doivent pas nécessairement<br />

être stockées avec <strong>le</strong>s blocks, un autre service (<strong>le</strong> nœud <strong>de</strong> noms) peut <strong>le</strong>s prendre en charge.<br />

Le nœud <strong><strong>de</strong>s</strong> noms, <strong>le</strong> maître, prend en charge l’espace <strong>de</strong> noms (namespace en anglais)<br />

et maintient l’arbre <strong>de</strong> gestion <strong>de</strong> fichiers ainsi que <strong>le</strong>s méta-<strong>données</strong> relatives à tous ces<br />

fichiers. Cette information est stockée <strong>de</strong> manière permanente sous forme <strong>de</strong> <strong>de</strong>ux fichiers :<br />

l’image <strong>de</strong> l’espace <strong>de</strong> noms et un fichier <strong>de</strong> log. Le nœud <strong><strong>de</strong>s</strong> noms sait aussi quels nœuds <strong>de</strong><br />

<strong>données</strong> sont en charge <strong>de</strong> quel<strong>le</strong>s <strong>données</strong>. Il tient un rô<strong>le</strong> central dans l’administration du<br />

système : vu qu’il gère toutes <strong>le</strong>s méta-<strong>données</strong> <strong><strong>de</strong>s</strong> fichiers, sa défaillance pourrait entrainer<br />

une incapacité à reconstruire <strong>le</strong>s fichiers et donc une perte <strong>de</strong> l’information. Il s’agira donc<br />

d’as<strong>sur</strong>er un mécanisme très puissant <strong>de</strong> résistance à la défaillance pour ce service.<br />

3.6.2 Modè<strong>le</strong> <strong>de</strong> <strong>données</strong><br />

Les <strong>données</strong> sont stockées en tab<strong>le</strong>s faites <strong>de</strong> colonnes et d’entrées. Chaque cellu<strong>le</strong> composant<br />

<strong>le</strong>s tab<strong>le</strong>s est versionnée (HBase détermine <strong>le</strong> timestamp à chaque insertion) et interprétée<br />

comme un tab<strong>le</strong>au d’octets. La clé <strong>de</strong> chaque entrée est el<strong>le</strong> aussi un tab<strong>le</strong>au d’octets ce qui<br />

fait que théoriquement toute donnée peut servir <strong>de</strong> clé. Les tab<strong>le</strong>s trient <strong>le</strong>s entrées en fonction<br />

<strong>de</strong> <strong>le</strong>urs clés.<br />

Les colonnes sont regroupées en famil<strong>le</strong>s <strong>de</strong> colonnes (column families en anglais). Toutes<br />

<strong>le</strong>s colonnes d’une famil<strong>le</strong> <strong>de</strong> colonnes ont un préfixe commun. Par exemp<strong>le</strong>, <strong>le</strong>s colonnes<br />

nosql :cassandra et nosql :MongoDB appartiennent à la même famil<strong>le</strong> <strong>de</strong> colonnes nosql tandis<br />

que sql :MySQL appartient à la famil<strong>le</strong> <strong>de</strong> colonne sql.<br />

34


Les différentes tab<strong>le</strong>s et famil<strong>le</strong>s <strong>de</strong> colonnes doivent être définies au démarrage du système<br />

car el<strong>le</strong>s ne peuvent pas être modifiées <strong>de</strong> manière dynamique tandis qu’à tout instant, <strong><strong>de</strong>s</strong><br />

colonnes peuvent être ajoutées à une famil<strong>le</strong> <strong>de</strong> colonnes. Les différentes famil<strong>le</strong>s <strong>de</strong> colonnes<br />

sont stockées ensemb<strong>le</strong> <strong>sur</strong> HDFS, ce qui fait <strong>de</strong> Hbase un système orienté famil<strong>le</strong> <strong>de</strong> colonnes.<br />

3.6.3 Choix CAP et PAELC<br />

Hbase est un système CP : vu qu’il ne possè<strong>de</strong> pas <strong>de</strong> système propre <strong>de</strong> réplication,<br />

lorsqu’un nœud connait une défaillance, <strong>le</strong>s <strong>données</strong> dont il était responsab<strong>le</strong> ne vont plus<br />

être accessib<strong>le</strong>s (il n’y pas <strong>de</strong> possibilité <strong>de</strong> joindre une réplique). L’avantage <strong>le</strong> plus certain<br />

est que <strong>le</strong> système est tolérant à la partition : en cas <strong>de</strong> défaillance, seu<strong>le</strong>s quelques régions<br />

(voir section 3.6.4) seront inaccessib<strong>le</strong>s. Hbase s’inscrit donc dans un modè<strong>le</strong> PC/EC.<br />

3.6.4 Vue d’ensemb<strong>le</strong> <strong>de</strong> l’architecture<br />

Figure 3.15 – Architecture Hbase [43]<br />

Un système Hbase repose donc <strong>sur</strong> <strong>de</strong>ux clusters travaillant ensemb<strong>le</strong>, un cluster HDFS<br />

et un cluster Hbase . Comme l’illustre la figure 3.15, <strong>le</strong> cluster Hbase a 3 composants :<br />

– Le maître qui assigne <strong>le</strong>s régions aux serveurs <strong>de</strong> régions enregistrés. Il est aussi chargé<br />

<strong>de</strong> <strong>le</strong>s <strong>sur</strong>veil<strong>le</strong>r. Si un serveur <strong>de</strong> région n’est plus joignab<strong>le</strong>, <strong>le</strong> maître va réassigner <strong>le</strong>s<br />

régions qu’il gérait. Le maître est aussi en charge <strong>de</strong> tâches administratives tel<strong>le</strong>s que <strong>le</strong>s<br />

changements du schéma <strong>de</strong> <strong>données</strong>, etc. Il sert <strong>de</strong> point d’entrée pour toute application<br />

se connectant au système ; il communiquera quel<strong>le</strong> serveur <strong>de</strong> région stocke <strong>le</strong>s <strong>données</strong><br />

qui l’intéressent.<br />

35


– Les Serveurs <strong>de</strong> régions prennent en charge <strong>le</strong>s requêtes d’écriture et <strong>de</strong> <strong>le</strong>cture<br />

du client. Ils communiquent avec <strong>le</strong> maître qui lui transmet la liste <strong><strong>de</strong>s</strong> régions qu’ils<br />

géreront et pour lui faire savoir qu’ils sont toujours joignab<strong>le</strong>s. Ils communiqueront aussi<br />

avec <strong>le</strong> maître pour lui signifier qu’une nouvel<strong>le</strong> région doit être créée.<br />

– Hbase dépend du service ZooKeeper qui se charge <strong>de</strong> maintenir <strong>le</strong>s informations du<br />

parc en cas <strong>de</strong> défaillance. Le maître et <strong>le</strong>s serveurs <strong>de</strong> région sont tous enregistrés<br />

auprès du Zookeeper et si l’un d’eux subit une défaillance, Zookeeper se chargera <strong>de</strong> <strong>le</strong><br />

faire réparer ou <strong>de</strong> <strong>le</strong> remplacer.<br />

Les tab<strong>le</strong>s sont automatiquement partitionnées horizonta<strong>le</strong>ment en régions que l’on peut<br />

résumer en un trip<strong>le</strong>t :<br />

– la tab<strong>le</strong> à laquel<strong>le</strong> el<strong>le</strong> se reporte<br />

– la première entrée qu’il stocke<br />

– la première entrée qu’il ne stockera pas<br />

Initia<strong>le</strong>ment, une tab<strong>le</strong> contient une simp<strong>le</strong> région mais au fur et à me<strong>sur</strong>e que la tail<strong>le</strong> <strong>de</strong><br />

cette région augmente, cel<strong>le</strong>-ci se divise en <strong>de</strong>ux régions <strong>de</strong> tail<strong>le</strong>s approximativement éga<strong>le</strong>s<br />

que Hbase répartira <strong>sur</strong> différents nœuds du cluster. Le maître est responsab<strong>le</strong> d’assigner <strong>le</strong>s<br />

régions aux serveurs <strong>de</strong> régions (comportement similaire aux nœuds <strong>de</strong> noms et nœuds <strong>de</strong><br />

<strong>données</strong> <strong>de</strong> HDFS). On a donc affaire à une répartition <strong><strong>de</strong>s</strong> <strong>données</strong> centralisées autour <strong>de</strong> ces<br />

<strong>de</strong>ux points d’entrée (<strong>le</strong> maître Hbase et <strong>le</strong> nœud <strong>de</strong> <strong>données</strong> HDFS).<br />

Le nœud <strong>de</strong> noms d’HDFS distribue, <strong>de</strong> manière presque uniforme, <strong>le</strong>s nouvel<strong>le</strong>s <strong>données</strong><br />

dans <strong>le</strong>s nœuds <strong>de</strong> <strong>données</strong> composant <strong>le</strong> cluster HDFS. Les <strong>données</strong> sont donc réparties <strong>de</strong><br />

manière équitab<strong>le</strong>. Mais, lorsque <strong><strong>de</strong>s</strong> nouveaux nœuds sont ajoutés au cluster, <strong>le</strong>s <strong>données</strong><br />

existantes ne vont pas être réparties <strong>sur</strong> ceux-ci ce qui entraîne un cluster non balancé (c’està-dire<br />

où <strong>le</strong>s <strong>données</strong> ne sont pas réparties équitab<strong>le</strong>ment). Notons que <strong>le</strong>s nouvel<strong>le</strong>s entrées<br />

seront envoyées <strong>sur</strong> <strong>le</strong>s nouveaux nœuds. Dans <strong>le</strong> cas d’une application à écritures fréquentes,<br />

<strong>le</strong> cluster retrouvera donc rapi<strong>de</strong>ment un état plus balancé. HDFS fournit aussi un outil qui<br />

obligera <strong>le</strong>s <strong>données</strong> à se répartir <strong>de</strong> manière équitab<strong>le</strong> <strong>sur</strong> <strong>le</strong>s nœuds.<br />

Le maître Hbase se comporte différemment : il va toujours faire en sorte que <strong>le</strong>s serveurs<br />

<strong>de</strong> régions s’occupent d’un nombre similaire <strong>de</strong> régions.<br />

3.6.5 Réplication <strong><strong>de</strong>s</strong> <strong>données</strong><br />

Hbase ne propose pas <strong>de</strong> système <strong>de</strong> réplication et repose <strong>sur</strong> <strong>le</strong> système répliqué <strong>de</strong><br />

HDFS. Le concept <strong>de</strong> block est la base du modè<strong>le</strong> <strong>de</strong> réplication chez HDFS. La tail<strong>le</strong> <strong><strong>de</strong>s</strong><br />

blocks et <strong>le</strong> facteur <strong>de</strong> réplication peuvent être configurés par fichier. La réplication <strong><strong>de</strong>s</strong> blocks<br />

est as<strong>sur</strong>ée par <strong>le</strong> nœud <strong>de</strong> noms. Celui-ci reçoit périodiquement <strong><strong>de</strong>s</strong> “battements <strong>de</strong> coeur”<br />

(trad.Heartbeat) <strong>de</strong> chaque nœud <strong>de</strong> <strong>données</strong> (qui signifient <strong>le</strong>ur bon fonctionnement) et <strong><strong>de</strong>s</strong><br />

rapports <strong>sur</strong> <strong>le</strong>s blocks (qui contiennent une liste <strong>de</strong> tous <strong>le</strong>s blocks qu’il stocke).<br />

La requête d’écriture d’un client n’est pas directement transmise au nœud <strong>de</strong> noms, <strong>le</strong><br />

client stocke d’abord <strong>le</strong> fichier loca<strong>le</strong>ment et temporairement. Le client ne contacte <strong>le</strong> nœud<br />

<strong>de</strong> noms que lorsque <strong>le</strong> fichier a atteint la tail<strong>le</strong> d’un block. Le nœud <strong>de</strong> noms insère <strong>le</strong> nom<br />

du fichier dans <strong>le</strong> système <strong>de</strong> fichiers et lui alloue <strong><strong>de</strong>s</strong> blocks. Le client transmet alors la<br />

donnée par petits morceaux (4KB) au premier nœud <strong>de</strong> <strong>données</strong> qui écrit ces morceaux et<br />

<strong>le</strong>s transmet au <strong>de</strong>uxième nœud <strong>de</strong> <strong>données</strong> (supposons un facteur <strong>de</strong> réplication égal à 3).<br />

Celui-ci effectue <strong>le</strong> même processus.<br />

36


On voit donc un nouveau modè<strong>le</strong> asynchrone, où la transmission <strong>de</strong> <strong>données</strong> se fait en<br />

casca<strong>de</strong>.<br />

3.6.6 Consistance <strong><strong>de</strong>s</strong> <strong>données</strong><br />

Le modè<strong>le</strong> est assez simp<strong>le</strong> : <strong>le</strong>s entrées sont atomiques quels que soient <strong>le</strong>urs nombres <strong>de</strong><br />

colonnes ([43] et [14]).<br />

3.6.7 Modè<strong>le</strong> <strong>de</strong> requêtes<br />

Le modè<strong>le</strong> proposé par Hbase est un petit peu plus faib<strong>le</strong> que Cassandra . Ceci peut se<br />

justifier par son approche Map-Reduce : Hbase /HDFS sont pensés pour s’adapter <strong>de</strong> manière<br />

optima<strong>le</strong> à ce concept : <strong>le</strong>s tab<strong>le</strong>s Hbase peuvent directement servir d’entrée et <strong>de</strong> sortie <strong>de</strong><br />

fonctions MR qui seront distribuées au travers <strong><strong>de</strong>s</strong> régions. Les requêtes proposées par Hbase<br />

se limitent donc aux opérations basiques tel<strong>le</strong>s que get, put, scan, etc.<br />

3.7 Vol<strong>de</strong>mort<br />

Le projet Vol<strong>de</strong>mort est un SGBD avancé clé-va<strong>le</strong>ur. C’est un projet open-source dont <strong>le</strong>s<br />

contributions <strong>de</strong> LinkedIn font une va<strong>le</strong>ur <strong>sur</strong>e.<br />

Son modè<strong>le</strong> <strong>de</strong> <strong>données</strong> est <strong>le</strong> “n-up<strong>le</strong>t” qui propose <strong>de</strong> diviser l’ensemb<strong>le</strong> <strong><strong>de</strong>s</strong> clés en<br />

magasins (stores en anglais). C’est <strong>le</strong> seul niveau <strong>de</strong> subdivision <strong>de</strong> Vol<strong>de</strong>mort.<br />

A l’instar <strong>de</strong> Cassandra , l’ensemb<strong>le</strong> <strong><strong>de</strong>s</strong> clés est vu comme un anneau divisé en Q sousensemb<strong>le</strong>s<br />

<strong>de</strong> <strong>données</strong>. Chacun <strong><strong>de</strong>s</strong> S serveurs est dès lors responsab<strong>le</strong> <strong>de</strong> Q/S sous-ensemb<strong>le</strong>s<br />

<strong>de</strong> <strong>données</strong>. Les <strong>données</strong> sont répliquées <strong>de</strong> manières asynchrone <strong>sur</strong> <strong>le</strong>s R nœuds suivants<br />

(où R est <strong>le</strong> facteur <strong>de</strong> réplication). La répartition <strong><strong>de</strong>s</strong> <strong>données</strong> est as<strong>sur</strong>ée du côté du client :<br />

celui-ci se connecte à l’anneau pour connaitre sa topologie et sait dès lors à quels nœuds<br />

envoyer quel<strong>le</strong>s <strong>données</strong>.<br />

Des nœuds peuvent être ajoutés et retirés du système lorsque celui-ci est en fonctionnement.<br />

Vol<strong>de</strong>mort est capab<strong>le</strong> <strong>de</strong> détecter et recouvrer <strong>le</strong>s défaillances.<br />

Le modè<strong>le</strong> est fina<strong>le</strong>ment consistant : Vol<strong>de</strong>mort garantit une version à jour <strong>de</strong> la donnée<br />

via la <strong>le</strong>cture d’une majorité <strong><strong>de</strong>s</strong> répliques et un système <strong>de</strong> contrô<strong>le</strong> <strong>de</strong> versions concurrentiel<strong>le</strong>s<br />

(multi-version concurrency control en anglais) pour gérer <strong>le</strong>s différentes versions <strong><strong>de</strong>s</strong><br />

répliques.<br />

Vol<strong>de</strong>mort est donc un système AP, en cas <strong>de</strong> partition, <strong>le</strong> système continuera à fonctionner<br />

au détriment <strong>de</strong> la consistance et, si aucun problème ne <strong>sur</strong>vient Vol<strong>de</strong>mort et son modè<strong>le</strong><br />

fina<strong>le</strong>ment consistant favorisent <strong>le</strong>s performances à la consistance. Il est donc un système<br />

PA/EL.<br />

Son modè<strong>le</strong> <strong>de</strong> requêtes est voulu <strong>le</strong> plus pauvre ; il ne propose que <strong>le</strong>s trois opérations<br />

basiques : trouver (GET en anglais), insérer (put en anglais) et supprimer (<strong>de</strong><strong>le</strong>te en anglais).<br />

3.8 Comparaison <strong><strong>de</strong>s</strong> différents systèmes<br />

Le tab<strong>le</strong>au 3.2 résume cette comparaison.<br />

37


Système Modè<strong>le</strong> <strong>de</strong> <strong>données</strong> choix CAP choix PAEELC consistance réplication API<br />

SQL<br />

MySQL cluster Relationnel CP PC/EC transactionnel<strong>le</strong> 8 Synchrone SQL<br />

VoltDB Relationnel CP PC/EC transactionnel<strong>le</strong> Asynchrone SQL + MR<br />

NoSQL<br />

Cassandra Famil<strong>le</strong>s <strong>de</strong> colonnes AP PA/EL Adaptab<strong>le</strong> Adaptab<strong>le</strong> Moyen + MR<br />

Hbase Famil<strong>le</strong>s <strong>de</strong> colonnes CP PC/EC Verrouillage par entrée Asynchrone faib<strong>le</strong> + MR<br />

MongoDB Documents CP PC/EC consistance forte Asynchrone haut niveau + MR<br />

Vol<strong>de</strong>mort Clé-va<strong>le</strong>ur AP PA/EL Fina<strong>le</strong>ment consistant Asynchrone Bas niveau<br />

Tab<strong>le</strong> 3.2 – Tab<strong>le</strong>au récapitulatif <strong>de</strong> l’étu<strong>de</strong> comparative <strong><strong>de</strong>s</strong> SGBDs<br />

38


Chapitre 4<br />

Bases <strong>de</strong> <strong>données</strong> et élasticité<br />

Dans ce chapitre, après un passage par l’état <strong>de</strong> l’art (section 4.1) qui est assez pauvre,<br />

nous débattrons <strong>de</strong> l’élasticité <strong><strong>de</strong>s</strong> BDs <strong>sur</strong> <strong>cloud</strong> : nous listerons <strong>le</strong>s problèmes liés à son<br />

étu<strong>de</strong> et aux moyens pouvant être mis en place pour l’étudier (section 4.2). Nous proposerons<br />

ensuite <strong><strong>de</strong>s</strong> scénarios <strong>de</strong> test et une série <strong>de</strong> paramètres pouvant caractériser cette élasticité<br />

d’une BD pour <strong>cloud</strong> (section 4.3). A la section 4.4, nous soumettrons ensuite Cassandra à ses<br />

scénarios afin <strong>de</strong> mieux comprendre comment ses choix techniques influencent son élasticité.<br />

Enfin, nous résumerons <strong>le</strong>s travaux <strong>de</strong> T. Dory [41] qui apportent une autre méthodologie<br />

pour tester et comparer l’élasticité <strong><strong>de</strong>s</strong> BDs <strong>sur</strong> <strong>cloud</strong> (section 4.5). Cette méthodologie<br />

est très intéressante mais possè<strong>de</strong>, toute comme notre métho<strong>de</strong>, <strong><strong>de</strong>s</strong> points faib<strong>le</strong>s. A la section<br />

4.6, nous tenterons <strong>de</strong> tirer parti <strong><strong>de</strong>s</strong> points forts et faib<strong>le</strong>s <strong><strong>de</strong>s</strong> <strong>de</strong>ux approches pour<br />

mieux appréhen<strong>de</strong>r l’élasticité <strong><strong>de</strong>s</strong> BDs.<br />

4.1 Etat <strong>de</strong> l’art<br />

Il n’existe à l’heure actuel<strong>le</strong> et à notre connaissance aucune étu<strong>de</strong> similaire à notre approche.<br />

Néanmoins, nous nous <strong>de</strong>vons <strong>de</strong> souligner <strong>le</strong>s travaux <strong>de</strong> B. Cooper qui peuvent<br />

servir <strong>de</strong> première approche : Yahoo ! Cloud Serving Benchmark (YCSB) [17] qui propose un<br />

framework et une étu<strong>de</strong> installant <strong>le</strong>s <strong>bases</strong> pour une nouvel<strong>le</strong> méthodologie <strong>de</strong> bancs d’essais<br />

(benchmark en anglais) pour <strong>le</strong>s BDs <strong>sur</strong> <strong>cloud</strong>.<br />

YCSB utilise <strong>le</strong> terme elastic speedup pour par<strong>le</strong>r <strong>de</strong> l’élasticité qu’ils définissent comme la<br />

capacité d’ajouter <strong>de</strong> nouvel<strong>le</strong>s instances à un système en cours d’exécution. Cette définition<br />

est fort similaire à la nôtre mais ne considère que l’ajout <strong>de</strong> nouvel<strong>le</strong>s instances (et ne considère<br />

pas <strong>le</strong>ur retrait).<br />

Le scénario proposé par YCSB est <strong>le</strong> suivant : soit un système composé <strong>de</strong> 2 serveurs (chargés<br />

<strong>de</strong> 120GB <strong>de</strong> <strong>données</strong>) soumis à une charge <strong>de</strong> travail (Workload en anglais) constante.<br />

Une fois, <strong>le</strong>s temps <strong>de</strong> réponse du système stabilisés 1 , une nouvel<strong>le</strong> instance est ajoutée au<br />

système. Cette opération est répétée jusqu’à atteindre un système <strong>de</strong> 6 instances. Durant l’entièreté<br />

du test, la charge est constante et estimée à 80% <strong>de</strong> la charge maxima<strong>le</strong> que supporte<br />

<strong>le</strong> système (composé <strong>de</strong> 6 instances).<br />

Par exemp<strong>le</strong>, observons <strong>le</strong>s résultats d’une tel<strong>le</strong> expérience <strong>sur</strong> Cassandra (figure 4.1).<br />

Dans cette figure, <strong>le</strong>s 10 premières minutes représentent <strong>le</strong>s temps <strong>de</strong> réponses d’un système<br />

<strong>de</strong> 5 instances. Après ces 10 minutes <strong>le</strong> système est stab<strong>le</strong> et un sixième serveur est ajouté au<br />

1. Ils supervisent l’opération pour voir si ses temps <strong>de</strong> réponses sont plus ou moins constants<br />

39


Figure 4.1 – YCSB - Cassandra - Passage <strong>de</strong> 5 instances à 6 instances[23]<br />

système. La figure 4.2 montre l’ajout d’une sixième instance à un système Hbase stab<strong>le</strong> <strong>de</strong> 5<br />

instances (après <strong>le</strong>s 10 premières minutes).<br />

Figure 4.2 – YCSB - Hbase - Passage <strong>de</strong> 5 instances à 6 instances[23]<br />

Même si cette proposition d’expérience peut proposer <strong><strong>de</strong>s</strong> résultats parlants, nous en<br />

voyons très vite <strong>le</strong>s limitations. Dans un premier temps, revenons <strong>sur</strong> sa reproductibilité :<br />

<strong>le</strong> scénario proposé par YCSB nécessité l’intervention d’un acteur humain pour définir si <strong>le</strong><br />

système s’est stabilisé. Cette notion <strong>de</strong> système stab<strong>le</strong> est arbitraire et est un frein à la reproductibilité<br />

<strong>de</strong> l’expérience. Il s’agit donc <strong>de</strong> définir ces instants (où l’on modifie <strong>le</strong> système, où<br />

l’on considère <strong>le</strong> système comme stabilisé) <strong>de</strong> manière plus concrète, plus scientifique.<br />

Comme <strong>le</strong> montrent <strong>le</strong>s figures 4.1 et 4.2, ces résultats restent diffici<strong>le</strong>s à analyser même si,<br />

<strong>de</strong> manière intuitive, on peut analyser la figure 4.2. Il s’agit donc <strong>de</strong> déterminer <strong><strong>de</strong>s</strong> paramètres<br />

qui définiront <strong>de</strong> manière plus rigoureuse l’élasticité du système. En se basant <strong>sur</strong> la figure 4.1,<br />

nous remarquons que <strong>le</strong>s résultats peuvent semb<strong>le</strong>r brouillons (par exemp<strong>le</strong>, la figure 4.1<br />

ressemb<strong>le</strong> plus à un nuage <strong>de</strong> points qu’à <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence stabilisés). Il s’agira donc <strong>de</strong><br />

penser un scénario permettant <strong>de</strong> dégager <strong><strong>de</strong>s</strong> va<strong>le</strong>urs statistiques pouvant être étudiées.<br />

40


4.2 Problèmes liés à la me<strong>sur</strong>e <strong>de</strong> l’élasticité<br />

Avant <strong>de</strong> décrire <strong>de</strong> manière détaillée une nouvel<strong>le</strong> méthodologie, prenons <strong>le</strong> temps d’analyser<br />

<strong>le</strong>s problèmes intrinsèques à une tel<strong>le</strong> démarche : <strong>le</strong> premier est la difficulté <strong>de</strong> chiffrer,<br />

d’apposer une métrique <strong>sur</strong> l’ajout d’une instance. Jugera-t-on l’apport en CPU, en RAM ou<br />

en mémoire disque ? Effectivement ceci dépendra du type <strong>de</strong> SGBD : un SGBD stockant <strong>le</strong>s<br />

<strong>données</strong> en mémoire tirera nettement plus profit <strong>de</strong> l’ajout d’une instance avec une gran<strong>de</strong><br />

capacité en RAM qu’un système <strong>le</strong>s stockant en mémoire disque.<br />

Pour ne pas être confrontés à <strong>de</strong> tel<strong>le</strong>s considérations, nous proposons que toutes <strong>le</strong>s<br />

instances composant notre <strong>cloud</strong> soient similaires 2 . Chiffrer, fixer une métrique <strong>de</strong>vient donc<br />

assez simp<strong>le</strong> 3 :<br />

Définition 10.<br />

Soit ni, <strong>le</strong> nombre initial d’instances d’un service, nf <strong>le</strong> nombre d’instances du service<br />

après un passage à l’échel<strong>le</strong>, son apport terme <strong>de</strong> ressources se définit comme<br />

∆n = nf −ni<br />

ni<br />

Le second problème est <strong>de</strong> prendre en considération <strong>le</strong> rô<strong>le</strong> <strong>de</strong> l’instance. Une instance<br />

<strong>de</strong> calcul est dite sans état (state<strong>le</strong>ss en anglais) lorsqu’el<strong>le</strong> traite chaque requête indépendamment<br />

(sans relation avec la précé<strong>de</strong>nte). Les instances <strong>de</strong> BDs stocke <strong><strong>de</strong>s</strong> <strong>données</strong> dont<br />

la persistance doit être as<strong>sur</strong>ée. On voit ici assez vite arriver <strong>le</strong> problème <strong>de</strong> la <strong><strong>de</strong>s</strong>cente à<br />

l’échel<strong>le</strong> : lorsqu’on désire diminuer <strong>le</strong> nombre d’instances <strong>de</strong> stockage d’un service, il va falloir<br />

déplacer <strong>le</strong>s <strong>données</strong> qu’il stockait vers d’autres instances. Ceci va nécessiter un certain<br />

temps d’adaptation qui se reflétera <strong>sur</strong> une augmentation certaine <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence du<br />

service <strong>de</strong> stockage. On <strong>le</strong> comprend donc, <strong>le</strong> rô<strong>le</strong> d’une instance détermine son influence <strong>sur</strong><br />

l’élasticité.<br />

Comme nous l’avons vu au chapitre 3, un nœud peut se voir attribuer un ensemb<strong>le</strong> <strong>de</strong><br />

fonctions bien différentes. Par exemp<strong>le</strong>, dans <strong>le</strong> cas <strong>de</strong> MongoDB , l’ajout un processus mongos<br />

aura un effet, théoriquement, très différent <strong>de</strong> l’ajout d’un shard. Lorsqu’on par<strong>le</strong> d’ajouter<br />

un nœud <strong>sur</strong> un cluster Hbase/HDFS, ajout-t-on ce nœud au cluster Hbase ou au cluster<br />

HDFS. Traiter ces rô<strong>le</strong>s comme une dimension <strong>de</strong> notre étu<strong>de</strong> semb<strong>le</strong> très comp<strong>le</strong>xe (voire<br />

impossib<strong>le</strong>). Toutefois, il ne serait pas judicieux <strong>de</strong> faire abstraction <strong>de</strong> ces rô<strong>le</strong>s. Il s’agit donc<br />

<strong>de</strong> <strong>le</strong>s considérer lors <strong>de</strong> l’analyse <strong><strong>de</strong>s</strong> résultats.<br />

4.3 Notre solution<br />

Si on peut comprendre faci<strong>le</strong>ment l’élasticité, définir <strong><strong>de</strong>s</strong> paramètres qui permettront <strong>de</strong><br />

la me<strong>sur</strong>er est une tâche moins aisée. Dans cette section, nous étudierons <strong>le</strong> comportement<br />

théorique d’un système face à l’ajout ou au retrait d’instances et proposerons un scénario <strong>de</strong><br />

test permettant <strong>de</strong> son élasticité.<br />

2. Cette abstraction peut faci<strong>le</strong>ment se justifier par l’aspect virtuel <strong><strong>de</strong>s</strong> instances composant <strong>le</strong> <strong>cloud</strong> : vu<br />

qu’el<strong>le</strong> font abstraction <strong>de</strong> la couche physique, il n’y a pas <strong>de</strong> raison <strong>de</strong> vouloir s’en tenir à <strong><strong>de</strong>s</strong> instances émulant<br />

<strong><strong>de</strong>s</strong> composantes physiques différentes<br />

3. Notons toutefois que, même si nous en faisons abstraction (pour <strong><strong>de</strong>s</strong> raisons <strong>de</strong> clarté), étudier ces aspects<br />

“physiques” <strong>de</strong> l’instance gar<strong>de</strong> tout son intérêt.<br />

41


4.3.1 Scénario <strong>de</strong> tests<br />

Considérons un SGBD <strong>de</strong> ni instances préalab<strong>le</strong>ment chargé <strong>de</strong> <strong>données</strong>.A l’instant t0, <strong>le</strong><br />

système est stab<strong>le</strong>, c’est-à-dire qu’il n’y a plus <strong>de</strong> transferts internes <strong>de</strong> <strong>données</strong> entre-eux, et<br />

n’est soumis à aucune charge.<br />

A partir <strong>de</strong> l’instant t0, un nombre conséquent et constant d’utilisateurs (effectuant euxmême<br />

un nombre constant d’opérations par secon<strong>de</strong> <strong>sur</strong> <strong>le</strong> système) 4 attaquent un SGDB<br />

pendant 60 minutes. Toutes <strong>le</strong>s 10 secon<strong><strong>de</strong>s</strong>, une moyenne <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence est reportée.<br />

A l’instant tm, une modification (ajout ou retrait <strong>de</strong> nf − ni instances) est effectuée <strong>sur</strong><br />

<strong>le</strong> système. Arbitrairement, nous effectuons cette modification après 20 minutes. Le système<br />

se compose alors <strong>de</strong> nf instances.<br />

Les figures 4.3 et 4.4 représentent <strong>le</strong> comportement théorique d’un tel scénario, cette<br />

modification sous-entend une découpe du scénario en trois phases : une phase d’attaque du<br />

système ([ti, tm]), une phase d’adaptation à la modification ([tm, tm + ∆t]) et une phase <strong>de</strong><br />

stabilisation du système suite à la modification ([tm + ∆t, tf ])<br />

temps <strong>de</strong><br />

latence<br />

ln<br />

i<br />

ln<br />

f<br />

t i<br />

phase d'attaque phase d'adaptation<br />

tm<br />

Δt<br />

phase <strong>de</strong> stabilisation<br />

t f temps<br />

Figure 4.3 – Résultat supposé du scénario pour l’ajout d’instances<br />

Il faut préciser à ce niveau que notre étu<strong>de</strong> ne considère pas <strong>de</strong> système rigoureusement<br />

stab<strong>le</strong>. Notre étu<strong>de</strong> étudie <strong>le</strong> comportement du système en transition, <strong>le</strong> scénario <strong>de</strong> tests ne<br />

dure donc que 60 minutes.<br />

4. Des tests seront préalab<strong>le</strong>ment effectués pour déterminer <strong>le</strong>s capacités du système<br />

42


temps <strong>de</strong><br />

latence<br />

ln f<br />

ln i<br />

t i<br />

Phase d’ attaque<br />

phase d'attaque phase d'adaptation<br />

tm<br />

Δt<br />

phase <strong>de</strong> stabilisation<br />

t f<br />

temps<br />

Figure 4.4 – Résultat supposé du scénario pour <strong>le</strong> retrait d’ instances<br />

Le système étant stab<strong>le</strong> à l’instant ti, il <strong>de</strong>vrait très vite répondre <strong>de</strong> manière constante à<br />

l’attaque. Nous serons dès lors en me<strong>sur</strong>e d’effectuer une moyenne arithmétique 5 <strong><strong>de</strong>s</strong> temps<br />

<strong>de</strong> latence <strong>sur</strong> l’interval<strong>le</strong> [ti, tm]. Cette moyenne lni reflétera <strong>le</strong> comportement du système<br />

composé <strong>de</strong> ni instances.<br />

Définition 11 (lni ).<br />

Phase d’adaptation<br />

lni<br />

1 tm = m−i t=ti l(t)<br />

A l’instant tm, <strong>le</strong> système subit une modification. Il doit alors réagir à cette modification,<br />

propager l’information <strong>de</strong> sa modification. En fonction du système étudié, cette modification<br />

et cette propagation peuvent avoir <strong><strong>de</strong>s</strong> formes très différentes et produire <strong><strong>de</strong>s</strong> effets collatéraux<br />

fort différents.<br />

Certains systèmes <strong>de</strong>vront avoir recours à un nombre é<strong>le</strong>vé <strong>de</strong> modifications (et donc<br />

<strong>de</strong> communications) internes et accuseront dès lors <strong><strong>de</strong>s</strong> temps <strong>de</strong> réponse beaucoup plus<br />

5. La médiane <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence a aussi été considérée mais, pratiquement, <strong>le</strong>s résultats restent similaires.<br />

43


importants que voulus durant une certaine pério<strong>de</strong> que nous définissons comme la phase<br />

d’adaptation, ∆t.<br />

Ce temps d’adaptation ∆t sera défini ultérieurement au test grâce à une supervision<br />

humaine. L’observateur humain sera en charge, en fonction du graphique généré par <strong>le</strong> test,<br />

<strong>de</strong> déterminer ce temps d’adaptation.<br />

Phase <strong>de</strong> stabilisation<br />

A l’instant tm + ∆t, <strong>le</strong> système a assimilé la modification et tend à se stabiliser. Il en<br />

résulte <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence plus ou moins similaires dont on peut tirer une moyenne lnf<br />

représentative du comportement du système composé <strong>de</strong> m instances.<br />

Définition 12 (lnf ).<br />

4.3.2 Paramètres<br />

lnf<br />

tf 1 = m−i t=tm+∆t l(t)<br />

D’un tel scénario, nous pouvons re<strong>le</strong>ver <strong>le</strong>s six paramètres suivants qui caractériseront<br />

l’élasticité :<br />

1. <strong>le</strong> coefficient d’adaptation µ<br />

2. <strong>le</strong> temps d’adaptation ∆t<br />

3. l’impact maximal λ<br />

4. la pente <strong>de</strong> la montée <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence α1<br />

5. la pente <strong>de</strong> la <strong><strong>de</strong>s</strong>cente <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence α2<br />

6. la perturbation d’adaptation π<br />

Les cinq premiers paramètres sont résumés à la figure 4.5. La perturbation π est plus<br />

diffici<strong>le</strong> à appréhen<strong>de</strong>r, nous la décrirons plus loin dans cette section.<br />

Les temps <strong>de</strong> latence lni<br />

et lnf<br />

lni est la moyenne arithmétique <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence du système composé <strong>de</strong> ni instances<br />

(avant modification - voir définition 11). lnf , el<strong>le</strong>, est la moyenne arithmétique <strong><strong>de</strong>s</strong> temps <strong>de</strong><br />

latence du système composé <strong>de</strong> nf instances (après modification - voir définition 12).<br />

Le coefficient d’adaptation µ<br />

Ce paramètre est central dans notre approche, il quantifiera <strong>le</strong> gain (ou la perte) en performance<br />

<strong>sur</strong>venant immédiatement après la modification. De manière abstraite, il s’entend donc<br />

comme <strong>le</strong> rapport entre la performance et <strong>le</strong> coût engendré par la modification du système.<br />

Il s’agit donc <strong>de</strong> considérer la modification <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence ainsi que la modification du<br />

nombre d’instances.<br />

Le coefficient d’adaptation µi,f est sans dimension et détermine l’adaptation d’un système<br />

passant <strong>de</strong> ni à nf instances. Définissons la variation <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence ∆l = lnf − lni , <strong>le</strong><br />

coefficient d’adaptation µ se définit comme suit :<br />

44


temps <strong>de</strong><br />

latence<br />

l i<br />

ln i<br />

ln f<br />

α 2<br />

tm<br />

timpact<br />

Δt<br />

α 1<br />

lambda<br />

mu<br />

Figure 4.5 – Pério<strong>de</strong> d’adaptation théorique supposée<br />

Définition 13 (Le coefficient d’adaptation µ).<br />

µ =<br />

∆l<br />

ln i<br />

∆n<br />

temps<br />

Par exemp<strong>le</strong>, imaginons un SGBD parfaitement élastique (sans considérer <strong>le</strong> temps d’adaptation)<br />

tel que lorsqu’on doub<strong>le</strong> son nombre d’instances (nf = 2 ∗ ni), <strong>le</strong>s temps <strong>de</strong> latence<br />

soient réduits <strong>de</strong> moitié (lnf = ln i<br />

2 ) et dès lors µi,j = 0.5. A contrario, un système dont <strong>le</strong>s<br />

performances ne seraient modifiées (lnf = lni ) par n’importe quel<strong>le</strong> modification verrait son<br />

coefficient d’adaptation à 0.<br />

Une première approche serait <strong>de</strong> voir µ comme caractérisant <strong>le</strong> passage à l’échel<strong>le</strong>. Cette<br />

approche serait naïve : pour me<strong>sur</strong>er <strong>le</strong> passage à l’échel<strong>le</strong>, il faudra considérer <strong><strong>de</strong>s</strong> systèmes<br />

stab<strong>le</strong>s. Notre approche considère <strong>le</strong> système en transition, µ se réfère donc au gain immédiat<br />

en performance (me<strong>sur</strong>é par rapport aux moyennes <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence précédant et<br />

succédant directement la modification) par rapport au coût.<br />

Le temps d’adaptation ∆t<br />

Correspondant à la durée <strong>de</strong> la phase d’adaptation, ce temps est la durée nécessaire au<br />

système pour assimi<strong>le</strong>r la modification (répartition <strong><strong>de</strong>s</strong> <strong>données</strong> et autres). Un système sera<br />

45


d’autant plus élastique que ce temps sera réduit.<br />

De manière plus <strong><strong>de</strong>s</strong>criptive, cette durée commence à l’instant où l’on modifie <strong>le</strong> système tm<br />

et finit lorsque <strong>le</strong>s temps <strong>de</strong> réponse du système composé <strong>de</strong> nf nœuds ne sont plus influencés<br />

par la modification. Ce temps d’adaptation est donc déterminé ultérieurement aux tests et<br />

sujet à l’interprétation d’un observateur humain. Ceci est critiquab<strong>le</strong> mais nous soulignons<br />

que cet acteur humain n’influence pas <strong>sur</strong> <strong>le</strong> dérou<strong>le</strong>ment <strong><strong>de</strong>s</strong> tests, il n’intervient que <strong>sur</strong><br />

l’interprétation <strong><strong>de</strong>s</strong> résultats.<br />

La forme <strong>de</strong> l’adaptation<br />

Le système sera donc perturbé durant toute la pério<strong>de</strong> d’adaptation. Il est intéressant <strong>de</strong><br />

connaitre <strong>le</strong> temps nécessaire au système pour se stabiliser mais aussi <strong>de</strong> pouvoir décrire la<br />

forme <strong>de</strong> cette adaptation. En faisant un zoom <strong>sur</strong> la phase d’adaptation (figure 4.5), nous<br />

déterminons 4 nouveaux paramètres : l’impact maximal λ, <strong>le</strong>s pentes <strong>de</strong> montée et <strong><strong>de</strong>s</strong>centes<br />

<strong><strong>de</strong>s</strong> temps <strong>de</strong> latence (α1 et α2) et la perturbation d’adaptation π.<br />

L’impact maximal λ est <strong>le</strong> rapport entre <strong>le</strong> pic <strong>de</strong> perte <strong>de</strong> performance (li) et <strong>le</strong> temps<br />

<strong>de</strong> latence moyen du système initial lni .<br />

Définition 14 (L’impact maximal λ).<br />

λ = li<br />

ln i<br />

Un impact plus grand préviendra du risque d’une très forte perte en performance (par<br />

rapport aux performances précé<strong>de</strong>ntes), momentanée ou non. Nous connaissons à présent ce<br />

temps d’adaptation (∆t), l’impact maximal <strong>de</strong> cette adaptation (π en %), on peut dès lors se<br />

<strong>de</strong>man<strong>de</strong>r quand aura lieu cet impact maximal, quel<strong>le</strong>s seront <strong>le</strong>s pentes <strong>de</strong> la montée et <strong>de</strong><br />

la <strong><strong>de</strong>s</strong>cente <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence du système.<br />

Les pentes α1 et α2 sont <strong>le</strong>s coefficients angulaires <strong>de</strong> la montée (α1) et <strong>de</strong> la <strong><strong>de</strong>s</strong>cente<br />

(α2) <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence (figure 4.5). Considérant <strong>le</strong>s va<strong>le</strong>urs décrites à la figure 4.5, la droite<br />

<strong>de</strong> montée <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence est la droite joignant <strong>le</strong>s <strong>de</strong>ux points (tm, lni ) et (timpact, li).<br />

La droite <strong>de</strong> <strong><strong>de</strong>s</strong>cente <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence, el<strong>le</strong>, est définie par <strong>le</strong>s <strong>de</strong>ux points (timpact, li) et<br />

(tm + ∆t, lnf ). Nous définissons α1 et α2 comme suit :<br />

Définition 15 (α1).<br />

Définition 16 (α2).<br />

α1 = timpact−tm<br />

li−ln i<br />

α2 = (tm+∆t)−timpact<br />

ln f −li<br />

46


Ces <strong>de</strong>ux nouveaux paramètres (α1 et α2), couplés à l’impact maximal, sont une première<br />

approche dans la façon <strong>de</strong> définir la forme <strong>de</strong> l’adaptation. Cette <strong><strong>de</strong>s</strong>cription peut semb<strong>le</strong>r<br />

simpliste mais el<strong>le</strong> se justifie par la simplicité même <strong><strong>de</strong>s</strong> faits : <strong>le</strong> système subit une modification,<br />

ce qui implique <strong><strong>de</strong>s</strong> modifications et <strong><strong>de</strong>s</strong> trafics internes qui diminuent ses performances<br />

(pente croissante α1 <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence). Lorsque <strong>le</strong> système a effectué <strong>le</strong> nombre maximal<br />

<strong>de</strong> modifications (et donc, quand ses performances sont minima<strong>le</strong>s), trafics et modifications<br />

vont diminuer jusqu’à ne plus être significatifs dans <strong>le</strong>s performances du système. (pente décroissante<br />

α2 <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence). Toutefois, même si cette approche simpliste semb<strong>le</strong> se<br />

justifier, on s’aperçoit en pratique que la forme <strong>de</strong> cette adaptation ne va pas toujours être<br />

proche <strong>de</strong> la forme triangulaire formée par alpha1 et alpha2.<br />

Nous pouvons à présent déterminer la variation en performance résultant <strong>de</strong> la modification<br />

du système et <strong>le</strong> temps nécessaire à son adaptation mais aussi <strong>le</strong> pic maximal <strong>de</strong> perte<br />

en performance et la tendance du système à atteindre ce pic (l’atteindra-t-il rapi<strong>de</strong>ment ou<br />

non). Mais cette représentation est trop simpliste, il faut aussi savoir comment <strong>le</strong> système va<br />

se comporter durant l’adaptation. Pour connaître ce comportement, nous considérons l’aire<br />

<strong>de</strong> la <strong>sur</strong>face sous la courbe <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence durant l’adaptation (la <strong>sur</strong>face N à la<br />

figure 4.7).<br />

Figure 4.6 – Perturbation <strong>de</strong> la pério<strong>de</strong> d’adaptation théorique - Surface N<br />

N suffit à compléter <strong>le</strong>s 5 premiers paramètres (que nous avons décrits précé<strong>de</strong>mment)<br />

pour fournir une analyse <strong>de</strong> l’élasticité d’un système. Plus il sera grand, plus <strong>le</strong> système présentera<br />

<strong>de</strong> mauvaises performances durant toute l’adaptation (et réciproquement). Néanmoins,<br />

ce paramètre est aussi dépendant du temps d’adaptation et <strong>de</strong> la variation <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence<br />

∆l ; plus ceux-ci seront grands, plus pi sera susceptib<strong>le</strong> d’être grand. On ne peut dès<br />

lors pas interpréter π indépendamment <strong><strong>de</strong>s</strong> autres paramètres. Ceci est assez déplaisant.<br />

Dans la figure 4.6, M est la <strong>sur</strong>face sous la courbe <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence d’un système<br />

47


Figure 4.7 – Perturbation <strong>de</strong> la pério<strong>de</strong> d’adaptation théorique - Surface M<br />

adaptant ses temps <strong>de</strong> réponses <strong>de</strong> manière linéaire durant la pério<strong>de</strong> d’adaptation. M est<br />

définie par <strong>le</strong> temps d’adaptation et la variation <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence ∆l. Nous proposons dès<br />

lors d’utiliser cette <strong>sur</strong>face pour former un paramètre indépendant <strong>de</strong> la perturbation.<br />

La perturbation d’adaptation π décrit <strong>le</strong> comportement, la perturbation du système<br />

par rapport à un système s’adaptant <strong>de</strong> manière linéaire à la modification. Nous la définissons<br />

comme suit :<br />

Définition 17 (Perturbation d’adaptation π).<br />

π =<br />

R tm+∆t<br />

tm<br />

l(t) dt<br />

∆l∗∆t<br />

2<br />

Ce paramètre est donc sans dimension. Plus sa va<strong>le</strong>ur sera proche <strong>de</strong> 1, plus <strong>le</strong> comportement<br />

du système sera linéaire durant l’adaptation. Une va<strong>le</strong>ur comprise entre O et 1, nous<br />

informera que <strong>le</strong> système a un comportement globa<strong>le</strong>ment meil<strong>le</strong>ur qu’un système s’adaptant<br />

linéaire à l’adaptation, tandis qu’un grand score nous informera que <strong>le</strong> comportement du<br />

système s’éloigne d’un comportement linéaire.<br />

Le tab<strong>le</strong>au 4.1 donne une idée récapitulative <strong><strong>de</strong>s</strong> différents paramètres.<br />

4.3.3 Application<br />

Dans cette section, nous décrirons comment nous mettons en œuvre un tel scénario. Nous<br />

y décrirons <strong>le</strong> framework YCSB que nous utilisons ainsi que <strong>le</strong>s adaptations que nous lui avons<br />

48


Symbo<strong>le</strong> Noms Unité Formu<strong>le</strong><br />

µ Coefficient d’adaptation Sans unité µ = ∆l<br />

∆t Temps d’adaptation Secon<strong><strong>de</strong>s</strong><br />

∆n<br />

Déterminé à l’œil nu après l’expérience<br />

λ Impact maximal Sans unité π = li<br />

α1 Montée <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence Sans unité<br />

lni α1 = timpact−tm<br />

α2 Descente <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence Sans unité<br />

li−lni α2 = (tm+∆t)−timpact<br />

ln −li<br />

R f<br />

tm+∆t<br />

l(t) dt<br />

π Perturbation d’adaptation Sans unité π =<br />

tm<br />

∆l∗∆t<br />

2<br />

Tab<strong>le</strong> 4.1 – Tab<strong>le</strong>au récapitulatif <strong><strong>de</strong>s</strong> paramètres définissant l’élasticité<br />

apportées. Nous décrirons <strong>le</strong> jeu <strong>de</strong> <strong>données</strong> <strong>de</strong> nos tests ainsi que <strong>de</strong>ux charges <strong>de</strong> travail que<br />

nous appliquerons dans ces tests.<br />

Le framework <strong>de</strong> YCSB<br />

Figure 4.8 – Architecture <strong>de</strong> YCSB[17]<br />

Pour appliquer ce scénario, nous utilisons une version adaptée YCSB (<strong>le</strong> framework).<br />

L’architecture <strong>de</strong> YCSB (figure 4.8) est composée <strong>de</strong> quatre modu<strong>le</strong>s : <strong>le</strong> workload executor<br />

va lancer plusieurs clients qui exécutent une série d’opérations (modu<strong>le</strong> client-threads) en<br />

faisant appel au modu<strong>le</strong> d’interface <strong>de</strong> BD (DB Interface Layout en anglais). Le modu<strong>le</strong><br />

statistique récupérera <strong>le</strong>s temps <strong>de</strong> latence <strong>de</strong> chaque opération et <strong>le</strong>s analysera.<br />

Un fichier <strong>de</strong> configuration <strong>de</strong> la charge <strong>de</strong> travail (workload en anglais) définit entre<br />

autres :<br />

– <strong>le</strong> nombre <strong>de</strong> clients<br />

– <strong>le</strong> nombre d’opérations<br />

– <strong>le</strong>s pourcentages d’opérations <strong>de</strong> <strong>le</strong>cture-écriture<br />

49


– la distribution <strong>de</strong> génération <strong><strong>de</strong>s</strong> <strong>données</strong><br />

– ...<br />

Les paramètres suivants caractérisent plus spécifiquement notre scénario :<br />

– l’interface <strong>de</strong> BD<br />

– <strong>le</strong>s adresses <strong>de</strong> BDs à contacter<br />

– <strong>le</strong> fichier <strong>de</strong> configuration <strong>de</strong> la charge <strong>de</strong> travail<br />

Pour générer <strong>de</strong> manière aléatoire, YCSB déploie 3 types <strong>de</strong> distribution :<br />

– Uniforme : choisit un objet aléatoirement. Dans <strong>le</strong> cas d’une <strong>le</strong>cture, toutes <strong>le</strong>s entrées<br />

<strong>de</strong> la BD ont la même probabilité d’être lues.<br />

– Zipfian : choisit un objet suivant la distribution ZipFian : quelques objets seront plus<br />

populaires (et donc auront plus <strong>de</strong> chance d’être choisis) que d’autres.<br />

– Dernière : <strong>le</strong>s <strong>de</strong>rniers objets récemment insérés sont plus populaires.<br />

Les Modifications que nous avons apportées à YCSB ne sont pas considérab<strong>le</strong>s :<br />

– Nous avons modifié <strong>le</strong> modu<strong>le</strong> statistique pour qu’il retourne en sortie la moyenne <strong><strong>de</strong>s</strong><br />

temps <strong>de</strong> latence toutes <strong>le</strong>s 10 secon<strong><strong>de</strong>s</strong>.<br />

– Nous avons aussi modifié <strong>le</strong> générateur <strong>de</strong> <strong>données</strong> pour qu’il puisse produire <strong><strong>de</strong>s</strong> entrées<br />

<strong>de</strong> tail<strong>le</strong> variab<strong>le</strong> (alors que YCSB <strong>le</strong>s <strong><strong>de</strong>s</strong>tinait à être <strong>de</strong> tail<strong>le</strong> fixe).<br />

Jeux <strong>de</strong> <strong>données</strong><br />

Le jeu <strong>de</strong> <strong>données</strong> <strong>de</strong> nos tests est <strong>le</strong> suivant : chaque entrée est i<strong>de</strong>ntifiée par une clé<br />

primaire similaire à “user234123”. Chaque entrée est caractérisée par un nombre F <strong>de</strong> champs<br />

qui sont <strong><strong>de</strong>s</strong> strings eux-mêmes caractérisés par une tail<strong>le</strong> L. Afin <strong>de</strong> générer <strong><strong>de</strong>s</strong> <strong>données</strong> <strong>de</strong><br />

tail<strong>le</strong> variab<strong>le</strong>, <strong>le</strong> nombre <strong>de</strong> champs F est compris entre 2 va<strong>le</strong>urs Fm et FM (<strong>données</strong> en<br />

paramètres). Chaque champ est nommé field0, field1, etc.. La tail<strong>le</strong> <strong><strong>de</strong>s</strong> champs L sera, el<strong>le</strong><br />

aussi, comprise entre 2 va<strong>le</strong>urs Lm et LM (<strong>données</strong> en paramètres). Chaque champ est une<br />

chaîne aléatoire <strong>de</strong> caractères.<br />

Nous avons choisi <strong>de</strong> faire varier la tail<strong>le</strong> <strong>de</strong> ces <strong>données</strong> car une <strong><strong>de</strong>s</strong> caractéristiques <strong><strong>de</strong>s</strong><br />

solutions NoSQL est que <strong>le</strong>ur schéma <strong>de</strong> <strong>données</strong> n’est pas fixe et qu’ils peuvent donc stocker<br />

<strong><strong>de</strong>s</strong> <strong>données</strong> très hétérogènes dans la même entité. Dans cette expérience, nous aurons <strong><strong>de</strong>s</strong><br />

entrées <strong>de</strong> tail<strong>le</strong> variab<strong>le</strong> comportant entre 80 et 100 champs dont la tail<strong>le</strong> varie <strong>de</strong> 80 à 1000<br />

bytes). Stockant 100.000 entrées, notre jeu <strong>de</strong> <strong>données</strong> aura une tail<strong>le</strong> minima<strong>le</strong> <strong>de</strong> environ<br />

6GB et maxima<strong>le</strong> <strong>de</strong> environ 9,3 GB.<br />

Charge <strong>de</strong> travail 1 : <strong>le</strong>ctures fréquentes<br />

Cette configuration proposée par YCSB est proche d’une application <strong>de</strong> tags <strong>de</strong> photos.<br />

Chaque mise à jour correspond à un tag et certaines photos ont plus <strong>de</strong> succès que d’autres.<br />

Nous simulons 100 clients attaquant la BD à un rythme <strong>de</strong> 50 opérations par secon<strong>de</strong>.<br />

Paramètres :<br />

– 95% <strong>de</strong> <strong>le</strong>ctures<br />

– 5% <strong>de</strong> mises-à-jour<br />

– Distribution Zipfian<br />

Charge <strong>de</strong> travail 2 : écritures fréquentes<br />

Nous simulons une application basique comportant plus <strong>de</strong> <strong>de</strong>ux fois plus d’écritures que<br />

<strong>de</strong> <strong>le</strong>ctures. Certaines informations sont plus populaires que d’autres (distribution Zipfian).<br />

50


Nous simulons la charge <strong>de</strong> 100 clients à raison <strong>de</strong> 50 opérations par secon<strong>de</strong>.<br />

Paramètres :<br />

– 30% <strong>de</strong> <strong>le</strong>ctures<br />

– 70% d’insertions<br />

– Distribution Zipfian<br />

4.4 Expériences<br />

Nous allons à présent tester notre méthodologie <strong>sur</strong> un cluster Cassandra <strong>de</strong> 6 nœuds.<br />

Nous simu<strong>le</strong>rons <strong>le</strong>s <strong>de</strong>ux charges <strong>de</strong> travail (décrites à la section 4.3.3 et 4.3.3) et ferons<br />

varier la consistance <strong><strong>de</strong>s</strong> opérations.<br />

Dans la première section (4.4.1), nous apporterons quelques informations supplémentaires<br />

relatives à Cassandra nécessaires pour bien appréhen<strong>de</strong>r nos expériences. Dans <strong>le</strong>s sections<br />

4.4.2 et 4.4.3, nous simu<strong>le</strong>rons <strong><strong>de</strong>s</strong> montées à l’échel<strong>le</strong> (<strong>de</strong> 4 à 6 nœuds) et <strong><strong>de</strong>s</strong> <strong><strong>de</strong>s</strong>centes à<br />

l’échel<strong>le</strong> (<strong>de</strong> 5 à 4 nœuds).<br />

Ces expériences nous permettront <strong>de</strong> re<strong>le</strong>ver <strong>le</strong>s va<strong>le</strong>urs <strong><strong>de</strong>s</strong> paramètres décrits à la section<br />

4.3.2. Nous analyserons ensuite ces paramètres et <strong>le</strong>urs va<strong>le</strong>urs.<br />

4.4.1 Considérations complémentaires<br />

Ajout d’une nouvel<strong>le</strong> instance<br />

Pour ajouter une instance au cluster Cassandra, il suffit <strong>de</strong> lancer un nouveau nœud<br />

Cassandra en lui notifiant un membre <strong>de</strong> l’anneau à contacter. Une fois que <strong>le</strong> nœud a signifié<br />

son envie d’entrer dans l’anneau, <strong>le</strong> cluster commence à murmurer (90 secon<strong><strong>de</strong>s</strong> [3]) pour<br />

connaitre <strong>le</strong> volume <strong>de</strong> <strong>données</strong> que chaque instance stocke et s’as<strong>sur</strong>er <strong>de</strong> l’exactitu<strong>de</strong> <strong>de</strong> ces<br />

informations, <strong>le</strong> nouveau nœud se voit alors assigner son indice <strong>de</strong> façon à ce qu’il décharge <strong>de</strong><br />

moitié <strong>le</strong> nœud <strong>le</strong> plus chargé. Le nouveau nœud attend 30 sec avant <strong>de</strong> recevoir <strong>le</strong>s <strong>données</strong><br />

<strong>de</strong> son successeur.<br />

L’opération tota<strong>le</strong> prendrait donc, théoriquement, au total <strong>de</strong>ux minutes [3] 6 . Passé ce<br />

délai, <strong>le</strong> nœud reçoit <strong>le</strong>s <strong>données</strong> <strong>de</strong> son successeur mais peut déjà être interrogé par l’application<br />

cliente. Il sera uniquement responsab<strong>le</strong> <strong>de</strong> <strong>données</strong> une fois qu’il a reçu toutes ses<br />

<strong>données</strong>.<br />

Retrait d’une instance<br />

Pour gérer son cluster, Cassandra fournit un outil no<strong>de</strong>tool. L’option <strong>de</strong>commission permet<br />

à un nœud <strong>de</strong> se retirer <strong>de</strong> l’anneau, <strong>de</strong> se mettre hors service. Cette métho<strong>de</strong> est sans doute la<br />

plus propre : <strong>le</strong>s <strong>données</strong> et répliques <strong>de</strong> <strong>données</strong> dont il était responsab<strong>le</strong> vont être réassignées<br />

aux autres nœuds <strong>de</strong> l’anneau et transmises à d’autres nœuds du cluster. Aucune version <strong>de</strong><br />

ces <strong>données</strong> n’est perdue.<br />

On remarquera que, considérant la gestion du retrait d’une instance, Cassandra n’est pas<br />

tel<strong>le</strong>ment élastique. Les expériences nous ont montré <strong>de</strong>ux aspects s’opposant à sa capacité à<br />

<strong><strong>de</strong>s</strong>cendre à l’échel<strong>le</strong> <strong>de</strong> manière dynamique :<br />

– La première est qu’il est impossib<strong>le</strong> <strong>de</strong> libérer un nœud <strong>sur</strong> <strong>le</strong>quel il existe un trafic<br />

intérieur. Or, lorsqu’on détache un nœud <strong>de</strong> l’anneau, ceci génère un trafic important<br />

6. Lors <strong>de</strong> nos expériences, nous avons <strong>sur</strong>veillé cette opération et confirmons ce délai.)<br />

51


pour répartir <strong>le</strong>s <strong>données</strong>. Dans un petit cluster (5 nœuds pour nos expériences), ce<br />

trafic atteint <strong>le</strong>s autres nœuds du cluster et <strong>le</strong>s empêche donc <strong>de</strong> pouvoir se retirer<br />

<strong>de</strong> manière simultanée 7 . Pour l’administration <strong>de</strong> larges clusters, il est possib<strong>le</strong> que <strong>le</strong><br />

trafic engendré n’atteigne pas tous <strong>le</strong>s nœuds et il est possib<strong>le</strong> aussi <strong>de</strong> savoir quel<strong>le</strong>s<br />

instances seront atteintes (<strong>le</strong>s métho<strong><strong>de</strong>s</strong> <strong>de</strong> distribution et <strong>de</strong> réplication <strong>de</strong> <strong>données</strong> <strong>le</strong>s<br />

définissent), mais cette administration serait fort diffici<strong>le</strong>.<br />

– La solution au premier problème serait d’effectuer ces mises hors service en casca<strong>de</strong>.<br />

Mais nos expériences montrent que cinq minutes environ sont nécessaires pour libérer<br />

un nœud d’environ 6GB. On peut estimer qu’un serveur <strong>de</strong> production sera bien plus<br />

chargé et donc bien plus long à se vi<strong>de</strong>r <strong>de</strong> ses <strong>données</strong>. Ce temps n’est donc pas<br />

négligeab<strong>le</strong> et il est donc bien plus intéressant <strong>de</strong> pouvoir retirer plusieurs instances <strong>de</strong><br />

l’anneau <strong>de</strong> manière parallè<strong>le</strong> 8 .<br />

4.4.2 Montée à l’échel<strong>le</strong><br />

Maintenant que nous avons éclairci ces quelques points, nous allons analyser comment<br />

Cassandra se comporte en cas d’ajout <strong>de</strong> nœuds. Nous avons testé l’ajout <strong>de</strong> 2 nœuds à un<br />

cluster <strong>de</strong> 4 nœuds.<br />

Après 20 minutes <strong>de</strong> charge constante (100 clients effectuant 50 requêtes à la secon<strong>de</strong>) <strong>sur</strong><br />

<strong>le</strong> cluster <strong>de</strong> 4 nœuds, nous lui ajoutons 2 nouvel<strong>le</strong>s instances tout en continuant la charge <strong>sur</strong><br />

<strong>le</strong>s 4 premiers nœuds. Lorsque <strong>le</strong>s nouvel<strong>le</strong>s instances sont <strong>de</strong>venues actives (nous <strong>le</strong> vérifions<br />

à l’ai<strong>de</strong> <strong>de</strong> l’outil <strong>de</strong> supervision <strong>de</strong> Cassandra), nous arrêtons la charge pour immédiatement<br />

la relancer mais en la répartissant cette fois-ci <strong>sur</strong> <strong>le</strong>s 6 nœuds. Notons que durant toutes nos<br />

expériences, <strong>le</strong> facteur <strong>de</strong> réplication est <strong>de</strong> 3.<br />

Nous effectuons 4 fois ces expériences (expériences A, B, C et D) en faisant varier <strong>le</strong><br />

modè<strong>le</strong> <strong>de</strong> consistance et la charge <strong>de</strong> travail.<br />

Expérience A<br />

Le modè<strong>le</strong> <strong>de</strong> consistance <strong>de</strong> cette expérience est fort. Il est as<strong>sur</strong>é par <strong><strong>de</strong>s</strong> écritures ONE<br />

(c’est-à-dire que <strong>le</strong> système ne s’as<strong>sur</strong>e que <strong>de</strong> la réponse d’un seul nœud) et <strong><strong>de</strong>s</strong> écritures<br />

réparatrices ALL (c’est-à-dire que <strong>le</strong>s écritures recevront <strong>le</strong>s informations <strong>de</strong> toutes <strong>le</strong>s répliques<br />

et reconstruiront la donnée). Cette configuration s’adaptera donc mal (en termes <strong>de</strong><br />

performance) à la charge <strong>de</strong> travail forte en <strong>le</strong>cture <strong>de</strong> cette expérience.<br />

Configuration <strong>de</strong> l’expérience :<br />

– Charge <strong>de</strong> travail : <strong>le</strong>ctures fréquentes (section 4.3.3)<br />

– Tail<strong>le</strong> initia<strong>le</strong> du cluster : 4 nœuds<br />

– Tail<strong>le</strong> fina<strong>le</strong> du cluster : 6 nœuds<br />

– Facteur <strong>de</strong> réplication : 3<br />

– Consistance en écriture : ONE<br />

– Consistance en <strong>le</strong>cture : ALL<br />

7. Nous avons rencontré ce problème lors <strong><strong>de</strong>s</strong> tests pratiques. Nous pouvons aussi confirmer, grâce à <strong><strong>de</strong>s</strong><br />

tests, que Cassandra est capab<strong>le</strong> <strong>de</strong> gérer <strong>le</strong> retrait <strong>de</strong> plusieurs nœuds simultanément tant qu’il n’existe pas<br />

<strong>de</strong> trafic intérieur vers ceux-ci.<br />

8. Ce problème a été reporté plusieurs fois <strong>sur</strong> la mailing liste <strong>de</strong> Cassandra [7].<br />

52


36.43<br />

temps <strong>de</strong> réponse (millisecon<strong><strong>de</strong>s</strong>)<br />

16.59<br />

16.27<br />

10<br />

Le premier nœud<br />

est intégré<br />

Montée <strong><strong>de</strong>s</strong> temps<br />

<strong>de</strong> latence<br />

Les noeuds sont<br />

actifs<br />

Ajout <strong>de</strong> 2 nouveaux<br />

noeuds<br />

Δt<br />

<strong><strong>de</strong>s</strong>cente <strong><strong>de</strong>s</strong> temps<br />

<strong>de</strong> latence<br />

li<br />

Les 2 nœuds sont<br />

intégrés<br />

Le système a assimilé<br />

la modification<br />

1200 1490<br />

3600<br />

temps (secon<strong><strong>de</strong>s</strong>)<br />

Figure 4.9 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 4 à 6 nœuds - Expérience A<br />

Expérience µ ∆t(sec) λ α1 α2 π<br />

A 0.039 300 220% 99 −336 138.7<br />

Tab<strong>le</strong> 4.2 – Paramètres <strong>de</strong> l’expérience A<br />

La figure 4.9 illustre l’expérience A et <strong>le</strong> tab<strong>le</strong>au 4.2 la résume. Dans un premier temps,<br />

nous observons l’expérience et la manière dont nos paramètres la décrivent et, dans un second<br />

temps, nous déterminerons si cette transition tend à être élastique ou non.<br />

On voit très clairement <strong>le</strong>s 120 premières secon<strong><strong>de</strong>s</strong> durant <strong>le</strong>squel<strong>le</strong>s <strong>le</strong>s performances ne<br />

semb<strong>le</strong>nt pas s’altérer. Rappelons que l’anneau murmure durant ces 120 secon<strong><strong>de</strong>s</strong>, <strong>le</strong>s nouveaux<br />

nœuds ne sont pas encore intégrés et <strong>le</strong>s anciens vérifient <strong>le</strong>s informations du cluster (par<br />

exemp<strong>le</strong>, quel volume <strong>de</strong> donnée est stocké par chaque instance). Dès que <strong>le</strong>s 2 nouveaux<br />

nœuds sont intégrés, <strong><strong>de</strong>s</strong> <strong>données</strong> <strong>le</strong>ur sont transférées et <strong>le</strong>s temps <strong>de</strong> latence augmentent<br />

donc. Durant la montée <strong>de</strong> temps <strong>de</strong> latence, on voit qu’il y a un premier pic (avant <strong>le</strong> pic<br />

maximal) correspondant à l’intégration du premier nœud.<br />

La montée <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence est <strong>le</strong> résultat du trafic intérieur généré par <strong>le</strong> transfert<br />

<strong><strong>de</strong>s</strong> <strong>données</strong> vers <strong>le</strong>s nouveaux nœuds. Dès que <strong>le</strong>s <strong>données</strong> sont transférées, <strong>le</strong> système jouit<br />

<strong><strong>de</strong>s</strong> nouvel<strong>le</strong>s instances et <strong>le</strong>s temps <strong>de</strong> latence chutent immédiatement. Le fait que α1 est<br />

près <strong>de</strong> 4 fois plus petit que α2 (en va<strong>le</strong>ur absolue) exprime ce phénomène.<br />

l ni<br />

l nf<br />

53


Rappelons que µ = 0.5 pour système parfaitement élastique µ = 0 pour un système<br />

inélastique. Le constat <strong>de</strong> cette expérience n’est pas à la faveur <strong>de</strong> l’élasticité du système : on<br />

remarque <strong>de</strong> <strong>le</strong> coefficient d’adaptation est plus proche <strong>de</strong> celui d’un système inélastique que<br />

celui d’un élastique. En augmentant <strong>le</strong>s ressources <strong>de</strong> ∆n = 50%, nous obtenons un gain en<br />

performance <strong>de</strong> seu<strong>le</strong>ment 2%.<br />

Le gain (µ) est donc très réduit et l’impact maximal est important 220%. Le facteur<br />

<strong>de</strong> perturbation π nous indique que, durant la pério<strong>de</strong> d’adaptation, <strong>le</strong>s temps <strong>de</strong> réponses<br />

seront d’ordre général 139 fois supérieurs à ceux d’un système d’adaptant linéairement <strong>sur</strong><br />

cette pério<strong>de</strong>.<br />

Ces <strong>de</strong>rniers arguments nous indiquent que l’élasticité <strong>de</strong> cette transition n’est pas réel<strong>le</strong>.<br />

En production, il ne serait pas intéressant d’effectuer une tel<strong>le</strong> transition.<br />

Expérience B<br />

La charge <strong>de</strong> travail <strong>de</strong> cette expérience est différente <strong>de</strong> l’expérience A et composée principa<strong>le</strong>ment<br />

d’écritures. Le modè<strong>le</strong> <strong>de</strong> consistance <strong>de</strong> cette configuration (écriture :ONE/<strong>le</strong>cture :ALL)<br />

semb<strong>le</strong> donc plus adapté à cette charge <strong>de</strong> travail vu que <strong>le</strong>s écritures sont source <strong>de</strong> perte <strong>de</strong><br />

temps (el<strong>le</strong>s doivent réparer <strong>le</strong>s <strong>données</strong> pour as<strong>sur</strong>er une consistance forte).<br />

Configuration <strong>de</strong> l’expérience :<br />

– Charge <strong>de</strong> travail : écritures fréquentes (section 4.3.3)<br />

– Tail<strong>le</strong> initia<strong>le</strong> du cluster : 4 nœuds<br />

– Tail<strong>le</strong> fina<strong>le</strong> du cluster : 6 nœuds<br />

– Facteur <strong>de</strong> réplication : 3<br />

– Consistance en écriture : ONE<br />

– Consistance en <strong>le</strong>cture : ALL<br />

La figure 4.10 représente l’expérience B et <strong>le</strong> tab<strong>le</strong>au 4.3 résume <strong>le</strong>s paramètres <strong><strong>de</strong>s</strong> <strong>de</strong>ux<br />

expériences précé<strong>de</strong>ntes. Dans un premier temps, nous observons l’expérience et la manière<br />

dont nos paramètres la décrivent et, dans un second temps, nous déterminerons si cette<br />

transition tend à être élastique ou non.<br />

Expérience µ ∆t(sec) λ α1 α2 π<br />

A 0.039 300 220% 99 −336 138.7<br />

B 0.34 1000 184% 24.4 −9.91 56.1<br />

Tab<strong>le</strong> 4.3 – Paramètres <strong><strong>de</strong>s</strong> expériences A et B<br />

Les variations <strong>de</strong> temps <strong>de</strong> latence sont plus gran<strong><strong>de</strong>s</strong> que cel<strong>le</strong> <strong>de</strong> l’expérience A. Ce phénomène<br />

s’explique par la métho<strong>de</strong> <strong>de</strong> stockage <strong>de</strong> Cassandra : <strong>le</strong>s <strong>données</strong> sont consécutivement<br />

placées en mémoire <strong>sur</strong> <strong><strong>de</strong>s</strong> fichiers <strong>de</strong> log, inscrites dans une memtab<strong>le</strong> (in memory tab<strong>le</strong>) et<br />

écrites <strong>sur</strong> disque dans uneSSTab<strong>le</strong> (Sorted String Tab<strong>le</strong>). Lorsque 4 SSTab<strong>le</strong>s sont présentes<br />

<strong>sur</strong> disque un nouvel in<strong>de</strong>x est créé [4]. On par<strong>le</strong> <strong>de</strong> phénomène <strong>de</strong> compactage. Ce mécanisme<br />

à plusieurs étapes explique <strong>le</strong>s variations plus gran<strong><strong>de</strong>s</strong> <strong>de</strong> ces temps <strong>de</strong> réponse.<br />

On s’aperçoit que 40 minutes ne sont pas suffisantes au système pour connaitre une stabilisation<br />

: on voit que, lors <strong>de</strong> la phase <strong>de</strong> stabilisation, <strong>le</strong>s temps <strong>de</strong> réponse du système<br />

continuent à diminuer pour se stabiliser plus tard. Nous avons choisi <strong>de</strong> limiter <strong>le</strong> temps<br />

d’exécution pour étudier la transition. Il faut donc déterminer un temps <strong>de</strong> réponse moyen<br />

<strong>sur</strong> cette stabilisation.<br />

54


13.34<br />

temps <strong>de</strong> reponse (millisecon<strong><strong>de</strong>s</strong>)<br />

7.24<br />

6.01<br />

10<br />

Ajout <strong>de</strong> 2 nouveaux<br />

noeuds<br />

Le système a assimilé<br />

la modification<br />

1200 2190<br />

temps (secon<strong><strong>de</strong>s</strong>)<br />

3600<br />

Figure 4.10 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 4 à 6 nœuds - Expérience B<br />

On remarque aussi une adaptation beaucoup plus <strong>le</strong>nte que cel<strong>le</strong> <strong>de</strong> l’expérience A ; <strong>le</strong>s 3<br />

paramètres ∆t, α1 et α2 sont plus importants. Malgré tout, cette transition est plus élastique<br />

que la précé<strong>de</strong>nte. Son coefficient d’adaptation (π = 0.34) se rapproche <strong>de</strong> celui d’un système<br />

purement élastique (π = 0.5) et nous remarquons que <strong>le</strong>s temps <strong>de</strong> latence après modification<br />

tendaient à diminuer et donc à encore augmenter <strong>le</strong> score <strong>de</strong> π. Le pic <strong>de</strong> perte en performance<br />

est plus petit que celui <strong>de</strong> l’expérience A et <strong>le</strong> paramètre <strong>de</strong> perturbation π nous indique que<br />

<strong>le</strong>s temps <strong>de</strong> latences sont globa<strong>le</strong>ment “seu<strong>le</strong>ment” 56 fois supérieurs à ceux qu’un système<br />

s’adaptant <strong>de</strong> manière linéaire.<br />

Dans un espace <strong>de</strong> production, cette transition sera intéressante à faire dans la me<strong>sur</strong>e<br />

où <strong>le</strong>s gains sont importants et, même si <strong>le</strong> temps d’adaptation est long, <strong>le</strong>s perturbations ne<br />

semb<strong>le</strong>nt pas trop dérangeantes.<br />

Expérience C<br />

Cette expérience est similaire à l’expérience A. La différence se situe au niveau <strong>de</strong> <strong>le</strong>ur<br />

modè<strong>le</strong> <strong>de</strong> consistance. Même si la consistance est toujours forte, cel<strong>le</strong>-ci est obtenue grâce à<br />

<strong><strong>de</strong>s</strong> écritures et <strong>le</strong>ctures au QUORUM.<br />

Configuration <strong>de</strong> tests :<br />

– Charge <strong>de</strong> travail : <strong>le</strong>ctures fréquentes (section 4.3.3)<br />

Δt<br />

li<br />

l ni<br />

l nf<br />

55


– Tail<strong>le</strong> initia<strong>le</strong> du cluster : 4 nœuds<br />

– Tail<strong>le</strong> fina<strong>le</strong> du cluster : 6 nœuds<br />

– Facteur <strong>de</strong> réplication : 3<br />

– Consistance en écriture : QUORUM<br />

– Consistance en <strong>le</strong>cture : QUORUM<br />

La figure 4.11 représente l’expérience B et <strong>le</strong> tab<strong>le</strong>au 4.4 résume <strong>le</strong>s paramètres <strong><strong>de</strong>s</strong> cette<br />

expérience et ceux <strong>de</strong> l’expérience A. Dans un premier temps, nous observons l’expérience et<br />

la manière dont nos paramètres la décrivent et, dans un second temps, nous déterminerons si<br />

cette transition tend à être élastique ou non.<br />

temps <strong>de</strong> reponse (millisecon<strong><strong>de</strong>s</strong>)<br />

31.81<br />

16.31<br />

15.73<br />

10<br />

Ajout <strong>de</strong> 2 nouveaux<br />

noeuds<br />

Δt<br />

Le système a assimilé<br />

la modification<br />

1200 1400<br />

3600<br />

temps (secon<strong><strong>de</strong>s</strong>)<br />

Figure 4.11 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 4 à 6 nœuds - Expérience C<br />

Expérience µ ∆t(sec) λ α1 α2 π<br />

A 0.039 300 220% 99 −336 138.7<br />

C 0.071 200 195% 96.9 −536 130<br />

Tab<strong>le</strong> 4.4 – Paramètres <strong><strong>de</strong>s</strong> expériences A et C<br />

Cette expérience effectue <strong><strong>de</strong>s</strong> <strong>le</strong>ctures au QUORUM. Le système ne doit donc attendre<br />

que 2 réponses avant <strong>de</strong> retourner une entrée alors que dans l’expérience A, il <strong>de</strong>vait attendre<br />

<strong>le</strong>s 3 répliques. La charge <strong>de</strong> travail <strong>de</strong> ces expérience est forte en <strong>le</strong>cture et l’expérience C<br />

est donc plus performantes que l’expérience C. <strong>le</strong>s paramètres µ, ∆t, λ et π présentent <strong><strong>de</strong>s</strong><br />

meil<strong>le</strong>urs résultats.<br />

De manière similaire à l’expérience C, cette transition n’est pas élastique.<br />

li<br />

l nf<br />

l ni<br />

56


Expérience D<br />

Cette expérience est similaire à l’expérience 1 à la différence que la consistance est cette<br />

fois dite fina<strong>le</strong>ment consistante.<br />

Configuration <strong>de</strong> tests :<br />

– Charge <strong>de</strong> travail : <strong>le</strong>ctures fréquentes (section 4.3.3)<br />

– Tail<strong>le</strong> initia<strong>le</strong> du cluster : 4 nœuds<br />

– Tail<strong>le</strong> fina<strong>le</strong> du cluster : 6 nœuds<br />

– Facteur <strong>de</strong> réplication : 3<br />

– Consistance en écriture : ONE<br />

– Consistance en <strong>le</strong>cture : QUORUM<br />

temps <strong>de</strong> reponse (millisecon<strong><strong>de</strong>s</strong>)<br />

18.69<br />

16.1<br />

15.31<br />

10<br />

Ajout <strong>de</strong> 2 nouveaux<br />

noeuds<br />

Δt<br />

Le système a assimilé<br />

la modification<br />

1200 1580<br />

temps (secon<strong><strong>de</strong>s</strong>)<br />

3600<br />

Figure 4.12 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 4 à 6 nœuds - Expérience D<br />

La figure 4.11 représente l’expérience B et <strong>le</strong> tab<strong>le</strong>au 4.4 résume <strong>le</strong>s paramètres <strong>de</strong> cette<br />

expérience et ceux <strong>de</strong> <strong><strong>de</strong>s</strong> expériences A et C.<br />

Expérience µ ∆t(sec) λ α1 α2 π<br />

A 0.039 300 220% 99 −336 138.7<br />

C 0.071 200 195% 96.9 −536 130<br />

D 0.098 380 116% 129 −9.64 109<br />

Tab<strong>le</strong> 4.5 – Paramètres <strong><strong>de</strong>s</strong> expériences A, C et D<br />

li<br />

l ni<br />

l nf<br />

57


De manière généra<strong>le</strong>, on remarque que <strong>le</strong> relâchement <strong>de</strong> la consistance fait à cette expérience<br />

favorise µ, λ et π (par rapport aux expériences A et C). Par contre, on remarque <strong>le</strong><br />

temps d’adaptation est plus important pour l’expérience C.<br />

4.4.3 Descente à l’échel<strong>le</strong><br />

Analysons à présent comment Cassandra réagit au retrait d’une instance. Les expériences<br />

E, F, G et G décrivent la transition d’un cluster Cassandra passant <strong>de</strong> 5 à 4 nœuds.<br />

Le scénario est assez simp<strong>le</strong> : nous attaquons <strong>le</strong> cluster <strong>de</strong> cinq nœuds durant vingt minutes.<br />

Après ces vingt minutes, un nœud signa<strong>le</strong> qu’il veut se retirer <strong>de</strong> l’anneau. Simultanément,<br />

nous relançons la charge <strong>sur</strong> <strong>le</strong> cluster mais en ne ciblant plus que <strong>le</strong>s quatre composantes<br />

restantes <strong>de</strong> l’anneau.<br />

Expérience E<br />

Cette expérience est notre première expérience <strong>de</strong> <strong><strong>de</strong>s</strong>cente à l’échel<strong>le</strong>. El<strong>le</strong> simu<strong>le</strong> une<br />

charge forte en <strong>le</strong>cture et un modè<strong>le</strong> <strong>de</strong> consistance forte (<strong>le</strong>cture :ALL/écriture :ONE).<br />

Configuration <strong>de</strong> tests :<br />

– Charge <strong>de</strong> travail : <strong>le</strong>ctures fréquentes (section 4.3.3)<br />

– Tail<strong>le</strong> initia<strong>le</strong> du cluster : 5 nœuds<br />

– Tail<strong>le</strong> fina<strong>le</strong> du cluster : 4 nœuds<br />

– Facteur <strong>de</strong> réplication : 3<br />

– Consistance en écriture : ONE<br />

– Consistance en <strong>le</strong>cture : ALL<br />

La figure 4.13 représente l’expérience E et <strong>le</strong> tab<strong>le</strong>au 4.6 résume ses paramètres.<br />

Expérience µ ∆t(sec) λ α1 α2 π<br />

E 0.556 290 264% 115 −472 147.6<br />

Tab<strong>le</strong> 4.6 – Paramètres <strong>de</strong> l’expériences E<br />

On remarque que <strong>le</strong>s temps <strong>de</strong> latences grimpent <strong>le</strong>ntement et puis chutent brusquement.<br />

Nous avons <strong>sur</strong>veillé cette opération et nous avons observé que cette chute <strong><strong>de</strong>s</strong> temps <strong>de</strong><br />

latence avait lieu immédiatement après que <strong>le</strong> nœud se soit retirer <strong>de</strong> l’anneau c’est-à-dire<br />

lorsqu’il a transféré toutes ses <strong>données</strong> aux autres nœuds. Ceci explique donc que α1 est 4 fois<br />

plus grand que α2 en va<strong>le</strong>ur absolue.<br />

λ vaut 264%. Cette forte perte en performance se justifie par <strong>le</strong> fait que <strong>le</strong> nœud se retirant<br />

transfère ses <strong>données</strong> à 3 autres instances. Il n’y a donc plus qu’une seu<strong>le</strong> instance qui n’est<br />

pas perturbée par <strong>le</strong> trafic intérieur.<br />

Expérience F<br />

Cette expérience est similaire à l’expérience E. La différence est que cel<strong>le</strong>-ci exécute la<br />

charge <strong>de</strong> travail 2 (c’est-à-dire lour<strong>de</strong> en écritures).<br />

58


temps <strong>de</strong> reponse (millisecon<strong><strong>de</strong>s</strong>)<br />

40.76<br />

17.15<br />

15.43<br />

10<br />

Retrait d'un noeud<br />

Δt<br />

Le système a assimilé<br />

la modification<br />

1200 1480<br />

temps (secon<strong><strong>de</strong>s</strong>)<br />

3600<br />

Figure 4.13 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 5 à 4 nœuds - expérience E<br />

Configuration <strong>de</strong> tests :<br />

– Charge <strong>de</strong> travail : écritures fréquentes (section 4.3.3)<br />

– Tail<strong>le</strong> initia<strong>le</strong> du cluster : 5 nœuds<br />

– Tail<strong>le</strong> fina<strong>le</strong> du cluster : 4 nœuds<br />

– Facteur <strong>de</strong> réplication : 3<br />

– Consistance en écriture : ONE<br />

– Consistance en <strong>le</strong>cture : ALL<br />

La figure 4.14 représente l’expérience F et <strong>le</strong> tab<strong>le</strong>au 4.7 résume ses paramètres et ceux<br />

<strong>de</strong> l’expérience E.<br />

Expérience G<br />

Expérience µ ∆t(sec) λ α1 α2 π<br />

E 0.556 290 264% 115 −472 147.6<br />

F 1.36 900 674% 64.8 −55.1 87.7<br />

Tab<strong>le</strong> 4.7 – Paramètres <strong><strong>de</strong>s</strong> expériences E et F<br />

Cette expérience est similaire à l’expérience E. La différence est son modè<strong>le</strong> <strong>de</strong> consistance<br />

(écriture et <strong>le</strong>cture au quorum). La consistance reste forte.<br />

li<br />

l ni<br />

l nf<br />

59


31.93<br />

temps <strong>de</strong> reponse (millisecon<strong><strong>de</strong>s</strong>)<br />

6.03<br />

4.74<br />

10<br />

Retrait d'un noeud<br />

Δt<br />

1200 2090<br />

3600<br />

temps (secon<strong><strong>de</strong>s</strong>)<br />

Le système a assimilé<br />

la modification<br />

Figure 4.14 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 5 à 4 nœuds -expérience F<br />

Configuration <strong>de</strong> tests :<br />

– Charge <strong>de</strong> travail : <strong>le</strong>ctures fréquentes (section 4.3.3)<br />

– Tail<strong>le</strong> initia<strong>le</strong> du cluster : 5 nœuds<br />

– Tail<strong>le</strong> fina<strong>le</strong> du cluster : 4 nœuds<br />

– Facteur <strong>de</strong> réplication : 3<br />

– Consistance en écriture : QUORUM<br />

– Consistance en <strong>le</strong>cture : QUORUM<br />

La figure 4.15 représente l’expérience F et <strong>le</strong> tab<strong>le</strong>au 4.8 résume ses paramètres et ceux<br />

<strong>de</strong> l’expérience E.<br />

Expérience H<br />

Expérience µ ∆t(sec) λ α1 α2 π<br />

E 0.556 290 264% 115 −472 147.6<br />

G 1.38 270 254% 136 −210 153<br />

Tab<strong>le</strong> 4.8 – Paramètres <strong><strong>de</strong>s</strong> expériences E et G<br />

Cette expérience est similaire à l’expérience E. La différence est qu’el<strong>le</strong> modélise une<br />

consistance forte via <strong>le</strong> modè<strong>le</strong> <strong>de</strong> consistante écriture :ONE/<strong>le</strong>cture :QUORUM.<br />

li<br />

l ni<br />

l nf<br />

60


temps <strong>de</strong> reponse (millisecon<strong><strong>de</strong>s</strong>)<br />

38.04<br />

19.14<br />

15<br />

10<br />

Retrait d'un noeud<br />

1200<br />

Δt<br />

Le système a assimilé<br />

la modification<br />

1470<br />

temps (secon<strong><strong>de</strong>s</strong>)<br />

Figure 4.15 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 5 à 4 nœuds - Expérience G<br />

Configuration <strong>de</strong> tests :<br />

– Charge <strong>de</strong> travail : <strong>le</strong>ctures fréquentes (section 4.3.3)<br />

– Tail<strong>le</strong> initia<strong>le</strong> du cluster : 5 nœuds<br />

– Tail<strong>le</strong> fina<strong>le</strong> du cluster : 4 nœuds<br />

– Facteur <strong>de</strong> réplication : 3<br />

– Consistance en écriture : ONE<br />

– Consistance en <strong>le</strong>cture : QUORUM<br />

Expérience µ ∆t(sec) λ α1 α2 π<br />

E 0.556 290 264% 115 −472 147.6<br />

G 1.38 270 254% 136 −210 153<br />

H 1.18 170 369% 452 −530 150<br />

4.4.4 Analyse <strong><strong>de</strong>s</strong> résultats<br />

Tab<strong>le</strong> 4.9 – Paramètres <strong><strong>de</strong>s</strong> expériences E, G et H<br />

Dans cette section, nous analyserons <strong>le</strong>s résultats <strong>de</strong> nos expériences. Ces résultats sont<br />

repris dans la tab<strong>le</strong> 4.10.<br />

li<br />

l ni<br />

l nf<br />

3600<br />

61


temps <strong>de</strong> reponse (millisecon<strong><strong>de</strong>s</strong>)<br />

55.85<br />

18.73<br />

15.15<br />

10<br />

Retrait d'un noeud<br />

Δt<br />

1200 1370<br />

3600<br />

temps (secon<strong><strong>de</strong>s</strong>)<br />

Le système a assimilé<br />

la modification<br />

Figure 4.16 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 5 à 4 nœuds - Expérience H<br />

Le cluster <strong>de</strong> test<br />

La première remarque que nous tenons à faire est que <strong>le</strong> cluster <strong>de</strong> test n’est pas purement<br />

homogène. Il est composé <strong>de</strong> quatre nœuds <strong>de</strong> type A et <strong>de</strong> <strong>de</strong>ux nœuds <strong>de</strong> type B. Dans notre<br />

cas d’étu<strong>de</strong>, nos différents paramètres ne sont pas utilisés pour afficher <strong><strong>de</strong>s</strong> performances d’un<br />

système mais pour servir <strong>de</strong> critères <strong>de</strong> comparaison <strong>sur</strong> l’impact du choix d’architecture <strong>sur</strong><br />

nos différents paramètres.<br />

Dans ce contexte, vu que <strong>le</strong>s scénarios sont reproduits <strong>de</strong> manière analogue <strong>sur</strong> chaque<br />

test, ces différences entre <strong>le</strong>s nœuds et <strong>le</strong>urs caractéristiques ne sont pas significatives dans<br />

notre étu<strong>de</strong>. Le tab<strong>le</strong>au 4.11 résume toutefois, <strong>le</strong>s configurations <strong><strong>de</strong>s</strong> <strong>de</strong>ux types <strong>de</strong> serveurs.<br />

Le coefficient d’adaptation µ<br />

Une première constatation est que µ est plus grand pour <strong>le</strong>s systèmes <strong><strong>de</strong>s</strong>cendants que pour<br />

<strong>le</strong>s systèmes montants à l’échel<strong>le</strong>. Ceci peut s’observer en regardant <strong>le</strong>s coup<strong>le</strong>s d’expériences<br />

(A,E), (B,F), (C,G) et (D,H) qui partagent exactement <strong>le</strong>s mêmes charges <strong>de</strong> travail. Cette<br />

constatation peut être résumée simp<strong>le</strong>ment <strong>de</strong> la façon suivante : la perte en performance<br />

due au retrait d’une instance d’un cluster <strong>de</strong> cinq nœuds est plus importante que <strong>le</strong> gain en<br />

performance d’une augmentation <strong>de</strong> <strong>de</strong>ux nœuds d’un cluster composé initia<strong>le</strong>ment <strong>de</strong> quatre<br />

instances. Ceci est assez sévère mais n’est pas étonnant ; il y a <strong>de</strong>ux raisons à cela :<br />

– Lors <strong>de</strong> l’ajout <strong>de</strong> nœuds, Cassandra décharge <strong>le</strong>s plus remplis en donnant la moitié <strong>de</strong><br />

li<br />

l ni<br />

l nf<br />

62


Expérience µ ∆t(sec) λ α1 α2 π<br />

A 0.039 300 220% 99 −336 138.7<br />

B 0.34 1000 184% 24.4 −9.91 56.1<br />

C 0.071 200 195% 96.9 −536 130<br />

D 0.098 380 116% 129 −9.64 109<br />

E 0.556 290 264% 115 −472 147.6<br />

F 1.36 900 674% 64.8 −55.1 87.7<br />

G 1.38 270 254% 136 −210 153<br />

H 1.18 170 369% 452 −530 150<br />

Tab<strong>le</strong> 4.10 – Résumé <strong><strong>de</strong>s</strong> paramètres <strong><strong>de</strong>s</strong> expériences A-H<br />

type A type B<br />

Processeur AMD Opteron Dual Core -2,2 Ghz AMD Athlon II X2 255 - 3,1 Ghz<br />

Mémoire RAM 8 Gb 8 Gb<br />

OS Ubuntu 10.04.2 LTS Ubuntu 10.04.2 LTS<br />

Connection Gigabit ethernet interconnect<br />

Tab<strong>le</strong> 4.11 – Configuration du cluster <strong>de</strong> test<br />

<strong>le</strong>urs <strong>données</strong> aux nouvel<strong>le</strong>s instances <strong>de</strong> l’anneau. Le retrait ne respecte pas du tout<br />

<strong>le</strong> même schéma, <strong>le</strong> nœud qui se retire <strong>de</strong> l’anneau est choisi par un acteur humain<br />

(aléatoirement). Il peut en résulter un nouvel anneau moins équilibré et donc moins<br />

performant.<br />

– Nous ajoutons <strong>de</strong>ux instances qui, lorsque que l’anneau déci<strong>de</strong> qu’el<strong>le</strong>s sont joignab<strong>le</strong>s,<br />

responsab<strong>le</strong>s <strong>de</strong> <strong>données</strong>, ne sont pas forcement stabilisées. El<strong>le</strong>s n’ont pas forcément<br />

encore bien mis <strong>le</strong>s <strong>données</strong> en cache et sont peut-être encore victimes <strong>de</strong> phénomènes<br />

<strong>de</strong> compactage et <strong>de</strong> mise en mémoire.<br />

La va<strong>le</strong>ur <strong>de</strong> µ est critiquab<strong>le</strong>. Ceci vient <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence moyens avant (lni ) et après<br />

modification (lnf ) :<br />

– Premièrement, (lni ) et (lnf ) <strong>le</strong>s temps <strong>de</strong> latence moyens sont pris <strong>sur</strong> une durée <strong>de</strong> temps<br />

très réduite. On ne se repose pas <strong>sur</strong> une notion forte <strong>de</strong> système stabilisé pour tirer la<br />

moyenne. On peut donc observer à l’expérience 3 (figure 4.11) que <strong>sur</strong> <strong><strong>de</strong>s</strong> systèmes non<br />

stab<strong>le</strong>s, ces moyennes sont sujettes à controverse 9 .<br />

– Secon<strong>de</strong>ment, lnf est la moyenne arithmétique <strong><strong>de</strong>s</strong> temps <strong>de</strong> latences <strong>de</strong> <strong>sur</strong> l’interval<strong>le</strong><br />

[tm + ∆t, tf ]. Or ∆t est sujet à interprétation humaine, ceci peut donc discréditer lnf<br />

vu que déterminer ∆t est assez diffici<strong>le</strong>.<br />

Cette critique est inhérente à notre approche : notre but était <strong>de</strong> déterminer <strong>le</strong>s effets<br />

immédiats <strong>de</strong> la modification <strong>sur</strong> <strong>le</strong> système en transition. Remarquons aussi que µ peut<br />

semb<strong>le</strong>r faib<strong>le</strong> (resp. fort) pour l’ajout (resp. retrait) d’instance. Ceci est dû au fait que lors<br />

<strong>de</strong> la phase d’attaque, <strong>le</strong> système est stab<strong>le</strong> tandis que lors <strong>de</strong> la phase <strong>de</strong> stabilisation, <strong>le</strong><br />

système n’est pas encore stabilisé et présente donc <strong><strong>de</strong>s</strong> performances plus faib<strong>le</strong>s.<br />

9. Pour calcu<strong>le</strong>r ln i et ln f , la médiane a été considérée mais dans nos expériences, médianes et moyennes<br />

restent fort proches.<br />

63


La forme <strong>de</strong> l’adaptation (α1, li, α2)<br />

Notre approche intuitive <strong>de</strong> caractériser <strong>le</strong> comportement du système via l’impact maximal<br />

λ et <strong>le</strong>s ang<strong>le</strong>s α1 et α2 semb<strong>le</strong> proche du comportement <strong>de</strong> la majorité <strong><strong>de</strong>s</strong> transitions.<br />

Pour la charge <strong>de</strong> travail forte en <strong>le</strong>cture, <strong>le</strong> système met <strong>le</strong> doub<strong>le</strong> <strong>de</strong> temps pour atteindre<br />

<strong>le</strong> pic (<strong>de</strong> perte <strong>de</strong> performance) que pour que ses temps <strong>de</strong> réponse ne soient plus affectés<br />

par la modification (|α1| > |α2|).<br />

Lorsque <strong>le</strong> cluster murmure l’arrivée ou <strong>le</strong> retrait <strong>de</strong> nœuds, il calcu<strong>le</strong> <strong>le</strong> volume <strong>de</strong> <strong>données</strong><br />

que <strong>le</strong>s instances vont <strong>de</strong>voir transférer puis commence <strong>le</strong> transfert. Or l’application continue à<br />

effectuer <strong><strong>de</strong>s</strong> écritures. Une fois <strong>le</strong> volume initial transféré, <strong>le</strong>s nœuds <strong>de</strong>vront encore échanger<br />

<strong>le</strong>s <strong>données</strong> écrites durant ce premier transfert.<br />

Le temps d’adaptation ∆t<br />

On remarque que globa<strong>le</strong>ment, ∆T est plus petit pour <strong>le</strong> retrait <strong><strong>de</strong>s</strong> instances. Ceci s’explique<br />

par <strong>le</strong> nombre <strong>de</strong> nœuds dérangés par <strong>le</strong>s opérations. Dans un premier temps, durant la<br />

montée <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence, <strong>le</strong> nœud qui se retire va rediriger ses <strong>données</strong> vers 3 instances (3<br />

étant <strong>le</strong> facteur <strong>de</strong> réplication). Ensuite, une fois que l’instance s’est retirée, <strong>le</strong>s trois instances<br />

doivent se stabiliser. Lors <strong>de</strong> l’ajout <strong>de</strong> 2 nœuds, ceux-ci perturbent 2 autres nœuds durant<br />

toute la pério<strong>de</strong> d’adaptation. Il y a donc 4 nœuds qui sont dérangés. Ce qui explique que <strong>le</strong><br />

systèmes est dérangé plus longtemps. Remarquons que <strong>le</strong>s coefficients <strong>de</strong> <strong><strong>de</strong>s</strong>centes α2 sont<br />

globa<strong>le</strong>ment plus grands (en va<strong>le</strong>ur absolue) pour <strong>le</strong>s retraits que pour <strong>le</strong>s ajouts (exception<br />

faite du coup<strong>le</strong> d’expériences (C,G)).<br />

La perturbation d’adaptation π<br />

L’idée <strong>de</strong> ce facteur <strong>de</strong> perturbation π était <strong>de</strong> fournir une va<strong>le</strong>ur sans dimension caractérisant<br />

<strong>le</strong>s perturbations liées à la modification du système. La <strong>sur</strong>face qu’il représente est<br />

la variation <strong><strong>de</strong>s</strong> performances du système par rapport à un système qui passerait à l’échel<strong>le</strong><br />

<strong>de</strong> manière linéaire durant <strong>le</strong> temps d’adaptation. Plus précisément, un système passant à<br />

l’échel<strong>le</strong> <strong>de</strong> manière linéaire durant la pério<strong>de</strong> d’adaptation aura une perturbation <strong>de</strong> 1. Un<br />

système s’adaptant plus vite à la modification qu’un système linéaire (ceci est considération<br />

purement théorique) aurait une perturbation comprise entre 0 et 1.<br />

L’explication intuitive <strong>de</strong> ce facteur est que plus grand il sera, plus la perturbation d’adaptation<br />

aura un effet négatif <strong>sur</strong> <strong>le</strong>s performances durant la pério<strong>de</strong> d’adaptation. Rappelons<br />

que la perturbation d’adaptation est indépendante du temps d’adaptation. Il est donc tout<br />

à fait possib<strong>le</strong> d’avoir une modification entrainant un temps d’adaptation très faib<strong>le</strong> et une<br />

perturbation très forte (l’expérience 8 en est un exemp<strong>le</strong>).<br />

Ce paramètre représente bien l’impact <strong>de</strong> la perturbation, on <strong>le</strong> remarque dans toutes<br />

nos expériences, plus la perturbation est importante, plus π sera grand. Malheureusement,<br />

nous ne disposons pas d’assez <strong>de</strong> va<strong>le</strong>urs pour essayer <strong>de</strong> donner <strong><strong>de</strong>s</strong> ordres <strong>de</strong> gran<strong>de</strong>urs qui<br />

démarqueraient <strong>le</strong>s scores acceptab<strong>le</strong>s <strong><strong>de</strong>s</strong> scores inacceptab<strong>le</strong>s.<br />

64


4.5 Les travaux <strong>de</strong> Thibault Dory<br />

Thibault Dory, étudiant à l’Université Catholique <strong>de</strong> Louvain, a aussi étudié durant cette<br />

année l’élasticité <strong><strong>de</strong>s</strong> BDs <strong>sur</strong> <strong>cloud</strong>. Il propose, dans ce contexte, une étu<strong>de</strong> comparative<br />

<strong>de</strong> HBase, Cassandra et MongoDB [41]. Cette étu<strong>de</strong> apporte <strong><strong>de</strong>s</strong> résultats intéressants. Nous<br />

expliquerons dans cette section sa méthodologie dans <strong>le</strong> but <strong>de</strong> pouvoir rendre compréhensib<strong>le</strong><br />

et d’exploiter ses résultats et réf<strong>le</strong>xions. Nous pensons que l’analyse poussée <strong>de</strong> ses travaux<br />

couplée avec <strong>le</strong>s nôtres apporte <strong><strong>de</strong>s</strong> aspects plus techniques et pratiques qui compléteront<br />

notre approche.<br />

4.5.1 Méthodologie<br />

La méthodologie utilisée est une simplification <strong>de</strong> Wikipedia : un ensemb<strong>le</strong> d’artic<strong>le</strong>s est<br />

chargé <strong>de</strong>puis Wikipédia. Cet ensemb<strong>le</strong> servira ensuite <strong>de</strong> jeu <strong>de</strong> <strong>données</strong>. L’idée généra<strong>le</strong><br />

est d’insérer ces artic<strong>le</strong>s (i<strong>de</strong>ntifiés à l’ai<strong>de</strong> d’une clé unique) dans un SGBD et d’ensuite<br />

soumettre <strong>le</strong> système à un nombre <strong>de</strong> requêtes en parallè<strong>le</strong> qui effectuent <strong>de</strong> manière aléatoire<br />

<strong><strong>de</strong>s</strong> opérations <strong>de</strong> mises à jour et <strong>de</strong> <strong>le</strong>ctures.<br />

Contrairement à notre approche, cette étu<strong>de</strong> a choisi comme métrique <strong>le</strong> temps nécessaire à<br />

effectuer l’ensemb<strong>le</strong> <strong><strong>de</strong>s</strong> opérations (el<strong>le</strong> effectue 10 fois l’ensemb<strong>le</strong> <strong><strong>de</strong>s</strong> opérations et considère<br />

la moyenne <strong>de</strong> ces temps). Pour un cluster composé initia<strong>le</strong>ment <strong>de</strong> N nœuds, <strong>le</strong> système sera<br />

attaqué parallè<strong>le</strong>ment par N ensemb<strong>le</strong>s d’opérations.<br />

Durant ces expériences, <strong>le</strong> facteur <strong>de</strong> réplication sera fixé à 3 et la consistance sera forte.<br />

Les systèmes seront déployés <strong>sur</strong> <strong><strong>de</strong>s</strong> instances RackSpace 4GB. Le volume <strong>de</strong> <strong>données</strong> est<br />

voulu assez large pour ne pas pouvoir être contenu en mémoire RAM 10 .<br />

4.5.2 Définitions<br />

L’élasticité<br />

L’élasticité est vue comme la caractérisation <strong>de</strong> la réaction du cluster lorsqu’on ajoute/retire<br />

<strong><strong>de</strong>s</strong> nœuds. El<strong>le</strong> est décrite par <strong>de</strong>ux propriétés : <strong>le</strong> temps que prend <strong>le</strong> cluster à se stabiliser<br />

et l’impact en performance.<br />

Selon T. Dory [41], un système peut être défini comme stab<strong>le</strong> lorsque <strong>le</strong>s variations <strong><strong>de</strong>s</strong><br />

temps <strong>de</strong> traitement <strong>de</strong> plusieurs ensemb<strong>le</strong>s <strong>de</strong> requêtes sont équiva<strong>le</strong>ntes aux variations d’un<br />

système reconnu comme stab<strong>le</strong> (c’est-à-dire tel qu’il n’y a plus <strong>de</strong> transfert <strong>de</strong> <strong>données</strong> entre <strong>le</strong>s<br />

différents nœuds du cluster). En pratique, un système stab<strong>le</strong> lorsque <strong>le</strong>s 5 <strong>de</strong>rniers ensemb<strong>le</strong>s<br />

<strong>de</strong> requêtes ont <strong><strong>de</strong>s</strong> variations inférieures à la variation <strong>de</strong> l’ensemb<strong>le</strong> précé<strong>de</strong>nt.<br />

Dans <strong>le</strong> but <strong>de</strong> pouvoir comparer l’élasticité <strong>de</strong> systèmes fort différents, cette approche<br />

propose une formu<strong>le</strong> définissant l’élasticité tel un unique paramètre sans dimension. Voici sa<br />

définition :<br />

Définition 18.<br />

Elasticity =<br />

A+B<br />

(Rt1+RT 2)∗(Av1+Av2)<br />

10. Pour plus <strong>de</strong> détails <strong>sur</strong> <strong>le</strong>s spécifications <strong><strong>de</strong>s</strong> SGBDs déployés, nous vous invitons à la <strong>le</strong>cture <strong>de</strong> [41]<br />

65


Comme illustré en figure 4.17, la <strong>sur</strong>face A décrit l’augmentation du temps résultant <strong>de</strong> la<br />

modification tandis que la <strong>sur</strong>face B décrit <strong>le</strong>s déviations standard <strong><strong>de</strong>s</strong> ensemb<strong>le</strong>s <strong>de</strong> requêtes.<br />

Rt1 et Rt2 sont <strong>le</strong>s temps moyens <strong>de</strong> réponse pour d’une requête <strong>sur</strong> <strong>le</strong> système stab<strong>le</strong> avant<br />

et après la modification. Av1 et Av2 sont eux <strong>le</strong>s temps moyens <strong>de</strong> traitement du système<br />

stab<strong>le</strong> d’un ensemb<strong>le</strong> <strong>de</strong> requêtes avant et après sa modification. Si cet ensemb<strong>le</strong> est composé<br />

<strong>de</strong> 1000 requêtes et <strong>le</strong> cluster d’un nombre initial <strong>de</strong> six nœuds, Av1 = 1000/6 ∗ Rt1. Notons<br />

que ces ensemb<strong>le</strong>s <strong>de</strong> requêtes sont toujours composés <strong>de</strong> 80% <strong>de</strong> <strong>le</strong>ctures. Nous discuterons<br />

<strong>de</strong> la pertinence <strong>de</strong> cette définition dans <strong>le</strong>s sections suivantes.<br />

La montée à l’échel<strong>le</strong><br />

Figure 4.17 – Surfaces utilisées pour caractériser l’élasticité[41]<br />

Dans cette approche, la capacité <strong>de</strong> monter à l’échel<strong>le</strong> (scalabilty en anglais) est définie<br />

comme <strong>le</strong> changement <strong>de</strong> performance lorsque <strong>le</strong> système résultant <strong>de</strong> la modification est<br />

stabilisé. Il la caractérise grâce à un paramètre sans dimension suivant la définition suivante :<br />

Définition 19.<br />

ScalabilityN = Average2N −AverageN<br />

AverageN<br />

Plusieurs informations doivent être apportées à ce niveau : cette approche n’étudie que la<br />

montée à l’échel<strong>le</strong> <strong><strong>de</strong>s</strong> systèmes qu’el<strong>le</strong> limite, pour différentes raisons techniques, à doub<strong>le</strong>r<br />

la tail<strong>le</strong> du <strong>cloud</strong>. Ces étu<strong><strong>de</strong>s</strong> nous montrent <strong><strong>de</strong>s</strong> systèmes passant <strong>de</strong> 6 à 12, <strong>de</strong> 12 à 24 et <strong>de</strong><br />

24 à 48 nœuds. Le scénario est <strong>le</strong> suivant : charger un système <strong>de</strong> N nœuds avec N ensemb<strong>le</strong>s<br />

<strong>de</strong> requêtes, attendre la stabilisation, doub<strong>le</strong>r <strong>le</strong> nombre <strong>de</strong> nœuds et attendre la stabilisation<br />

(avec la même charge en continu). Lorsque <strong>le</strong> système est stab<strong>le</strong>, doub<strong>le</strong>r la tail<strong>le</strong> <strong><strong>de</strong>s</strong> <strong>données</strong><br />

et charger avec 2N ensemb<strong>le</strong>s <strong>de</strong> requêtes (voir figure 4.18).<br />

AverageN (resp. Average2N) correspond au temps moyen <strong>de</strong> réponses pour une BD <strong>de</strong> N<br />

(resp. 2N) nœuds attaquée par N (resp. 2N) ensemb<strong>le</strong>s <strong>de</strong> requêtes. Un système qui monterait<br />

parfaitement à l’échel<strong>le</strong> <strong>de</strong>vrait avoir une montée à l’échel<strong>le</strong> éga<strong>le</strong> à 0. Ce facteur sert donc<br />

à me<strong>sur</strong>er la capacité à monter à l’échel<strong>le</strong> et n’est donc pas comparab<strong>le</strong> à notre coefficient<br />

d’adaptation.<br />

66


4.5.3 Résultats<br />

Considérations supplémentaires<br />

Figure 4.18 – T. Dory - Scénario <strong>de</strong> tests [41]<br />

Les trois systèmes MongoDB , Cassandra et Hbase proposent <strong><strong>de</strong>s</strong> architectures fort différentes.<br />

Or, nous l’avons souligné précé<strong>de</strong>mment, <strong>le</strong> rô<strong>le</strong> <strong><strong>de</strong>s</strong> instances ajoutées va influer<br />

fortement <strong>sur</strong> l’effet <strong>de</strong> cette modification. Dans cette section, nous décrirons <strong>le</strong>s choix faits<br />

lors <strong>de</strong> ces tests.<br />

– Cassandra est <strong>le</strong> plus simp<strong>le</strong> à décrire : vu que chaque nœud est similaire, il n’y a qu’un<br />

type <strong>de</strong> nœud possib<strong>le</strong> comme ajout. Soulignons que dans ces tests, contrairement aux<br />

nôtres, ne répartissent pas la charge <strong>sur</strong> <strong>le</strong>s nœuds fraîchement ajoutés à l’anneau.<br />

– MongoDB réplique <strong>le</strong>s <strong>données</strong> au sein <strong>de</strong> ses shards. Dans la configuration <strong>de</strong> ses<br />

tests, T. Dory regroupe <strong>le</strong>s nœuds par 3 pour former <strong><strong>de</strong>s</strong> shards respectant <strong>le</strong> modè<strong>le</strong> <strong>de</strong><br />

réplication par pairs (et avoir un facteur <strong>de</strong> réplication <strong>de</strong> 3). Il faut donc considérer que<br />

<strong>le</strong>s nœuds recevant <strong>le</strong>s requêtes ne représentent qu’un tiers <strong><strong>de</strong>s</strong> nœuds du cluster. Les<br />

serveurs <strong>de</strong> configuration seront aussi hébergés par <strong>le</strong>s trois premiers nœuds du cluster.<br />

– Hbase est plus comp<strong>le</strong>xe que <strong>le</strong>s <strong>de</strong>ux premiers systèmes d’un point <strong>de</strong> vue architectural.<br />

Dans ces tests-ci, un même nœud est chargé du service maître Hbase, du service serveur<br />

<strong>de</strong> nom <strong>de</strong> Hadoop et <strong>de</strong> Zookeeper. Toutes <strong>le</strong>s autres instances auront la configuration<br />

suivante : 2GB <strong>de</strong> mémoire sont alloués au serveur <strong>de</strong> région <strong>de</strong> Hbase et 1GB est alloué<br />

au serveur <strong>de</strong> <strong>données</strong> <strong>de</strong> Hadoop.<br />

Descriptions<br />

La figure 4.19 représente <strong>le</strong> comportement <strong>de</strong> Cassandra passant <strong>de</strong> 12 à 24 nœuds. El<strong>le</strong><br />

représente une série temporel<strong>le</strong> <strong><strong>de</strong>s</strong> temps moyens pour traiter <strong><strong>de</strong>s</strong> séries d’ensemb<strong>le</strong>s <strong>de</strong> requêtes.<br />

Les segments verticaux représentent <strong>le</strong>s déviations standards <strong>de</strong> ces séries.<br />

4.5.4 Analyse<br />

Les apports <strong>de</strong> cette étu<strong>de</strong> sont nombreux et <strong>de</strong> qualité. Dans cette section, nous reprendrons<br />

quelques analyses fortes intéressantes qui ne seront pas reprises dans <strong>le</strong> prochain<br />

chapitre.<br />

67


Figure 4.19 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 24 à 48 nœuds[41]<br />

Phénomène <strong>de</strong> compactage<br />

Les différents systèmes présentés au chapitre 3 présentent <strong><strong>de</strong>s</strong> politiques différentes quant<br />

à la gestion <strong>de</strong> la mémoire :<br />

– Chez Cassandra, toutes <strong>le</strong>s écritures sont inscrites dans un fichier <strong>de</strong> log, puis l’information<br />

est inscrite dans une memtab<strong>le</strong>. Lorsque celui-ci est p<strong>le</strong>in, <strong>le</strong>s <strong>données</strong> sont écrites<br />

dans une SSTab<strong>le</strong>. Chaque fois, que 4 SSTab<strong>le</strong> sont présentes <strong>sur</strong> disque, un compactage<br />

a lieu : <strong>le</strong>s <strong>données</strong> sont reconstruites et un nouvel in<strong>de</strong>x est créé [4]. C’est à ces moments<br />

<strong>de</strong> compactage qu’ont lieu <strong>le</strong>s grosses écritures <strong>sur</strong> disque. Le comportement <strong>de</strong> Hbase<br />

est plus ou moins similaire (ce système <strong>de</strong> gestion <strong>de</strong> mémoire est repris à BigTab<strong>le</strong> qui<br />

est à l’origine <strong>de</strong> Cassandra et Hbase ).<br />

– Chez MongoDB, la politique est différente. MongoDB opte pour la pré-allocation d’espace.<br />

La mise en disque est une décision laissée au système d’exploitation. Par défaut,<br />

la mise en disque est périodique (toutes <strong>le</strong>s 60 secon<strong><strong>de</strong>s</strong>) Mongo pré-alloue <strong><strong>de</strong>s</strong> grands<br />

fichiers lorsqu’il a besoin <strong>de</strong> grands espaces c’est-à-dire lorsqu’il doit écrire beaucoup<br />

<strong>de</strong> <strong>données</strong>, ce qui est typiquement <strong>le</strong> cas lorsqu’une nouvel<strong>le</strong> instance doit stocker un<br />

grand nombre d’entrées [41].<br />

Ces phénomènes <strong>de</strong> compactage ne sont pas négligeab<strong>le</strong>s. Sur <strong>le</strong>s figures 4.20 et 4.21, on<br />

voit que <strong>le</strong>s variations en performance <strong>sur</strong> un cluster <strong>de</strong> 6 nœuds sont plus significatives que<br />

ceux <strong>de</strong> la variation due au dédoub<strong>le</strong>ment du cluster.<br />

Il ne s’agit pas d’occulter ces phénomènes <strong>de</strong> compactage car ils sont inhérents aux BDs.<br />

Remarquons que la différence <strong>de</strong> variation <strong>de</strong> performance (<strong>le</strong>s déviations standards) entre<br />

<strong>le</strong>s figures 4.20 et 4.21 est due à la tail<strong>le</strong> <strong><strong>de</strong>s</strong> memtab<strong>le</strong> : 256MB pour Hbase et 64MB pour<br />

Cassandra. Chez Cassandra, ces phénomènes <strong>de</strong> compactage ont donc lieu plus souvent, ce<br />

qui entraine cette variation <strong>de</strong> performance.<br />

68


Figure 4.20 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 6 à 12 nœuds[41]<br />

Figure 4.21 – Elasticité observée <strong>sur</strong> Hbase passant <strong>de</strong> 6 à 12 nœuds[41]<br />

Dans ces tests, il y a 80% <strong>de</strong> <strong>le</strong>cture, ce qui fait que MongoDB ne doit donc pas pré-allouer<br />

souvent <strong><strong>de</strong>s</strong> nouveaux espaces. Sa mise en disque périodique suffit. MongoDB reste donc plus<br />

stab<strong>le</strong> que <strong>le</strong>s <strong>de</strong>ux autres systèmes (voir figure 4.22).<br />

Tail<strong>le</strong> du cluster<br />

Ces tests mettent en évi<strong>de</strong>nce que la tail<strong>le</strong> du cluster a une forte influence <strong>sur</strong> son élasticité.<br />

Premièrement, on se rend compte que plus <strong>le</strong> cluster est grand, moins l’impact du phénomène<br />

69


Figure 4.22 – Elasticité observée <strong>sur</strong> MongoDB passant <strong>de</strong> 6 à 12 nœuds[41]<br />

Figure 4.23 – Elasticité observée <strong>sur</strong> Hbase passant <strong>de</strong> 12 à 24 nœuds[41]<br />

<strong>de</strong> compactage est significatif comparé aux perturbations dues à la modification (comme <strong>le</strong><br />

montrent <strong>le</strong>s figures 4.19 et 4.23).<br />

Néanmoins, avec un système centralisé comme MongoDB, la tail<strong>le</strong> du cluster peut influer<br />

<strong>sur</strong> son temps <strong>de</strong> stabilisation. La figure 4.24 montre une augmentation <strong>de</strong> 92% du temps<br />

<strong>de</strong> nécessaire à stabilisation d’un cluster MongoDB passant <strong>de</strong> 12 à 24 nœuds par rapport<br />

au temps requis par un cluster passant <strong>de</strong> 6 à 12 nœuds). Ceci est du à <strong>de</strong>ux facteurs : <strong>le</strong><br />

premier est que <strong>le</strong>s nouvel<strong>le</strong>s instances traitent <strong>le</strong>s requêtes <strong><strong>de</strong>s</strong> clients immédiatement après la<br />

réception du premier morceau (or la tail<strong>le</strong> <strong>de</strong> ces morceaux est seu<strong>le</strong>ment <strong>de</strong> 200MB). Les nou-<br />

70


Figure 4.24 – Elasticité observée <strong>sur</strong> MongoDB passant <strong>de</strong> 12 à 24 nœuds[41]<br />

vel<strong>le</strong>s instances sont donc responsab<strong>le</strong>s <strong>de</strong> gérer <strong>le</strong>s requêtes clientes alors même qu’el<strong>le</strong>s sont<br />

<strong>sur</strong>chargées <strong>de</strong> trafic intérieur. Ce qui entraine une perte en performance (<strong>le</strong> trafic intérieur<br />

nécessitant <strong>de</strong> nouvel<strong>le</strong> pré-allocation d’espace). Le second facteur est que la redistribution<br />

<strong><strong>de</strong>s</strong> <strong>données</strong> est gérée par un seul processus qui doit donc gérer <strong>le</strong>s morceaux <strong>de</strong> chaque nœud<br />

et <strong>de</strong>vient donc vite un goulot d’étrang<strong>le</strong>ment.<br />

La gestion <strong><strong>de</strong>s</strong> nouvel<strong>le</strong>s instances<br />

Les résultats <strong>de</strong> ces expériences nous montrent aussi l’influence certaine <strong>de</strong> la gestion<br />

d’ajout d’instances du système <strong>sur</strong> son élasticité (la tab<strong>le</strong> 4.12 résume <strong>le</strong>s différents paramètres<br />

<strong>de</strong> ces expériences).<br />

Modification Système Montée à l’échel<strong>le</strong> Temps <strong>de</strong> stabilisation (min)<br />

6 à 12 nœuds Cassandra −0.06 141<br />

Hbase 0.05 12, 3<br />

MongoDB 0.78 183<br />

12 à 24 nœuds Cassandra −0.28 201<br />

Hbase 1, 68 17, 2<br />

MonogDB inconnu 352<br />

Tab<strong>le</strong> 4.12 – Influence <strong>de</strong> la politique d’ajout d’instance <strong>sur</strong> l’élasticité [41]<br />

Hbase tire profit <strong>de</strong> la non-redistribution <strong><strong>de</strong>s</strong> <strong>données</strong> à la couche HDFS pour diminuer<br />

ton temps <strong>de</strong> stabilisation. Mais il y a un prix en performance. On voit que Cassandra tire<br />

plus profit <strong><strong>de</strong>s</strong> nouvel<strong>le</strong>s instances (ses paramètres <strong>de</strong> montée à l’échel<strong>le</strong> sont meil<strong>le</strong>urs). Les<br />

figures 4.25 et 4.23 nous montrent ces différences.<br />

La politique <strong>de</strong> MongoDB (utiliser directement <strong>le</strong>s ressources) est la source <strong>de</strong> son mauvais<br />

comportement élastique. Celui-ci résulte du fait que <strong>le</strong>s nouveaux nœuds <strong>sur</strong>chargés <strong>de</strong> trafic<br />

71


Figure 4.25 – Elasticité observée <strong>sur</strong> Cassandra passant <strong>de</strong> 12 à 24 nœuds[41]<br />

interne sont utilisés pour <strong>le</strong>s requêtes clientes 11 . Cet effet collatéral se révè<strong>le</strong> important :<br />

MongoDB présente <strong><strong>de</strong>s</strong> résultats nettement inférieurs et à Cassandra et à HBase.<br />

4.6 Conclusion - Comparaison<br />

Dans cette section, nous tentons une critique comparative <strong><strong>de</strong>s</strong> <strong>de</strong>ux expérience présentées<br />

précé<strong>de</strong>mment. Le but <strong>de</strong> cette section est <strong>de</strong> pouvoir i<strong>de</strong>ntifier <strong>le</strong>s différences entre ces <strong>de</strong>ux<br />

approches, i<strong>de</strong>ntifier <strong>le</strong>urs points forts et faib<strong>le</strong>s pour proposer une nouvel<strong>le</strong> solution <strong>de</strong> test<br />

mettant en avant <strong>le</strong>s avantages <strong><strong>de</strong>s</strong> <strong>de</strong>ux propositions.<br />

L’approche <strong>de</strong> T. Dory tente <strong>de</strong> fournir un facteur <strong>de</strong> comparaison <strong>de</strong> l’élasticité <strong>de</strong> différentes<br />

BDs pour <strong>cloud</strong>. Il l’a donc voulu indépendant <strong>de</strong> <strong>le</strong>urs performances (qui était <strong>le</strong>s<br />

différencie à l’origine). Notre approche est plus analytique : son but est d’appréhen<strong>de</strong>r, <strong>de</strong><br />

comprendre <strong>le</strong> principe d’élasticité du SGBD. A ce titre, el<strong>le</strong> ne nécessite pas <strong>de</strong> critères<br />

rigoureux pour définir ces paramètres. En effet, c’est <strong>le</strong>ur interprétation au regard <strong>de</strong> l’expérience<br />

qui est importante. Le scénario <strong>de</strong> test est, lui, défini <strong>de</strong> manière rigoureuse, ce qui <strong>le</strong><br />

rend reproductib<strong>le</strong> et automatique.<br />

La principa<strong>le</strong> différence entre notre étu<strong>de</strong> et cel<strong>le</strong> <strong>de</strong> T. Dory est donc <strong>le</strong>ur approche :<br />

lorsque la première étudie <strong>le</strong> système en transition, la secon<strong>de</strong> décrit <strong>le</strong> système en régime.<br />

Les <strong>de</strong>ux approches avancent <strong><strong>de</strong>s</strong> points <strong>de</strong> vue très intéressants :<br />

– l’approche en transition a pensé l’élasticité comme une propriété dynamique et donc<br />

a voulu la réduire dans <strong>le</strong> temps. L’idée sous-jacente était que, placé dans un environnement<br />

<strong>de</strong> production, <strong>le</strong>s répercussions immédiates <strong>de</strong> la modification du système ne<br />

sont pas négligeab<strong>le</strong>s et doivent être prises en compte.<br />

11. Ce problème a déjà été discuté aux sections 4.5.4 et 4.5.4<br />

72


– L’approche en régime prend en compte que <strong>le</strong>s temps <strong>de</strong> réponse <strong>de</strong> ces systèmes peuvent<br />

varier fortement d’un instant à l’autre (par exemp<strong>le</strong> du au phénomène <strong>de</strong> compactage).<br />

Dans un environnement <strong>de</strong> production, il est donc important <strong>de</strong> savoir comment <strong>le</strong><br />

système se comportera <strong>de</strong> manière généra<strong>le</strong> (à long terme) et il est aussi important <strong>de</strong><br />

savoir <strong>le</strong> temps nécessaire à ces systèmes pour se stabiliser.<br />

4.6.1 Critiques <strong>de</strong> l’approche comparative<br />

L’idée d’une étu<strong>de</strong> comparative est <strong>de</strong> fournir un unique point <strong>de</strong> comparaison pour tous<br />

<strong>le</strong>s différents systèmes. Ceci va en opposition avec l’étu<strong>de</strong> analytique qui va tenter <strong>de</strong> dégager<br />

un nombre plus important <strong>de</strong> paramètres pour avoir une meil<strong>le</strong>ure vue <strong>de</strong> son comportement.<br />

Néanmoins, l’étu<strong>de</strong> <strong>de</strong> T. Dory nous fournit une liste <strong>de</strong> paramètres qui peuvent aussi être<br />

intéressants (moyennant quelques modifications) pour étendre notre étu<strong>de</strong> analytique : l’élasticité,<br />

la montée à l’échel<strong>le</strong> et <strong>le</strong> temps <strong>de</strong> stabilisation. Ce <strong>de</strong>rnier est <strong>le</strong> temps nécessaire au<br />

système pour passer d’un état initial stab<strong>le</strong> à un état final stab<strong>le</strong>.<br />

On remarque directement l’analogie avec nos trois paramètres : la perturbation, <strong>le</strong> coefficient<br />

et <strong>le</strong> temps d’adaptation. Avant d’ i<strong>de</strong>ntifier <strong>le</strong>urs différences, notons que <strong>de</strong> manière<br />

globa<strong>le</strong>, la tendance sera à par<strong>le</strong>r <strong>de</strong> stabilisation pour <strong>le</strong> scénario en régime et d’adaptation<br />

pour <strong>le</strong> scénario <strong>de</strong> transition.<br />

Le temps <strong>de</strong> stabilisation<br />

Tel que défini dans [41], ce facteur est directement analysab<strong>le</strong>. Il ne faut donc lui apporter<br />

aucune modification. Néanmoins, nous soulignons <strong>le</strong> fait que la définition d’un système stab<strong>le</strong><br />

proposée dans [41] ne semb<strong>le</strong> pas être suffisante pour assumer <strong><strong>de</strong>s</strong> tests sans intervention<br />

humaine. En effet, <strong>le</strong>s SGBDs qui ne sont pas encore stab<strong>le</strong>s fournissent déjà <strong><strong>de</strong>s</strong> temps <strong>de</strong><br />

réponses similaires (comme <strong>le</strong> montrent nos expériences). La méthodologie proposée par T.<br />

Dory nécessite l’intervention d’un acteur humain pour déterminer si <strong>le</strong> système est stab<strong>le</strong> et<br />

si on peut lancer une nouvel<strong>le</strong> charge.<br />

Le passage à l’échel<strong>le</strong><br />

Tel que défini dans [41], <strong>le</strong> passage à l’échel<strong>le</strong> diffère <strong>de</strong> notre coefficient d’adaptation dans<br />

3 aspects différents :<br />

1. <strong>le</strong> fait qu’il est lié à <strong><strong>de</strong>s</strong> systèmes stab<strong>le</strong>s.<br />

2. <strong>le</strong> fait qu’il ne considère pas <strong>le</strong> coût <strong>de</strong> la modification en terme <strong>de</strong> structure (∆n défini<br />

en section 4.2).<br />

3. <strong>le</strong> fait que <strong>le</strong>s moyennes sont cel<strong>le</strong>s <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence <strong>de</strong> systèmes dont la charge <strong>de</strong><br />

travail et <strong>le</strong> volume <strong>de</strong> <strong>données</strong> sont proportionnels à la tail<strong>le</strong> du cluster.<br />

La première différence est voulue ; el<strong>le</strong> provient <strong>de</strong> la différence entre adaptation et stabilisation.A<br />

nos yeux, <strong>le</strong> coût en terme <strong>de</strong> ressources doit être considéré, nous proposons donc <strong>de</strong><br />

<strong>le</strong> rajouter à un nouveau facteur : <strong>le</strong> coefficient <strong>de</strong> stabilisation. La troisième différence provient<br />

du fait que <strong>le</strong> passage à l’échel<strong>le</strong>, tel que défini dans [41], n’est pas pensé dans l’optique<br />

d’être un facteur décrivant l’élasticité. Dans une optique en transition, il s’agira <strong>de</strong> ne plus<br />

varier la charge <strong>de</strong> travail et <strong>le</strong> volume <strong>de</strong> <strong>données</strong>.<br />

73


L’élasticité<br />

Tel que défini dans [41], ce facteur prend en considération <strong>le</strong> temps <strong>de</strong> stabilisation, il sera<br />

d’autant plus grand que ce temps <strong>de</strong> stabilisation sera long. Or, dans une nouvel<strong>le</strong> approche<br />

comparative, où l’on prendrait en compte <strong>le</strong>s <strong>de</strong>ux facteurs précé<strong>de</strong>nts (temps et coefficient<br />

<strong>de</strong> stabilisation) pour caractériser l’élasticité, ce facteur peut être repensé vers un nouvel<strong>le</strong><br />

définition décrivant <strong>le</strong>s perturbations du système jusqu’à sa stabilisation : <strong>le</strong>s perturbations<br />

<strong>de</strong> stabilisation.<br />

4.6.2 Vers une nouvel<strong>le</strong> approche<br />

Nous proposons dans cette section une nouvel<strong>le</strong> approche analytique combinant <strong>le</strong>s approches<br />

en transition et en régime.<br />

Etu<strong>de</strong> <strong>de</strong> la stabilisation<br />

La première étape <strong>de</strong> cette nouvel<strong>le</strong> méthodologie consiste à étudier l’élasticité du système<br />

passant d’un état stab<strong>le</strong> à un autre état stab<strong>le</strong> via <strong>le</strong> scénario <strong>de</strong> T. Dory (temps <strong>de</strong><br />

traitement moyens <strong>sur</strong> <strong><strong>de</strong>s</strong> jeux d’ensemb<strong>le</strong>s <strong>de</strong> requêtes et charge constante). De ce scénario,<br />

nous pourrons me<strong>sur</strong>er <strong>le</strong>s 3 paramètres suivants : <strong>le</strong> temps, <strong>le</strong> coefficient et la perturbation<br />

<strong>de</strong> stabilisation.<br />

Définition 20 (Temps <strong>de</strong> stabilisation ∆T ).<br />

Le temps <strong>de</strong> stabilisation est <strong>le</strong> temps nécessaire à un système stab<strong>le</strong> pour se stabiliser<br />

après à une modification <strong>de</strong> son nombre d’instances.<br />

Soit ni et nf <strong>le</strong>s nombres initial et final d’instances, Li et Lf <strong>le</strong>s temps <strong>de</strong> traitement<br />

moyens du système <strong>de</strong> tail<strong>le</strong> i et f, nous pouvons définir <strong>le</strong> coefficient <strong>de</strong> stabilisation comme :<br />

Définition 21 (Coefficient <strong>de</strong> stabilisation Θ).<br />

Θ =<br />

L f −L i<br />

L i<br />

∆n<br />

Soit N et M, <strong>le</strong>s <strong>sur</strong>faces décrites à la figure 4.26, la perturbation <strong>de</strong> stabilisation se définit<br />

comme :<br />

Définition 22 (Perturbation <strong>de</strong> stabilisation Π).<br />

Π = N<br />

M<br />

Cette première étape <strong>de</strong> l’expérience permettra <strong>de</strong> faire ressortir <strong>le</strong>s caractéristiques <strong>de</strong><br />

la modification du système en régime. L’utilisateur en retirera l’information <strong>sur</strong> <strong>le</strong> gain, <strong>sur</strong><br />

<strong>le</strong> temps nécessaire pour atteindre ce gain et <strong>sur</strong> l’importance <strong><strong>de</strong>s</strong> perturbations durant ce<br />

temps <strong>de</strong> stabilisation.<br />

74


Figure 4.26 – Perturbation <strong>de</strong> la pério<strong>de</strong> <strong>de</strong> stabilisation - Surfaces N & M<br />

Etu<strong>de</strong> <strong>de</strong> l’adaptation<br />

Les paramètres proposés dans notre première approche sont parlants : <strong>le</strong> temps d’adaptation<br />

nous prévient durée pendant laquel<strong>le</strong> <strong>le</strong> système va être tota<strong>le</strong>ment perturbé par la<br />

modification. L’impact maximal nous prévient du pic <strong>de</strong> pertes en performance durant cette<br />

adaptation et <strong>le</strong>s coefficients α1 et α2 nous indiquent quel<strong>le</strong> sera la tendance <strong>de</strong> cette adaptation<br />

(<strong>le</strong>s performances diminueront-el<strong>le</strong>s vite pour croître ensuite <strong>le</strong>ntement ou mettront-el<strong>le</strong>s<br />

du temps à décroitre pour augmenter très vite). La perturbation d’adaptation nous indiquera<br />

si la perturbation sera importante en comparaison avec <strong>le</strong>s temps <strong>de</strong> latence moyens (et ce<br />

durant tout <strong>le</strong> temps d’adaptation).<br />

Soit τ la durée tota<strong>le</strong> <strong>de</strong> cette secon<strong>de</strong> étape <strong>de</strong> l’expérience, <strong>le</strong> coefficient d’adaptation<br />

donnera à l’utilisateur une idée du gain fait par la modification durant cette pério<strong>de</strong> τ. Sur un<br />

cluster <strong>de</strong> 5 nœuds, τ était fixé à 60 minutes <strong>sur</strong> base <strong>de</strong> tests préliminaires. La première étape<br />

<strong>de</strong> cette nouvel<strong>le</strong> méthodologie servira à établir τ pour chaque cluster différent. τ pourra par<br />

exemp<strong>le</strong> être défini comme 150% <strong>de</strong> ∆T et dès lors fixer <strong>le</strong> début <strong>de</strong> la modification tm à 33%<br />

<strong>de</strong> τ.<br />

Cette <strong>de</strong>uxième étape permettra d’étudier <strong>le</strong> comportement <strong>de</strong> la modification du système<br />

en transition(<strong>de</strong> manière similaire à notre première approche).<br />

75


Chapitre 5<br />

Influence <strong><strong>de</strong>s</strong> choix techniques <strong>sur</strong><br />

l’élasticité<br />

Dans ce chapitre, nous tentons <strong>de</strong> cerner l’influence <strong><strong>de</strong>s</strong> différents composants, choix techniques<br />

empruntés par <strong>le</strong>s SGBDs <strong>sur</strong> <strong>le</strong>ur élasticité. Ceci permettra <strong>de</strong> mettre en avant <strong>le</strong>s<br />

concessions qu’il faut faire par rapport à l’élasticité lorsqu’on choisit son SGBD. Commençons<br />

ces considérations avec <strong>le</strong>s dimensions décrites dans l’étu<strong>de</strong> comparative du chapitre 3.<br />

5.1 Modè<strong>le</strong> <strong>de</strong> <strong>données</strong><br />

Les différents modè<strong>le</strong>s <strong>de</strong> <strong>données</strong> peuvent être classés en fonction <strong>de</strong> <strong>le</strong>ur comp<strong>le</strong>xité :<br />

la figure 5.1 <strong>le</strong>s ordonne par comp<strong>le</strong>xité croissante. Cette comp<strong>le</strong>xité représente à la fois <strong>le</strong>s<br />

mécanismes internes nécessaires à stocker un tel modè<strong>le</strong> mais aussi la comp<strong>le</strong>xité du point<br />

vue utilisateur pour modéliser l’architecture <strong><strong>de</strong>s</strong> <strong>données</strong>. On remarquera que plus un modè<strong>le</strong><br />

est comp<strong>le</strong>xe, plus son utilisation ultérieure sera faci<strong>le</strong>.<br />

clé-va<strong>le</strong>ur<br />

document<br />

entrées extensib<strong>le</strong>s<br />

Vol<strong>de</strong>mort MongoDB Cassandra<br />

Hbase<br />

SQL<br />

Comp<strong>le</strong>xité du modè<strong>le</strong> <strong>de</strong> <strong>données</strong><br />

MySQL Cluster<br />

VoltDB<br />

Figure 5.1 – Comp<strong>le</strong>xité <strong><strong>de</strong>s</strong> modè<strong>le</strong>s <strong>de</strong> <strong>données</strong><br />

Les modè<strong>le</strong>s clé-va<strong>le</strong>ur, orientés documents et entrées extensib<strong>le</strong>s ont été pensés pour que<br />

<strong>le</strong>s <strong>données</strong> puissent être partitionnées (<strong>sur</strong> base <strong>de</strong> <strong>le</strong>ur clés) et distribuées <strong>de</strong> la manière la<br />

plus simp<strong>le</strong> possib<strong>le</strong>. Cette facilité diminuera théoriquement <strong>le</strong> temps d’adaptation. Remarquons<br />

aussi que <strong>le</strong>s entrées sont indépendantes entre-el<strong>le</strong>s. Chaque nœud est responsab<strong>le</strong> <strong>de</strong><br />

76


ses <strong>données</strong> et n’a pas à se soucier <strong><strong>de</strong>s</strong> autres instances. On peut dès lors exploiter p<strong>le</strong>inement<br />

<strong>le</strong>s performances <strong>de</strong> chaque nœud individuel<strong>le</strong>ment, <strong>le</strong> coefficient d’adaptation est donc<br />

meil<strong>le</strong>ur pour un modè<strong>le</strong> plus simp<strong>le</strong>.<br />

Les modè<strong>le</strong>s SQL eux restent plus durs à partitionner et <strong>le</strong>ur distribution est moins efficiente<br />

: sa richesse (in<strong>de</strong>x secondaires, clés voisines) entraine <strong>de</strong> lourds mécanismes internes<br />

pour gérer <strong>le</strong>s <strong>données</strong>. Ces mécanismes entrainent donc un temps d’adaptation plus long.<br />

Cette modélisation est aussi un frein au passage à l’échel<strong>le</strong> : premièrement, <strong>le</strong>s différentes<br />

<strong>données</strong> sont liées (par exemp<strong>le</strong> via <strong><strong>de</strong>s</strong> clés voisines) ce qui empêche une redistribution efficace<br />

<strong><strong>de</strong>s</strong> requêtes ; secon<strong>de</strong>ment, chaque entrée d’une tab<strong>le</strong> a une tail<strong>le</strong> pré-définie et peut donc<br />

contenir <strong><strong>de</strong>s</strong> champs vi<strong><strong>de</strong>s</strong> qui <strong>de</strong>vront être stockés et traités. Toute la puissance <strong>de</strong> chaque<br />

instance ne peut donc être dédiée exclusivement au traitement <strong><strong>de</strong>s</strong> <strong>données</strong> (effectives) qu’el<strong>le</strong><br />

stocke.<br />

Des systèmes tels que <strong>le</strong>s SQL-MR et <strong>le</strong>s SQL orientés colonnes (Vertica, MonetDB)<br />

confirment cette concession à faire entre la comp<strong>le</strong>xité du modè<strong>le</strong> <strong>de</strong> <strong>données</strong> et <strong>le</strong> passage à<br />

l’échel<strong>le</strong> : toutes ses solutions se basent <strong>sur</strong> un modè<strong>le</strong> SQL épuré.<br />

5.2 Modè<strong>le</strong> <strong>de</strong> consistance<br />

5.2.1 Fina<strong>le</strong>ment ou fortement consistant<br />

Dans un système décentralisé, comme Cassandra, <strong>le</strong> modè<strong>le</strong> fina<strong>le</strong>ment consistant favorise<br />

nettement <strong>le</strong> temps d’adaptation pour tout type d’application (forte en <strong>le</strong>ctures ou écritures).<br />

Dans ce modè<strong>le</strong>, la donnée sera fina<strong>le</strong>ment consistante (c’est-à-dire que fina<strong>le</strong>ment après plusieurs<br />

opérations <strong>de</strong> <strong>le</strong>cture, la donnée sera à jour). Les temps <strong>de</strong> réponses du système vus par<br />

l’application seront en fait <strong>le</strong>s temps <strong>de</strong> ses instances <strong>le</strong>s plus performantes. Les nœuds qui<br />

subissent <strong>le</strong>s modifications et qui connaissent donc un fort trafic seront moins performants et<br />

pourront peut-être éviter <strong>le</strong>s requêtes <strong>de</strong> l’application cliente. Ils pourront dès lors se stabiliser<br />

et agir norma<strong>le</strong>ment plus vite.<br />

Le coefficient d’adaptation est avantagé par une tel<strong>le</strong> politique : qui dit ajouter <strong><strong>de</strong>s</strong> nœuds,<br />

dit soulager certains membres d’une partie <strong>de</strong> <strong>le</strong>ur charge. Ces instances moins chargées<br />

auront donc <strong><strong>de</strong>s</strong> temps <strong>de</strong> performances meil<strong>le</strong>urs. Cette nouvel<strong>le</strong> répartition <strong><strong>de</strong>s</strong> <strong>données</strong><br />

peut entrainer la libération <strong>de</strong> nœuds plus performants que ceux que l’application contactait<br />

précé<strong>de</strong>mment. Dans un modè<strong>le</strong> fina<strong>le</strong>ment consistant, ceci aura donc un effet positif <strong>sur</strong> <strong>le</strong>s<br />

temps moyens <strong>de</strong> réponse du système et entrainera donc un coefficient d’adaptation meil<strong>le</strong>ur<br />

que pour une consistance forte.<br />

Dans un système, comme MongoDB, la consistance pourrait être relâchée grâce à une<br />

redirection <strong><strong>de</strong>s</strong> <strong>le</strong>ctures <strong>sur</strong> <strong>le</strong>s nœuds esclaves. Ceci n’aurait pas d’effet <strong>sur</strong> <strong>le</strong> temps d’adaptation<br />

vu que ça n’a pas d’effet <strong>sur</strong> l’architecture même du cluster. Par contre, ceci aura très<br />

certainement un effet positif <strong>sur</strong> <strong>le</strong> coefficient d’adaptation vu que <strong>le</strong> système tirera avantage<br />

<strong>de</strong> toutes <strong>le</strong>s nouvel<strong>le</strong>s instances tandis que dans une consistance forte <strong>le</strong> système ne tirera<br />

profit que <strong>de</strong> 1/R% <strong><strong>de</strong>s</strong> nouvel<strong>le</strong>s instances (où R est <strong>le</strong> facteur <strong>de</strong> réplication).<br />

5.2.2 Le verrouillage d’entrée et la consistance transactionnel<strong>le</strong><br />

Ces <strong>de</strong>ux modè<strong>le</strong>s sont bien plus stricts que <strong>le</strong>s premiers, ils permettent <strong>de</strong> bloquer une ou<br />

plusieurs entrées durant la modification <strong>de</strong> cel<strong>le</strong>s-ci. Bloquer une entrée ou une série d’entrées<br />

77


(pour <strong>le</strong>s déplacer ou pour <strong>le</strong>s modifier) la rend inaccessib<strong>le</strong> et donc rend <strong>le</strong> temps d’adaptation<br />

plus long. Du point <strong>de</strong> vue du coefficient d’adaptation, <strong>le</strong> modè<strong>le</strong> <strong>de</strong> verrouillage d’entrée<br />

n’est pas problématique, il atteint <strong>de</strong> la même façon <strong>le</strong>s performances avant et après la modification.<br />

Par contre, la consistance transactionnel<strong>le</strong> qui bloquera un ensemb<strong>le</strong> d’entrées dans<br />

potentiel<strong>le</strong>ment plusieurs nœuds est une perte <strong>de</strong> performance. Plus <strong>le</strong> cluster est grand, plus<br />

<strong>le</strong>s risques <strong>de</strong> transactions agissant <strong>sur</strong> plusieurs nœuds sont importants et donc on peut dire<br />

que la consistance transactionnel<strong>le</strong> est un point négatif vis-à-vis du coefficient d’adaptation.<br />

5.3 Réplication <strong>de</strong> <strong>données</strong><br />

Dans cette section, nous traitons l’influence du mo<strong>de</strong> <strong>de</strong> réplication <strong>sur</strong> l’élasticité du<br />

système. Nous tenons à souligner <strong>le</strong> fait que nous étudions l’influence du mo<strong>de</strong> <strong>de</strong> réplication<br />

<strong>sur</strong> l’élasticité du <strong>cloud</strong> et pas <strong>sur</strong> <strong>le</strong>s performances du système. Nous faisons l’hypothèse<br />

que la modification n’influence pas <strong>le</strong> mo<strong>de</strong> <strong>de</strong> réplication (pas <strong>de</strong> changement <strong>de</strong> facteur <strong>de</strong><br />

réplication par exemp<strong>le</strong>).<br />

La réplication synchrone est bloquante : pour vali<strong>de</strong>r la modification d’une entrée, <strong>le</strong> système<br />

<strong>de</strong>vra s’as<strong>sur</strong>er que toutes <strong>le</strong>s répliques aient bien effectué la modification. Si cette modification<br />

fait intervenir un nœud en cours <strong>de</strong> modification, cel<strong>le</strong>-ci <strong>le</strong> ra<strong>le</strong>ntira. La réplication<br />

synchrone a donc un effet négatif <strong>sur</strong> <strong>le</strong> temps d’adaptation.<br />

Si l’influence <strong>de</strong> la réplication synchrone est certaine <strong>sur</strong> <strong>le</strong>s performances du système (positive<br />

pour <strong>le</strong>s <strong>le</strong>ctures, négative pour <strong>le</strong>s <strong>le</strong>ctures), son influence <strong>sur</strong> <strong>le</strong> coefficient d’adaptation<br />

est plus diffici<strong>le</strong> à décrire. Il ne semb<strong>le</strong> pas y en avoir.<br />

5.4 Modè<strong>le</strong> <strong>de</strong> requêtes<br />

Le modè<strong>le</strong> <strong>de</strong> requêtes est un argument <strong>de</strong> vente très important, plus riche il sera, plus<br />

intéressant il sera, plus l’utilisateur pourra profiter largement <strong>de</strong> sa richesse. Néanmoins, <strong>de</strong><br />

riches modè<strong>le</strong>s <strong>de</strong> requêtes se basent <strong>sur</strong> <strong>de</strong> riches modè<strong>le</strong>s <strong>de</strong> <strong>données</strong> qui entrainent avec<br />

eux <strong>le</strong>s problèmes décrits plus haut (section 5.1). De plus, <strong>le</strong>s modè<strong>le</strong>s riches ont tendance<br />

à proposer <strong><strong>de</strong>s</strong> requêtes similaires à GROUP BY <strong>de</strong> SQL. Ces requêtes d’agrégation sont<br />

extrêmement comp<strong>le</strong>xes et ne peuvent être optima<strong>le</strong>s pour tout cas d’utilisation. Si el<strong>le</strong>s<br />

joignent plusieurs nœuds du cluster, <strong>le</strong> risque <strong>de</strong> contacter <strong><strong>de</strong>s</strong> nœuds en cours <strong>de</strong> modification<br />

est plus grand. Ceci entraine un temps d’adaptation plus grand.<br />

D’autre part, plus <strong>le</strong> modè<strong>le</strong> <strong>de</strong> requête est poussé, plus <strong>le</strong>s mécanismes internes <strong>de</strong>vront<br />

l’être aussi (in<strong>de</strong>x secondaires, etc.). Il sera dès lors plus dur <strong>de</strong> tirer parti <strong>de</strong> la p<strong>le</strong>ine puissance<br />

<strong>de</strong> chaque composant du cluster indépendamment. De manière similaire aux critiques faites<br />

aux langages <strong>de</strong> haut niveau, on peut critiquer ces fonctions en <strong>le</strong>ur prétextant qu’el<strong>le</strong>s doivent<br />

être généra<strong>le</strong>s et <strong><strong>de</strong>s</strong> fonctions plus spécifiques, faites au cas par cas seraient capab<strong>le</strong>s <strong>de</strong> tirer<br />

avantage <strong><strong>de</strong>s</strong> différents composants. De tel<strong>le</strong>s fonctions peuvent être source <strong>de</strong> perte en profit<br />

vu que l’utilisateur <strong>le</strong>s utilisera <strong>de</strong> manière transparente et risquera d’appe<strong>le</strong>r <strong><strong>de</strong>s</strong> requêtes<br />

utilisant <strong>de</strong> nombreuses instances (<strong>le</strong> coefficient d’adaptation sera donc moins bon).<br />

La réponse à la considération précé<strong>de</strong>nte est la possibilité <strong>de</strong> déployer <strong><strong>de</strong>s</strong> fonctions MR<br />

<strong>sur</strong> <strong>le</strong> système. Cette possibilité est donc un facteur positif <strong>sur</strong> <strong>le</strong> coefficient d’adaptation. Par<br />

contre, l’effet peut être négatif <strong>sur</strong> <strong>le</strong> temps d’adaptation ; l’utilisateur utilisant ces fonctions<br />

en tirera profit pour utiliser un maximum <strong>de</strong> nœuds, ce qui augmente <strong>le</strong> risque <strong>de</strong> joindre une<br />

instance subissant une modification.<br />

78


Quelques autres dimensions doivent être prises en compte lorsqu’on par<strong>le</strong> d’élasticité.<br />

5.5 Ajout d’instances<br />

La façon dont <strong>le</strong> SGBD va gérer l’ajout <strong><strong>de</strong>s</strong> nœuds dans <strong>le</strong> cluster va être un facteur très<br />

important dans son élasticité. Parmi <strong>le</strong>s différents scénarios possib<strong>le</strong>s, nous distinguons quatre<br />

modè<strong>le</strong>s différents :<br />

– Le premier (celui <strong>de</strong>MongoDB consiste à directement assimi<strong>le</strong>r la nouvel<strong>le</strong> instance et<br />

d’en faire usage “immédiatement”. Nous <strong>le</strong> qualifierons d’actif.<br />

– Le <strong>de</strong>uxième (celui <strong>de</strong> Hadoop), consiste à ne rien faire à l’ajout d’instances ; c’est-à-dire<br />

considérer l’instance comme faisant partie du cluster et continuer à agir comme avant.<br />

Nous qualifierons ce modè<strong>le</strong> <strong>de</strong> passif.<br />

– Le troisième, emprunté par Cassandra, tire directement profit <strong>de</strong> la nouvel<strong>le</strong> instance<br />

mais attend que cel<strong>le</strong>-ci contienne toutes <strong>le</strong>s <strong>données</strong> qui lui sont assignées. Nous <strong>le</strong><br />

qualifierons d’pesudo-actif.<br />

– Le <strong>de</strong>rnier est celui <strong>de</strong> Hbase/Hadoop. Il est un mixte entre <strong>le</strong>s <strong>de</strong>ux premières solutions.<br />

Nous <strong>le</strong> qualifierons <strong>de</strong> pseudo-actif.<br />

Nous ne disposons pas d’étu<strong><strong>de</strong>s</strong> <strong>sur</strong> <strong><strong>de</strong>s</strong> systèmes passifs mais pouvons aisément faire<br />

une étu<strong>de</strong> théorique. Le temps d’adaptation ou <strong>de</strong> stabilisation sera <strong>le</strong> plus réduit possib<strong>le</strong> (il<br />

suffira au cluster <strong>de</strong> prendre connaissance <strong>de</strong> la modification mais aucun trafic supplémentaire<br />

ne perturbera <strong>le</strong> système). La montée à l’échel<strong>le</strong> el<strong>le</strong> ne sera pas significative (exception faite<br />

d’une application où <strong>le</strong>s écritures sont en gran<strong>de</strong> majorité).<br />

Comme expliqué à la section 4.5.4, plus <strong>le</strong> système va être passif (comme HBase), plus son<br />

temps <strong>de</strong> stabilisation va être court (ce constat peut être extrapolé au temps d’adaptation).<br />

A l’inverse, plus il va être passif, plus son coefficient <strong>de</strong> stabilisation être faib<strong>le</strong> (ce constat<br />

peut être extrapolé au coefficient d’adaptation). On remarque que Cassandra a <strong><strong>de</strong>s</strong> scores<br />

meil<strong>le</strong>urs que Hbase.<br />

5.6 Architecture<br />

Nous avons vu au chapitre 3 <strong>de</strong>ux types d’architecture : la première, centralisée, est un<br />

mo<strong>de</strong> primaire-secondaire (MongoDB, Hbase), la secon<strong>de</strong>, décentralisée, est un anneau <strong>de</strong><br />

pairs (Cassandra).<br />

L’architecture <strong>de</strong> pairs est tota<strong>le</strong>ment décentralisée ; chaque nœud a <strong>le</strong> même rô<strong>le</strong>. Dans <strong>le</strong><br />

cas <strong>de</strong> Cassandra, ceci permet <strong>de</strong> diminuer nettement <strong>le</strong>s temps d’adaptation et <strong>de</strong> stabilisation<br />

vu que l’ajout ou <strong>le</strong> retrait d’un nœud n’inquiète qu’un seul autre nœud. De plus, <strong>le</strong> fait que<br />

<strong>le</strong>s nœuds soient <strong><strong>de</strong>s</strong> pairs permet d’éviter <strong>le</strong> rô<strong>le</strong> central d’une seu<strong>le</strong> instance qui pourrait<br />

dès lors <strong>de</strong>venir un goulot d’étrang<strong>le</strong>ment et donc augmenter <strong>le</strong>s temps <strong>de</strong> stabilisation et<br />

d’adaptation. Ce effet d’étrang<strong>le</strong>ment a été expérimenté avec <strong>le</strong> passage à l’échel<strong>le</strong> dynamique<br />

<strong>de</strong> MongoDB dans <strong>le</strong>s expériences <strong>de</strong> T. Dory.<br />

L’effet <strong>sur</strong> <strong>le</strong> coefficient d’adaptation n’est pas évi<strong>de</strong>nt à décrire en ne se basant que <strong>sur</strong><br />

la distinction centralisé-décentralisé. Le fait qu’un système soit décentralisé peut permettre<br />

un meil<strong>le</strong>ur coefficient d’adaptation : <strong>sur</strong> <strong><strong>de</strong>s</strong> clusters <strong>de</strong> gran<strong><strong>de</strong>s</strong> tail<strong>le</strong>s, <strong>le</strong>s nœuds primaires<br />

pourraient être aussi un goulot d’étrang<strong>le</strong>ment pour l’application en terme <strong>de</strong> performance.<br />

Augmenter <strong>le</strong>s nœuds secondaires ne peut être positif que si <strong>le</strong> primaire est capab<strong>le</strong> <strong>de</strong> gérer<br />

l’entièreté du nouveau cluster.<br />

79


Remarquons que <strong>le</strong> fait <strong>de</strong> la distinction maître-esclave entraine que chaque nœud n’a pas<br />

<strong>le</strong> même rô<strong>le</strong>. Il y a donc <strong><strong>de</strong>s</strong> nœuds dont <strong>le</strong> service n’est pas immédiatement <strong>de</strong> stocker <strong><strong>de</strong>s</strong><br />

<strong>données</strong>. Ceux-ci comptent dans <strong>le</strong> nombre <strong>de</strong> serveurs initial et peuvent diminuer l’apport en<br />

ressource ∆n, ce qui aura pour effet d’augmenter faussement <strong>le</strong> coefficient d’adaptation (∆n<br />

plus petit). On remarque que pour <strong><strong>de</strong>s</strong> clusters <strong>de</strong> gran<strong>de</strong> tail<strong>le</strong>, ce dommage est négligeab<strong>le</strong>.<br />

5.7 Tab<strong>le</strong>au récapitulatif<br />

Le tab<strong>le</strong>au 5.1 résume la manière dont ces différentes dimensions agissent <strong>sur</strong> <strong>le</strong> temps et<br />

<strong>le</strong> coefficient d’adaptation.<br />

80


- Temps d’adaptation + - Coefficient d’adaptation +<br />

Modè<strong>le</strong> <strong>de</strong> <strong>données</strong> Simp<strong>le</strong> -> Comp<strong>le</strong>xe Comp<strong>le</strong>xe -> Simp<strong>le</strong><br />

Modè<strong>le</strong> <strong>de</strong> consistance Faib<strong>le</strong> -> Forte Forte -> Faib<strong>le</strong><br />

Mo<strong>de</strong> <strong>de</strong> réplication Asynchrone Synchrone Non déterminé<br />

Modè<strong>le</strong> <strong>de</strong> requête Pauvre -> Riche Riche -> Pauvre<br />

MapReduce Non Oui Non Oui<br />

Ajout d’instance Passif -> Actif Actif -> Passif<br />

Architecture Décentralisée Centralisée Centralisée Décentralisée<br />

Tab<strong>le</strong> 5.1 – Tab<strong>le</strong>au récapitulatif <strong><strong>de</strong>s</strong> liens entre choix techniques et l’élasiticté<br />

81


Chapitre 6<br />

Conclusion<br />

Dans ce travail, nous avons défini la propriété d’élasticité <strong><strong>de</strong>s</strong> BDs <strong>sur</strong> <strong>cloud</strong>. Plus spécifiquement,<br />

nous l’avons définie et défini <strong><strong>de</strong>s</strong> scénarios <strong>de</strong> test et paramètres permettant <strong>de</strong> la<br />

caractériser et enfin nous avons décrit la manière dont <strong>le</strong>s spécificités techniques <strong>de</strong> certains<br />

SGBDs peuvent influencer cette propriété.<br />

Ce travail est divisé en 4 parties : dans la première partie, en partant du contexte actuel<br />

qui entoure <strong>le</strong> <strong>cloud</strong>, nous avons défini <strong>le</strong> <strong>cloud</strong> et ses propriétés essentiel<strong>le</strong>s. Dans la<br />

<strong>de</strong>uxième partie, nous avons proposé une étu<strong>de</strong> comparative <strong>de</strong> différents SGBDs adaptés<br />

au <strong>cloud</strong>. Dans la troisième partie, nous avons apporté une approche analytique dynamique<br />

pour décrire <strong>le</strong> comportement élastique d’un SGBD. Nous y avons aussi analysé une approche<br />

comparative (moins dynamique) tentant <strong>de</strong> fournir un paramètre unique pouvant servir <strong>de</strong><br />

point <strong>de</strong> comparaison <strong><strong>de</strong>s</strong> élasticités <strong>de</strong> différents systèmes. Nous avons ensuite comparé <strong>le</strong>s<br />

<strong>de</strong>ux approches pour tenter une nouvel<strong>le</strong> proposition d’approche combinant <strong>le</strong>s qualités <strong><strong>de</strong>s</strong><br />

<strong>de</strong>ux premières. Enfin, dans la quatrième partie, nous avons déterminé la manière dont <strong>le</strong>s<br />

choix techniques d’un SGBD peuvent influer <strong>sur</strong> son élasticité.<br />

Les nouveaux SGBDs développés dans <strong>le</strong> but <strong>de</strong> pouvoir passer à l’échel<strong>le</strong> <strong>le</strong> plus rapi<strong>de</strong>ment<br />

possib<strong>le</strong> sont très différents <strong>le</strong>s uns <strong><strong>de</strong>s</strong> autres et il est donc diffici<strong>le</strong> d’avoir une vue<br />

d’ensemb<strong>le</strong> <strong>sur</strong> <strong>le</strong>urs caractéristiques et différences. Nous avons dès lors proposé 5 dimensions<br />

permettant <strong>de</strong> <strong>le</strong>s caractériser et <strong>de</strong> <strong>le</strong>s différencier. Ces cinq dimensions sont <strong>le</strong> modè<strong>le</strong> <strong>de</strong><br />

<strong>données</strong>, <strong>le</strong>s choix CAP et PACELC 1 , <strong>le</strong> modè<strong>le</strong> <strong>de</strong> consistance, <strong>le</strong> modè<strong>le</strong> <strong>de</strong> réplication et <strong>le</strong><br />

modè<strong>le</strong> <strong>de</strong> requêtes. D’autres dimensions auraient pu être choisies mais nous avons décidé <strong>de</strong><br />

restreindre <strong>le</strong>ur nombre dans <strong>le</strong> but <strong>de</strong> fournir un récapitulatif concis mais suffisant <strong><strong>de</strong>s</strong> choix<br />

<strong>le</strong>s plus importants.<br />

Ces <strong>de</strong>ux chapitres (<strong>le</strong>s définitions au <strong>cloud</strong> et l’étu<strong>de</strong> comparative <strong>de</strong> différents SGBDs)<br />

nous ont servi <strong>de</strong> base pour décrire notre sujet d’étu<strong>de</strong> : l’élasticité <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong><br />

<strong>sur</strong> <strong>cloud</strong> que nous définissons comme étant <strong>le</strong>ur capacité à passer (monter et <strong><strong>de</strong>s</strong>cendre) à<br />

l’échel<strong>le</strong> <strong>de</strong> manière dynamique (en étant toujours disponib<strong>le</strong>). Nous en avons proposé une<br />

étu<strong>de</strong> analytique basée <strong>sur</strong> <strong><strong>de</strong>s</strong> tests <strong>de</strong> charge <strong>sur</strong> Cassandra lorsque ce système passe à<br />

l’échel<strong>le</strong> (montée et <strong><strong>de</strong>s</strong>cente).<br />

Pour analyser <strong>le</strong> phénomène <strong>de</strong> passage à l’échel<strong>le</strong> dynamique (<strong>sur</strong> une pério<strong>de</strong> <strong>de</strong> temps<br />

donnée), nous proposons 5 paramètres : <strong>le</strong> coefficient, <strong>le</strong> temps et la perturbation d’adaptation,<br />

l’impact maximal en perte en performance et <strong>le</strong>s coefficients angulaires <strong><strong>de</strong>s</strong> montée et <strong><strong>de</strong>s</strong>cente<br />

1. L’acronyme PACELC est très nettement moins populaire que CAP mais nous <strong>le</strong> trouvons bien plus<br />

parlant que ce <strong>de</strong>rnier.<br />

82


<strong><strong>de</strong>s</strong> temps <strong>de</strong> réponses. Le temps d’adaptation caractérise <strong>le</strong> temps nécessaire au système<br />

pour assimi<strong>le</strong>r la modification <strong>de</strong> son nombre d’instances, pour que ses temps <strong>de</strong> réponses<br />

n’en soient plus influencés. Le coefficient d’adaptation représente <strong>le</strong> gain <strong>de</strong> cette modification<br />

(en regardant <strong>le</strong> nombre d’instances et <strong>le</strong>s temps <strong>de</strong> réponse avant et après modification).<br />

Durant cette phase d’adaptation, <strong>le</strong> système retourne <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence plus importants.<br />

Pour qualifier cette perte en performance, l’impact maximal va signifier cette augmentation<br />

par rapport aux temps <strong>de</strong> latences initiaux et <strong>le</strong>s coefficients <strong>de</strong> montée et <strong><strong>de</strong>s</strong>cente nous<br />

informent, eux, <strong>sur</strong> la tendance du système, sa rapidité à perdre et à gagner en performance.<br />

Enfin, la perturbation d’adaptation caractérise la manière dont <strong>le</strong> système est perturbé durant<br />

cette phase d’adaptation.<br />

Enfin, <strong>sur</strong> base <strong><strong>de</strong>s</strong> étu<strong><strong>de</strong>s</strong> et <strong><strong>de</strong>s</strong> résultats précé<strong>de</strong>nts et à partir <strong>de</strong> réf<strong>le</strong>xions théoriques,<br />

nous tentons <strong>de</strong> définir quels sont <strong>le</strong>s choix techniques faits par <strong>le</strong>s SGBDs <strong>sur</strong> <strong>le</strong>ur élasticité.<br />

Sur base <strong>de</strong> considérations théoriques et pratiques, nous constatons que plus un système<br />

propose <strong><strong>de</strong>s</strong> modè<strong>le</strong>s <strong>de</strong> <strong>données</strong> et requêtes comp<strong>le</strong>xes, moins il sera élastique. Une corrélation<br />

négative peut aussi être faite entre la consistance <strong><strong>de</strong>s</strong> <strong>données</strong> et l’élasticité du système.<br />

Nous remarquons aussi que <strong>le</strong> temps d’adaptation d’un système sera plus court si <strong>le</strong> système<br />

envisage une politique <strong>de</strong> réplication <strong>de</strong> <strong>données</strong> asynchrones. Outre ces choix techniques<br />

déjà décrits dans l’étu<strong>de</strong> comparative, nous mettons en avant <strong>de</strong>ux autres choix : centraliser<br />

ou décentraliser <strong>le</strong> système. La décentralisation est un point positif pour l’élasticité et agir<br />

passivement ou activement à l’ajout d’instances ; une politique active ra<strong>le</strong>ntit l’adaptation<br />

mais optimise <strong>le</strong> gain en performance.<br />

Travaux futurs<br />

Ce travail pose donc <strong><strong>de</strong>s</strong> dimensions qui caractérisent un SGBD et influent <strong>sur</strong> son élasticité.<br />

De plus, il propose un scénario et <strong><strong>de</strong>s</strong> paramètres pour analyser l’élasticité du système<br />

en transition. Ce travail ouvre un certain nombre <strong>de</strong> portes et <strong>de</strong> questions qui seraient très<br />

intéressantes à étudier.<br />

La première est relative au <strong>cloud</strong> <strong>computing</strong> et au manque <strong>de</strong> définitions, <strong>de</strong> standards<br />

pour <strong>le</strong> régir. Dans ce mémoire, nous avons ramené <strong><strong>de</strong>s</strong> définitions commercia<strong>le</strong>s, attractives<br />

à <strong><strong>de</strong>s</strong> notions scientifiques. Ces notions ont été voulues <strong>le</strong>s plus rigoureuses possib<strong>le</strong> mais il<br />

serait prétentieux d’affirmer qu’el<strong>le</strong>s pourraient servir <strong>de</strong> références hors <strong>de</strong> ce travail tant<br />

standardiser <strong>le</strong> <strong>cloud</strong> <strong>computing</strong> est une tâche comp<strong>le</strong>xe <strong>sur</strong> laquel<strong>le</strong> butent <strong>de</strong> nombreux<br />

organismes. Nous espérons néanmoins que nos définitions puissent servir <strong>de</strong> <strong>bases</strong> à un tel<br />

procédé <strong>de</strong> standardisation.<br />

L’étu<strong>de</strong> concurrente <strong>de</strong> T. Dory ([41]) s’oriente vers la comparaison <strong>de</strong> l’élasticité <strong>de</strong> différents<br />

systèmes. El<strong>le</strong> décrit l’élasticité en termes <strong>de</strong> systèmes stab<strong>le</strong>s, en régime. Sur base <strong>de</strong><br />

cel<strong>le</strong>-ci et <strong>de</strong> notre étu<strong>de</strong>, nous avons décrit une nouvel<strong>le</strong> approche (combinant <strong>le</strong>s <strong>de</strong>ux premières)<br />

pour tester <strong>le</strong>s élasticités du système en régime et en transition (voir section 4.6.2).<br />

Pour mener à bien une tel<strong>le</strong> approche, un certains nombre <strong>de</strong> critères doivent encore être<br />

établis. Il s’agira <strong>de</strong> pouvoir définir à définir <strong>de</strong> manière rigoureuse un système stab<strong>le</strong> : une<br />

définition permettant <strong>de</strong> pouvoir <strong>le</strong> déterminer <strong>de</strong> manière automatique.<br />

Nous pensons nos paramètres en nombre suffisant et assez globaux pour permettre d’analyser<br />

toute adaptation du système en transition mais ceci n’a pas pu être vérifié pour tout<br />

système. Si Cassandra se comporte comme nous l’avions envisagé <strong>de</strong> manière théorique, il<br />

serait intéressant <strong>de</strong> voir <strong>le</strong> comportement d’autres systèmes lors <strong>de</strong> <strong>le</strong>ur transition.<br />

De manière généra<strong>le</strong>, nous déplorons <strong>le</strong> manque d’étu<strong><strong>de</strong>s</strong> expérimenta<strong>le</strong>s soutenant notre<br />

83


étu<strong>de</strong> (plus théorique que pratique) <strong>de</strong> l’influence <strong><strong>de</strong>s</strong> choix techniques d’un système <strong>sur</strong> son<br />

élasticité. Il serait donc intéressant <strong>de</strong> déployer <strong>le</strong>s tests définis précé<strong>de</strong>mment <strong>sur</strong> <strong>de</strong> plus<br />

nombreux systèmes en faisant varier <strong>le</strong>urs paramètres pour mettre en évi<strong>de</strong>nce ces relations<br />

entre choix techniques et élasticité et vali<strong>de</strong>r ainsi ou contredire nos approches théoriques.<br />

Dans une autre étu<strong>de</strong> (voir rapport <strong>de</strong> stage en section B.4.1), nous avons souligné l’inadéquation<br />

<strong><strong>de</strong>s</strong> bancs d’essais traditionnels pour <strong>le</strong>s nouveaux SGBDs. YCSB propose en solution<br />

un banc d’essais <strong>le</strong> plus simpliste possib<strong>le</strong> <strong>de</strong> manière à s’adapter à tous ces systèmes. Or,<br />

nous l’avons souligné dans ce mémoire, <strong>le</strong>s modè<strong>le</strong>s <strong>de</strong> <strong>données</strong> et <strong>de</strong> requêtes (notamment la<br />

possibilité d’écrire ses fonctions MR) influencent nettement <strong>sur</strong> <strong>le</strong> SGBD et son élasticité. Il<br />

existe donc une gran<strong>de</strong> nécessité <strong>de</strong> définir un nouveau banc d’essais plus comp<strong>le</strong>xe pouvant<br />

servir <strong>de</strong> standard pour tester ces nouveaux systèmes.<br />

84


Bibliographie<br />

[1] Amazon Elastic Compute Cloud, page d’accueil. http://aws.amazon.com/ec2/,<br />

consulté <strong>le</strong> 8 avril 2011.<br />

[2] Amazon Mechanical Turk, page d’accueil. https://www.mturk.com/mturk/welcome,<br />

consulté <strong>le</strong> 3 mai 2011.<br />

[3] Apache Cassandra - Operations. http://wiki.apache.org/cassandra/<br />

Operations,consulté <strong>le</strong> 2 mai 2010.<br />

[4] Apache Cassandra - Wiki. http://wiki.apache.org/cassandra/,consulté <strong>le</strong> 25 avril<br />

2010.<br />

[5] Apache Cassandra, page d’accueil. http://cassandra.apache.org, consulté <strong>le</strong> 2 mai<br />

2011.<br />

[6] Apache HBase, page d’accueil. http://hbase.apache.org, consulté <strong>le</strong> 2 mai 2011.<br />

[7] Cassandra Mailing List - How to Decommission Two Slow No<strong><strong>de</strong>s</strong> ?<br />

http://cassandra-user-incubator-apache-org.3065146.n2.nabb<strong>le</strong>.com/<br />

how-to-<strong>de</strong>commission-two-slow-no<strong><strong>de</strong>s</strong>-td5078455.html, consulté <strong>le</strong> 28 mai 2011.<br />

[8] Introduction à MySQL Cluster. http://<strong>de</strong>v.mysql.com/doc/refman/5.0/fr/<br />

ndbcluster.html, consulté <strong>le</strong> 21 août 2010.<br />

[9] MongoDB Documentation, MapReduce. http://www.mongodb.org/display/DOCS/<br />

MapReduce, consulté <strong>le</strong> 5 mai 2011.<br />

[10] MongoDB, page d’accueil. http://www.mongodb.org, consulté <strong>le</strong> 2 mai 2011.<br />

[11] Sca<strong>le</strong>DB, page d’accueil. http://www.sca<strong>le</strong>db.com/, consulté <strong>le</strong> 24 septembre 2010.<br />

[12] Vol<strong>de</strong>mort, page d’accueil. http://project-vol<strong>de</strong>mort.com/, consulté <strong>le</strong> 4 mai 2011.<br />

[13] VoltDB, page d’accueil. http://voltdb.com/, consulté <strong>le</strong> 24 septembre 2010.<br />

[14] HBase, ACID Semantics, 6 mai 2011. http://hbase.apache.org/acid-semantics.<br />

html, consulté <strong>le</strong> 12 mai 2011.<br />

[15] J. Nimis S. Tai et T. Sandholm A. Lenk, M. K<strong>le</strong>ms. What’s Insi<strong>de</strong> the Cloud ? An<br />

Architectural Map of the Cloud Landscape. In Proceedings of the 2009 ICSE Workshop on<br />

Software Engineering Chal<strong>le</strong>nges of Cloud Computing, page <strong>de</strong> 23 à 31. IEEE Computer<br />

Society, 2009.<br />

[16] D. Abadi. Prob<strong>le</strong>ms with CAP, and Yahoo’s Litt<strong>le</strong> Known NoSQL System,<br />

23 décembre 2010. http://dbmsmusings.blogspot.com/2010/04/<br />

prob<strong>le</strong>ms-with-cap-and-yahoos-litt<strong>le</strong>.html, consulté <strong>le</strong> 24 février 2011.<br />

[17] E. Tam R. Ramakrishnan et R. Sears B.F. Cooper, A. Silberstein. Benchmarking Cloud<br />

Serving Systems with YCSB. In SoCC ’10 : Proceedings of the First ACM Symposium<br />

on Cloud Computing, page <strong>de</strong> 143 à 154. ACM, 2010.<br />

85


[18] E. Brewer. Towards Robust Distributed Systems. In PODC ’00 : Proceedings of the Nineteenth<br />

Annual ACM Symposium on Princip<strong>le</strong>s of Distributed Computing. ACM, 2000.<br />

[19] J. Browne. Brewer’s CAP Theorem, 11 janvier 2009. http://www.julianbrowne.com/<br />

artic<strong>le</strong>/viewer/brewers-cap-theorem, consulté <strong>le</strong> 24 février 2011.<br />

[20] R. Cattell. Scalab<strong>le</strong> SQL and NoSQL Data Stores. page 1 à 16, Décembre 2010.<br />

[21] K. Chodorow. Scaling MongoDB. O’Reilly Media, 2011.<br />

[22] E. Ciurana. Getting Started with NoSQL and Data Scalability. http://refcardz.<br />

dzone.com/refcardz/getting-started-nosql-and-data, consulté <strong>le</strong> 25 août 201°.<br />

[23] B. F. Cooper. Yahoo ! Cloud Serving Benchmark, Overview and Results, Mars 2010.<br />

http://www.brianfrankcooper.net/pubs/ycsb-v4.pdf, consulté <strong>le</strong> 8 mars 2011.<br />

[24] P. Pawlowski et J. Cies<strong>le</strong>wicz E. Friedman. SQL/MapReduce : a Practical Approach<br />

to Self-<strong><strong>de</strong>s</strong>cribing, Polymorphic, and Paral<strong>le</strong>lizab<strong>le</strong> User-<strong>de</strong>fined Functions. Proc. VLDB<br />

Endow., 2(2) :<strong>de</strong> 1402 à 1413, 2009.<br />

[25] K. Chodorow et M. Dirolf. MongoDB, The Definitive Gui<strong>de</strong>. O’Reilly Media, Septembre<br />

2010.<br />

[26] S Gilbert et N. Lynch. Brewer’s Conjecture and the Feasibility of Consistent Availab<strong>le</strong><br />

Partition-To<strong>le</strong>rant Web Services. In ACM SIGACT News, 2002.<br />

[27] A. Lakshman et P. Malik. Cassandra - A Decentralized Structured Storage System.<br />

SIGOPS Oper. Syst. Rev., 44 :<strong>de</strong> 35 à 40, avril 2009.<br />

[28] J. Dean et S. Ghemawat. MapReduce : Simplified Data Processing on Large Clusters.<br />

Commun. ACM, 51(1) :<strong>de</strong> 107 à 113, 2008.<br />

[29] P. Mell et T. Grance. The NIST Definition of Cloud Computing. National Institute of<br />

Standards and Technology, 53(6) :<strong>de</strong> 1 à 50, juil<strong>le</strong>t 2009.<br />

[30] M. Figuière. NoSQL Europe : Tour d’horizon <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong><br />

NoSQL, 21 avril 2010. http://blog.xebia.fr/2010/04/21/<br />

nosql-europe-tour-dhorizon-<strong><strong>de</strong>s</strong>-<strong>bases</strong>-<strong>de</strong>-donnees-nosql/, consulté <strong>le</strong> 12<br />

août 2010.<br />

[31] M. Jampani G. Kakulapati A.Lakshman A. Pilchin S. Sivasubramanian P. Vosshall et<br />

W. Vogels G. DeCandia, D. Hastorun. Dynamo : Amazon’s Highly Availab<strong>le</strong> Key-value<br />

Store. SIGOPS Oper. Syst. Rev., 41 :<strong>de</strong> 205 à 220, Octobre 2007.<br />

[32] P. Grange. Le livre blanc du <strong>cloud</strong> <strong>computing</strong>. Syntec informatique, page <strong>de</strong> 1 à 19, 2010.<br />

[33] E. Hewitt. Cassandra : The Definitive Gui<strong>de</strong>. O’Reilly, First Edition edition, 2010.<br />

[34] T. Hoff. VoltDB Decapites Six SQL Urban Myths And Delivers Internet Sca<strong>le</strong><br />

OLTP In The Process, <strong>le</strong> 25 juin 2010. http://highscalability.com/blog/2010/<br />

6/28/voltdb-<strong>de</strong>capitates-six-sql-urban-myths-and-<strong>de</strong>livers-internet.html,<br />

consulté <strong>le</strong> 12 août 2010.<br />

[35] D. Kushal. MongoDB Strategies for the Disk-averse. http://engineering.foursquare.<br />

com/2011/02/09/mongodb-strategies-for-the-disk-averse, consulté <strong>le</strong> 18 février<br />

2011.<br />

[36] M. Kunze A. Cana<strong>le</strong>s Castellanos D. Kramer et W. Karl L. Wang, J. Tao. Scientific<br />

Cloud Computing : Early Definition and Experience. High Performance Computing and<br />

Communications, 10th IEEE International Conference, page <strong>de</strong> 825 à 830, 2008.<br />

86


[37] S. Lutz. The Future of Cloud Computing Opportunities. European Cloud Computing<br />

Beyond 2010, page <strong>de</strong> 1 à 67, 2010.<br />

[38] D. Merriman. MongoDB : Sharding Introduction. http://www.mongodb.org/display/<br />

DOCS/Sharding+Introduction, consulté <strong>le</strong> 28 février 2011.<br />

[39] D. Merriman. On Distributed Consistency, mars 2010. http://blog.mongodb.org/,<br />

consulté <strong>le</strong> 05 mars 2011.<br />

[40] D. M. Batista et M. Alomari S. Sakr, A. Liu. A Survey of Large Sca<strong>le</strong> Data Management<br />

Approaches in Cloud Environments. Communications Surveys Tutorials, IEEE, 12(4) :1<br />

à 26, avril 2010.<br />

[41] P. Van Roy N.-L. Tran T. Dory, B. Mejias. Mea<strong>sur</strong>ing Elasticity for <strong>cloud</strong> data<strong>bases</strong><br />

[DRAFT]. mai.<br />

[42] W. Vogels. Eventually Consistent - Revisited, 23 décembre 2008 2007. http://<br />

www.allthingsdistributed.com/2008/12/eventually_consistent.html, consulté <strong>le</strong><br />

19 février 2011.<br />

[43] T. White. Hadoop : The Definitive Gui<strong>de</strong>. O’Reilly, Second Edition edition, october<br />

2010.<br />

87


Annexe A<br />

Liste d’accronymes<br />

– API : Interface <strong>de</strong> programmation<br />

– BD : Bases <strong>de</strong> <strong>données</strong><br />

– CAP : “théorème CAP” voir (voir section 2.4)<br />

– CC : Cloud Computing<br />

– Cloud : Cloud Computing<br />

– HDFS : Hadoop distributed Fi<strong>le</strong>system<br />

– HuaaS : Human as a Service<br />

– IaaS : Infrastructure as a Service<br />

– MR : Map Reduce<br />

– MV : Machine Virtuel<strong>le</strong><br />

– NIST : National Institute of Standards and Technology<br />

– PaaS : Platform as a Service<br />

– PACELC : CAP revu par D. Abadi (voir section 2.4)<br />

– SaaS : Software as a Service<br />

– SGBD : Système <strong>de</strong> gestion <strong>de</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong><br />

– SGBDR : Système <strong>de</strong> gestion <strong>de</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong> relationnel<strong>le</strong>s<br />

– SQL-MR : SQL - Map Reduce<br />

– YCSB : Yahoo ! Cloud Serving Benchmark<br />

88


Annexe B<br />

Rapport <strong>de</strong> stage<br />

B.1 Cadre du stage<br />

Le stage avait pour but d’acquérir <strong>de</strong> l’expérience dans <strong>le</strong> domaine du <strong>cloud</strong> et d’étudier<br />

récentes BDs pour <strong>cloud</strong>. Dans ce but, Euranova m’a proposé, initia<strong>le</strong>ment, d’effectuer <strong><strong>de</strong>s</strong><br />

tests <strong>de</strong> comparaisons en performances <strong>sur</strong> différents SBGDs. Après avoir effectué <strong>le</strong>s premières<br />

recherches dans <strong>le</strong> domaine et après discussions entre <strong>le</strong>s ingénieurs d’ Euranova et <strong>le</strong> professeur<br />

E. Zimanyi, la finalité du stage fut redéfinie vers l’établissement d’une stratégie <strong>de</strong> banc<br />

d’essais pour nouvel<strong>le</strong>s BDs <strong>sur</strong> <strong>cloud</strong> (une adpation <strong>de</strong> TPC-C).<br />

Le stage a duré 6 semaines et a été effectué dans <strong>le</strong>s bureaux d’Euranova. Ce fut pour moi<br />

l’occasion d’avoir accès à <strong>le</strong>ur infrastructure (un cluster <strong>de</strong> 4 puis 8 serveurs) mais <strong>sur</strong>tout <strong>de</strong><br />

profiter <strong><strong>de</strong>s</strong> nombreux conseils <strong>de</strong> H. Bath, E. Delacroix, N-L. Tran (qui étaient aux bureaux<br />

d’Euranova) et <strong>de</strong> S. Skhiri (lors <strong>de</strong> réunions presque hebdomadaires).<br />

B.2 Chronologie du stage<br />

Le stage avait pour but, dans un premier temps, d’acquérir <strong>de</strong> l’expérience dans <strong>le</strong> domaine<br />

du <strong>cloud</strong> et <strong><strong>de</strong>s</strong> récentes <strong>bases</strong> <strong>de</strong> <strong>données</strong>. Dans cette optique, la première démarche était <strong>de</strong><br />

faire <strong>de</strong> faire un tour d’horizon <strong><strong>de</strong>s</strong> différentes solutions existantes, pour <strong>le</strong> <strong>cloud</strong> : Eucalyptus,<br />

OpenNebula, Amazon et pour <strong>le</strong>s <strong>bases</strong> <strong>de</strong> <strong>données</strong> : <strong>le</strong>s <strong>bases</strong> <strong>de</strong> <strong>données</strong> traditionnel<strong>le</strong>s<br />

adaptées au <strong>cloud</strong>, <strong>le</strong> mouvement NoSQL et <strong>le</strong>s nouvel<strong>le</strong>s <strong>bases</strong> <strong>de</strong> <strong>données</strong> relationnel<strong>le</strong>s : <strong>le</strong>s<br />

SQL-MR.<br />

La <strong>de</strong>uxième étape était <strong>de</strong> choisir <strong>de</strong>ux BDs parmi <strong>le</strong>s solutions explorées, <strong>de</strong> <strong>le</strong>s étudier<br />

plus en détail dans <strong>le</strong> but final <strong>de</strong> pouvoir effectuer <strong><strong>de</strong>s</strong> tests <strong>de</strong> comparaisons en performances.<br />

Les <strong>de</strong>ux choix se dirigèrent vers Cassandra (NoSQL) et AsterData (SQL-MR). L’outils choisi<br />

pour exécuter <strong>le</strong>s tests était <strong>le</strong> framework YCSB.<br />

Les systèmes choisis, il fallait décrire une scénario <strong>de</strong> test : <strong>le</strong> schéma <strong>de</strong> <strong>données</strong>, <strong>le</strong>s<br />

dimensions à faire varier et <strong>le</strong>s métriques à re<strong>le</strong>ver. Le schéma <strong><strong>de</strong>s</strong> <strong>données</strong> choisi fût celui <strong>de</strong><br />

l’application Twitter. Ce choix fait, <strong>le</strong> schéma <strong>de</strong> l’application fut modélisé et l’application<br />

YCSB fut modifiée <strong>de</strong> manière à générer ces <strong>données</strong>. Une modélisation d’ensemb<strong>le</strong>s ordonnés<br />

d’opérations typiques <strong>de</strong> Twitter furent aussi modélisés et implémentés.<br />

Seu<strong>le</strong>ment, après discussion avec <strong>le</strong> professeur E. Zimányi, <strong>le</strong> choix fut fait <strong>de</strong> se ramener<br />

à <strong><strong>de</strong>s</strong> bancs d’essais <strong>de</strong> référence tels que TPC. Après une étu<strong>de</strong> <strong><strong>de</strong>s</strong> différentes solutions <strong>de</strong><br />

références, <strong>le</strong> choix fût porté <strong>sur</strong> TPC-C. L’adaptation <strong>de</strong> TPC-C à <strong><strong>de</strong>s</strong> nouveaux SGBDs tels<br />

89


Cassandra n’est pas évi<strong>de</strong>nte. Ce fut la première tâche à réaliser. Pour résumer la démarche<br />

(qui est expliquée dans l’artic<strong>le</strong> en section B.4.1), il s’agit <strong>de</strong> repenser <strong>le</strong>s bans d’essais non<br />

plus comme décrivant <strong>de</strong> manière rigoureuse <strong>le</strong>s <strong>données</strong> et <strong>le</strong>s transactions à effectuer mais<br />

<strong>le</strong> décrivant <strong>de</strong> manière fonctionnel<strong>le</strong>.<br />

Cette modélisation fut transposée <strong>sur</strong> une nouvel<strong>le</strong> version <strong>de</strong> YCSB adaptée et, à titre<br />

d’exemp<strong>le</strong>, ce nouveau banc d’essais fut appliqué <strong>sur</strong> un cluster Cassandra <strong>de</strong> 4 nœuds. Vous<br />

trouverez en section B.4 <strong>de</strong>ux artic<strong>le</strong>s décrivant ces travaux.<br />

B.3 Bilan du stage<br />

Les premières semaines <strong>de</strong> stage m’ont permis <strong>de</strong> me familiariser avec la blogospshère<br />

relative au <strong>cloud</strong>, à <strong>le</strong>urs BDs et tous <strong>le</strong>s concepts <strong>le</strong>s entourant. J’ai ainsi découvert, entre<br />

autre, YCSB qui nous a servi dans ce mémoire. Les semaines suivantes m’ont permis <strong>de</strong><br />

découvrir <strong>le</strong>s métho<strong><strong>de</strong>s</strong> <strong>de</strong> banc d’essais, <strong>le</strong>urs standards et normes. De manière généra<strong>le</strong> ceci<br />

m’a permis <strong>de</strong> découvrir que lire un artic<strong>le</strong> scientifique ne nous apprend pas seu<strong>le</strong>ment que<br />

<strong>le</strong> contenu <strong>de</strong> cet artic<strong>le</strong>. Lire un artic<strong>le</strong> scientifique peut aussi nous apprendre comment<br />

formaliser <strong><strong>de</strong>s</strong> idées, <strong><strong>de</strong>s</strong> concepts et <strong><strong>de</strong>s</strong> résultats, apprendre <strong>de</strong> sa structure.<br />

Ce stage a aussi été pour moi l’occasion <strong>de</strong> découvrir chez <strong>le</strong>s ingénieurs d’Euranova <strong><strong>de</strong>s</strong><br />

personnes <strong>de</strong> gran<strong><strong>de</strong>s</strong> qualités scientifiques. J’ai appris un nouveau mo<strong>de</strong> d’apprentissage basé<br />

<strong>sur</strong> <strong><strong>de</strong>s</strong> discussions et réunions brèves ou longues. Je fus aussi invité à participer à <strong><strong>de</strong>s</strong> réunions,<br />

à l’université catholique <strong>de</strong> Louvain (UCL), d’un groupe d’étudiants ayant un sujet relatif au<br />

<strong>cloud</strong>. Durant ces réunions, périodiquement, chacun exposait ses recherches et ses avancées.<br />

Ce mo<strong>de</strong> <strong>de</strong> partage <strong>de</strong> savoir fut aussi très instructif.<br />

Cette pério<strong>de</strong> fut aussi l’occasion <strong>de</strong> par<strong>le</strong>r avec <strong><strong>de</strong>s</strong> ingénieurs <strong>de</strong> <strong>le</strong>ur travail. Travail<strong>le</strong>r<br />

à Euranova m’a permis <strong>de</strong> rencontrer <strong><strong>de</strong>s</strong> consultants travaillant dans <strong><strong>de</strong>s</strong> branches très différentes<br />

et donc m’a ouvert <strong>le</strong>s yeux <strong>sur</strong> un mon<strong>de</strong> très vaste. Grâce à ces nombreuses discussions,<br />

je peux, à présent, mieux appréhen<strong>de</strong>r mon futur .<br />

B.4 Autres documents<br />

Cette section regroupe <strong>le</strong>s différents documents relatifs à ce stage.<br />

B.4.1 Artic<strong>le</strong><br />

Ci-<strong><strong>de</strong>s</strong>sous, vous trouverez l’artic<strong>le</strong> que j’ai écrit <strong>sur</strong> la modélisation d’un banc d’essais du<br />

type TPC-C adapté au solution <strong>cloud</strong>.<br />

90


Abstract<br />

Bancs d’essais pour nouvel<strong>le</strong>s <strong>bases</strong> <strong>de</strong> <strong>données</strong> <strong>sur</strong> <strong>cloud</strong><br />

Récemment un nombre conséquent <strong>de</strong> nouvel<strong>le</strong> <strong>bases</strong><br />

<strong>de</strong> <strong>données</strong> adaptées au <strong>cloud</strong> <strong>computing</strong> ont vu <strong>le</strong> jour<br />

pour répondre à <strong><strong>de</strong>s</strong> besoins spécifiques d’applications y<br />

accédant <strong>de</strong> manière très fréquente. Ces nouvel<strong>le</strong>s <strong>bases</strong><br />

<strong>de</strong> <strong>données</strong> (dont <strong>le</strong> mouvement NoSQL) se distinguent<br />

fortement <strong><strong>de</strong>s</strong> <strong>bases</strong> <strong>de</strong> <strong>données</strong> traditionnel<strong>le</strong>s, il s’agit<br />

donc <strong>de</strong> créer ou d’adapter <strong>le</strong>s bancs d’essais traditionnels<br />

à <strong>le</strong>urs particularités afin <strong>de</strong> pouvoir comparer <strong>le</strong>urs<br />

performances. Dans ce travail, nous proposons un banc<br />

d’essais similaire à TPC-C adapté aux nouvel<strong>le</strong>s <strong>bases</strong> <strong>de</strong><br />

<strong>données</strong>. Nous définissons <strong>le</strong>s nouveaux critères <strong>de</strong> comparaison,<br />

<strong>de</strong> performance et proposons une approche <strong>de</strong><br />

modélisation pour ces nouvel<strong>le</strong>s <strong>bases</strong> <strong>de</strong> <strong>données</strong>.<br />

1 Introduction<br />

Le <strong>cloud</strong> <strong>computing</strong> est une architecture d’instances<br />

virtuel<strong>le</strong>s auto-adaptative à la charge à laquel<strong>le</strong> el<strong>le</strong> est<br />

soumise. Cette structure est donc capab<strong>le</strong> <strong>de</strong> rég<strong>le</strong>r dynamiquement<br />

son nombre d’instances pour correspondre<br />

<strong>de</strong> manière optima<strong>le</strong> à la charge c’est-à-dire un nombre<br />

minimal d’instances (pour réduire <strong>le</strong>s coûts) qui satisfait<br />

<strong>le</strong>s conditions <strong>de</strong> performance désirée.<br />

Lorsqu’on désire déployer un tel système, il s’agit<br />

<strong>de</strong> voir si il est réel<strong>le</strong>ment capab<strong>le</strong> <strong>de</strong> fournir <strong>le</strong>s performances<br />

requises et <strong>de</strong> s’adapter à la charge. Parmi<br />

<strong>le</strong>s différents composants d’un <strong>cloud</strong>, la base <strong>de</strong> <strong>données</strong><br />

se révè<strong>le</strong> être un point faib<strong>le</strong> qui peut vite limiter<br />

l’expansion, la capacité d’adaptation <strong>de</strong> l’architecture. Il<br />

s’agit dès lors <strong>de</strong> bien choisir son système <strong>de</strong> gestion <strong>de</strong><br />

base <strong>de</strong> <strong>données</strong> (SGBD) pour être sûr qu’il satisfait aux<br />

critères <strong>de</strong> notre application.<br />

Pour s’as<strong>sur</strong>er qu’un SGBD satisfait <strong><strong>de</strong>s</strong> critères <strong>de</strong><br />

sé<strong>le</strong>ction, nous soumettons celui-ci à un banc d’essais<br />

(benchmark). Le domaine du benchmarking est un domaine<br />

fort rigoureux et normalisé favorisant ainsi la re-<br />

Nicolas Degroodt<br />

Faculté <strong><strong>de</strong>s</strong> sciences,<br />

Université libre <strong>de</strong> Bruxel<strong>le</strong>s<br />

Belgique<br />

En partenariat avec<br />

Euranova<br />

nicolas.<strong>de</strong>groodt@ulb.ac.be<br />

productibilité et la confiance en <strong>le</strong>s résultats précé<strong>de</strong>nts.<br />

TPC (Transaction Processing Performance Council), par<br />

exemp<strong>le</strong>, est un organisme renommé qui propose une série<br />

<strong>de</strong> bancs d’essais standardisés pour SGBDs relationnels<br />

(SGBDR) en modélisant <strong><strong>de</strong>s</strong> applications concrètes <strong>de</strong> la<br />

vie courante. Ces séries <strong>de</strong> tests servent <strong>de</strong> référence pour<br />

juger, comparer <strong>le</strong>s performances <strong>de</strong> différents SGBDRs.<br />

Le <strong>cloud</strong> amène avec lui l’avènement <strong>de</strong> nouveaux<br />

SGBDs (dont <strong>le</strong>s systèmes NoSQL (not-only-SQL)) et<br />

<strong>le</strong>urs critères <strong>de</strong> performance tels que <strong>le</strong>s temps <strong>de</strong> latence,<br />

l’usage CPU et l’élasticité. Ces nouveaux SGBDs quittent<br />

tota<strong>le</strong>ment <strong>le</strong> mouvement relationnel pour proposer <strong><strong>de</strong>s</strong><br />

solutions adaptées aux besoins spécifiques d’une application<br />

particulière. Il est dès lors impossib<strong>le</strong> d’appliquer <strong>le</strong>s<br />

bancs d’essais standards (tels que ceux proposés par TPC)<br />

<strong>sur</strong> ces systèmes. Il s’agit dès lors <strong>de</strong> fixer <strong><strong>de</strong>s</strong> nouveaux<br />

standards, critères et une nouvel<strong>le</strong> méthodologie <strong>de</strong> tests<br />

qui permettra d’évaluer <strong>de</strong> manière uniforme et comparab<strong>le</strong><br />

<strong>le</strong>s différents SGBDs.<br />

Une première solution, proposée dans [3], consiste<br />

à soumettre tous ces systèmes à un même scénario qui<br />

ne testera que <strong>le</strong>urs fonctionnalités <strong>le</strong>s plus basiques<br />

présentes dans tout SGBD (à savoir <strong><strong>de</strong>s</strong> opérations <strong>de</strong><br />

CRUD 1 ). Cette approche a <strong>le</strong> mérite <strong>de</strong> permettre une<br />

comparaison effective (pomme-pomme) <strong><strong>de</strong>s</strong> SGBDs mais<br />

présente <strong>le</strong> défaut <strong>de</strong> ne pas considérer <strong><strong>de</strong>s</strong> opérations<br />

comp<strong>le</strong>xes (présentes dans la vie <strong>de</strong> tous <strong>le</strong>s jours) et<br />

<strong>de</strong> ne pas tirer profit <strong><strong>de</strong>s</strong> différentes qualités <strong><strong>de</strong>s</strong> SGBD.<br />

Un SGBDR traditionnel (tel que MySQL), par exemp<strong>le</strong>,<br />

est un système fort comp<strong>le</strong>xe (et donc vraisemblab<strong>le</strong>ment<br />

moins performant) mais possédant <strong><strong>de</strong>s</strong> propriétés et structures<br />

bien plus élaborées qu’un système clé-va<strong>le</strong>ur d’une<br />

solution NoSQL (tel que vol<strong>de</strong>mort).<br />

Une secon<strong>de</strong> approche, présentée dans cet artic<strong>le</strong>, se<br />

1 Create, Read, Update, De<strong>le</strong>te c’est-à-dire (Créer, lire, mettre-à-jour<br />

et supprimer)


ase <strong>sur</strong> <strong>le</strong> constat que, même si ils sont fort différents,<br />

ces systèmes ont la même vocation: cel<strong>le</strong> <strong>de</strong> stocker<br />

<strong>de</strong> manière performante <strong>le</strong>s <strong>données</strong> et à ce titre, il est<br />

nécessaire <strong>de</strong> pouvoir <strong>le</strong>s comparer en tenant compte <strong>de</strong><br />

<strong>le</strong>urs avantages et défauts. Dans cette optique, nous<br />

conservons l’approche TPC (qui est <strong>de</strong> tester <strong>le</strong> SGBD<br />

avec <strong><strong>de</strong>s</strong> <strong>données</strong> et opérations <strong>de</strong> la vie courante) tout<br />

en adaptant la modélisation <strong><strong>de</strong>s</strong> <strong>données</strong> et requêtes au<br />

SGBD testé.<br />

Dans ce travail, nous proposons d’établir <strong>le</strong>s nouveaux<br />

critères <strong>de</strong> comparaisons pour différents modè<strong>le</strong>s<br />

<strong>de</strong> SGBDs placés dans un contexte <strong>de</strong> <strong>cloud</strong> et <strong>de</strong> définir<br />

l’action <strong>de</strong> benchmarking non comme l’implémentation<br />

<strong>de</strong> standard mais plus comme la modélisation d’un standard<br />

fonctionnel <strong>de</strong> bancs d’essais. A ce titre, un banc<br />

d’essais ne doit plus proposer une architecture stricte pour<br />

ses <strong>données</strong> mais plutôt un schéma et une sémantique<br />

fonctionnels.<br />

Nous proposons ensuite, à titre illustratif, cette<br />

démarche via l’application d’un banc d’essais similaire à<br />

TPC-C <strong>sur</strong> un Cassandra[4], un système NoSQL avancé<br />

propulsé par l’équipe <strong>de</strong> développement <strong>de</strong> Facebook.<br />

2 Related Work<br />

2.1 TPC<br />

TPC-C est un banc d’essais <strong>de</strong> processus <strong>de</strong> transactions<br />

en ligne qui met en avant 5 différentes transactions;<br />

principa<strong>le</strong>s activités d’un environnement gérant<br />

<strong><strong>de</strong>s</strong> comman<strong><strong>de</strong>s</strong> d’objets. Ces transactions modélisent<br />

<strong>le</strong>s opérations <strong>de</strong> livraisons et entrées <strong>de</strong> comman<strong><strong>de</strong>s</strong>, <strong>le</strong>s<br />

payements, <strong>le</strong>s vérifications <strong><strong>de</strong>s</strong> statuts <strong><strong>de</strong>s</strong> comman<strong><strong>de</strong>s</strong> et<br />

<strong>le</strong> monitoring <strong><strong>de</strong>s</strong> stocks <strong><strong>de</strong>s</strong> magasins.<br />

TPC-C propose une définition <strong><strong>de</strong>s</strong> <strong>données</strong> via un<br />

schéma entités-relations et une définition rigoureusement<br />

<strong>de</strong> tous <strong>le</strong>s attributs <strong>de</strong> chaque entité. Une fois qu’un tel<br />

schéma est déployé dans <strong>le</strong> SGBDR, que <strong>le</strong>s <strong>données</strong> y<br />

sont chargées, un banc <strong>de</strong> tests simulant <strong>le</strong>s cinq transactions<br />

courantes (décrites aussi rigoureusement par TPC-<br />

C) peut être lancé. Le but étant d’assumer un nombre<br />

maximum <strong>de</strong> transactions à la minute.<br />

Nous avons choisi TPC-C <strong>de</strong> part la simplicité <strong>de</strong><br />

son schéma et ses apparentes similitu<strong><strong>de</strong>s</strong> avec un magasin<br />

en ligne (type Amazon[2]), une application qui pourrait<br />

faci<strong>le</strong>ment être tentée d’utiliser pour certaines <strong>de</strong> <strong>le</strong>ur<br />

<strong>données</strong> un SGBD NoSQL.<br />

2.2 Yahoo! Cloud Serving Benchmark<br />

Yahoo! <strong>cloud</strong> Serving Benchmark (YCSB) propose<br />

un nouveau standard <strong>de</strong> bancs d’essais et un framework<br />

pour faciliter la comparaison <strong>le</strong>s performances <strong><strong>de</strong>s</strong><br />

différentes <strong>bases</strong> <strong>données</strong> dans un contexte <strong>cloud</strong>.<br />

YCSB considère que <strong>le</strong>s benchmarks traditionnels,<br />

tels que TPC-C, ne sont plus représentatifs <strong><strong>de</strong>s</strong> nouvel<strong>le</strong>s<br />

2<br />

applications utilisant <strong>le</strong> <strong>cloud</strong> et propose <strong>de</strong> faire une<br />

comparaison pomme-pomme <strong><strong>de</strong>s</strong> ces nouveaux SGBDs<br />

et focalise son attention <strong>sur</strong> <strong>le</strong>s systèmes fournissant <strong><strong>de</strong>s</strong><br />

opérations <strong>de</strong> <strong>le</strong>cture et d’écriture en ligne (typiquement<br />

<strong>le</strong>s services web en opposition aux systèmes analytiques<br />

et relationnels OLAP).<br />

Yahoo se propose d’étudier <strong>le</strong>s performances<br />

d’opérations basiques (CRUD) <strong>sur</strong> une seu<strong>le</strong> entité du<br />

système (quel<strong>le</strong> que soit sa représentation) définissant <strong>de</strong><br />

nouveaux compromis à considérer avant d’instal<strong>le</strong>r <strong>de</strong> tels<br />

systèmes <strong>sur</strong> <strong>cloud</strong>. Parmi ceux-ci, citons <strong>le</strong> compromis<br />

entre <strong>le</strong>s performances en <strong>le</strong>cture et cel<strong>le</strong>s en écriture. En<br />

effet, ces nouveaux systèmes, pour la plupart, considèrent<br />

que l’application focalise son activité <strong>sur</strong> <strong><strong>de</strong>s</strong> écritures ou<br />

<strong>sur</strong> <strong><strong>de</strong>s</strong> <strong>le</strong>ctures et qu’il est donc intéressant <strong>de</strong> favoriser<br />

<strong>le</strong>s performances d’une seu<strong>le</strong> opération au détriment <strong>de</strong><br />

l’autre.<br />

Enfin, ils définissent quatre déploiements <strong>de</strong> tests typiques:<br />

• Le premier est axé performances. Le but est <strong>de</strong><br />

me<strong>sur</strong>er, pour une architecture <strong>cloud</strong> donnée, <strong>le</strong><br />

temps <strong>de</strong> latence en fonction du nombre <strong>de</strong> requêtes<br />

<strong>sur</strong> <strong>le</strong> système. Typiquement, ce test permet à<br />

l’administrateur <strong>de</strong> connaître <strong>le</strong> comportement du<br />

système <strong>de</strong> voir jusque quand <strong>le</strong> système sera satisfaisant.<br />

• Le <strong>de</strong>uxième consiste à faire varier <strong>le</strong> nombre<br />

d’instances; au démarrage pour étudier la montée<br />

à l’échel<strong>le</strong> du système ou durant l’exécution pour<br />

étudier l’élasticité.<br />

• Le troisième étudie la haute disponibilité du système.<br />

L’expérience consiste à supprimer une instance et à<br />

en analyser <strong>le</strong>s conséquences. Ce procédé ne permet<br />

que <strong>de</strong> définir une seu<strong>le</strong> panne. Néanmoins, ces<br />

systèmes étant forts différents, ils ne sont donc pas<br />

souvent victimes du même type <strong>de</strong> panne.<br />

• Enfin <strong>le</strong> <strong>de</strong>rnier test consiste à étudier l’influence du<br />

nombre <strong>de</strong> réplicas <strong>sur</strong> <strong>le</strong> comportement du système.<br />

Quels sont <strong>le</strong>s résultats <strong>sur</strong> <strong>le</strong>s performances, <strong>sur</strong><br />

la haute disponibilité, <strong>sur</strong> la consistance <strong>de</strong> ces<br />

réplicats (<strong>le</strong>ur fraicheur) lorsque <strong>le</strong>s différents centres<br />

<strong>de</strong> <strong>données</strong> sont dispersés dans <strong>le</strong> mon<strong>de</strong>.<br />

3 De nouveaux SGBDDs<br />

Les nouveaux SGBDs se basent <strong>sur</strong> <strong><strong>de</strong>s</strong> fon<strong>de</strong>ments<br />

fort différents. Ce qui entraine la nécessité <strong>de</strong> reconsidérer<br />

<strong>le</strong>s benchmarks. Cette section traite <strong>de</strong> ces considérations<br />

supplémentaires.


3.1 Architecture <strong><strong>de</strong>s</strong> <strong>données</strong><br />

Les standards <strong>de</strong> benchmark proposent un schéma relationnel<br />

décrit par <strong><strong>de</strong>s</strong> entités liées entres el<strong>le</strong>s. Chaque<br />

attribut, chaque relation, <strong>le</strong>s clés primaires et in<strong>de</strong>x <strong><strong>de</strong>s</strong><br />

entités y sont définis rigoureusement. La même logique<br />

est respectée pour <strong>le</strong>s transactions.<br />

Les systèmes NoSQL ne proposent pas <strong>de</strong> modéliser<br />

ces entités et relations <strong>de</strong> la même façon que <strong>le</strong> faisaient<br />

<strong>le</strong>s SGBDRs. Le schéma proposé ne peut être déployé tel<br />

quel dans <strong>le</strong> système. Il faut donc <strong>le</strong> penser tel un modè<strong>le</strong><br />

définissant <strong>le</strong>s <strong>données</strong> <strong>de</strong> manière sémantique et fonctionnel<strong>le</strong><br />

et <strong>le</strong> transposer en une structure optimisée pour<br />

<strong>le</strong> système <strong>de</strong> stockage à tester.<br />

Les transactions quant à el<strong>le</strong>s, seront aussi à voir<br />

tel<strong>le</strong>s que <strong><strong>de</strong>s</strong> modè<strong>le</strong>s décrivant <strong>le</strong> fonctionnement, <strong>le</strong><br />

dérou<strong>le</strong>ment d’opérations standard <strong>sur</strong> <strong>le</strong>s <strong>données</strong>. El<strong>le</strong>s<br />

<strong>de</strong>vront, el<strong>le</strong>s aussi, être transposées dans <strong>le</strong> contexte du<br />

système concerné.<br />

3.2 Schema Less<br />

La majorité <strong>de</strong> ces systèmes sont dits schema-<strong>le</strong>ss<br />

c’est-à-dire que <strong>le</strong>s <strong>données</strong> ne sont plus décrites par un<br />

schéma structuré et fixe mais plutôt par un schéma minimaliste<br />

(souvent un schéma clé-va<strong>le</strong>ur).<br />

L’avantage certain d’une structure relationnel<strong>le</strong> est<br />

qu’el<strong>le</strong> représente un objet <strong>de</strong> la vie réel<strong>le</strong>. La phase<br />

<strong>de</strong> modélisation peut dès lors se faire <strong>de</strong> manière intuitive,<br />

naturel<strong>le</strong>. Dans <strong>le</strong>s systèmes dits schema-<strong>le</strong>ss,<br />

la modélisation est moins naturel<strong>le</strong>. Une entrée ne<br />

représente plus un objet. La modélisation <strong><strong>de</strong>s</strong> donnée<br />

y est pensée <strong>de</strong> manière opérationnel<strong>le</strong>, impérative.<br />

L’opération <strong>de</strong> modélisation doit donc être bien réfléchie<br />

et a <strong><strong>de</strong>s</strong> implications importantes <strong>sur</strong> <strong>le</strong>s performances <strong>de</strong><br />

l’application.<br />

La phase <strong>de</strong> modélisation pour un benchmark peut<br />

prendre <strong>de</strong>ux chemins:<br />

1. Modéliser l’application en considérant <strong>le</strong> schéma relationnel<br />

et la sémantique <strong><strong>de</strong>s</strong> <strong>données</strong>; c’est-à-dire<br />

penser l’application dans l’optique qu’el<strong>le</strong> soit la<br />

plus adaptée aux <strong>données</strong> et à <strong>le</strong>urs relations. Le<br />

schéma résultant d’une tel<strong>le</strong> logique présentera <strong><strong>de</strong>s</strong><br />

performances moyennes avantageuses durant toutes<br />

l’existence <strong>de</strong> l’application.<br />

2. Modéliser l’application en considérant <strong>le</strong>s transactions<br />

du benchmark; c’est-à-dire limiter la<br />

sémantique <strong><strong>de</strong>s</strong> <strong>données</strong> à l’unique utilisation qu’on<br />

en fait dans ces transactions. Cette logique<br />

présente l’avantage certain que <strong>le</strong> SGBDs présentera<br />

<strong><strong>de</strong>s</strong> performances optima<strong>le</strong>s <strong>sur</strong> <strong>le</strong>s transactions.<br />

Néanmoins, la modélisation en résultant présenterait<br />

<strong>de</strong> forts risques d’être vite dépassée et nonperformante<br />

déployée dans une application réel<strong>le</strong>.<br />

3<br />

Alors qu’une requête relationnel<strong>le</strong> retournait un objet<br />

prêt à l’emploi, la majorité <strong><strong>de</strong>s</strong> nouveaux SGBDs<br />

ne propose généra<strong>le</strong>ment qu’un mécanisme <strong>de</strong> requêtes<br />

simplistes (un bon nombre se limite à un API<br />

read/insert/<strong>de</strong><strong>le</strong>te). L’opération <strong>de</strong> réunir <strong>le</strong>s informations<br />

sous forme d’objet utilisab<strong>le</strong> par l’application cliente est<br />

donc déléguée à une couche intermédiaire. Ce travail n’est<br />

pas négligeab<strong>le</strong>, il peut même se révé<strong>le</strong>r fort couteûx en<br />

terme <strong>de</strong> ressources. Placé d’un contexte <strong>de</strong> <strong>cloud</strong> <strong>computing</strong><br />

où l’on désire se limiter à <strong><strong>de</strong>s</strong> ressources minima<strong>le</strong>s,<br />

il convient d’analyser ce coût (en me<strong>sur</strong>ant, par<br />

exemp<strong>le</strong>, l’usage CPU d’une instance dédiée à ces transformations).<br />

3.3 BASE au lieu <strong>de</strong> ACID<br />

Alors que <strong>le</strong>s traditionnels SGBDRs proposent <strong>le</strong> concept<br />

<strong>de</strong> transactions via <strong>le</strong>s propriétés ACID, <strong>le</strong>s nouveaux<br />

SGBDs ont pris <strong>le</strong> parti <strong>de</strong> relâcher <strong>le</strong> <strong>de</strong>gré consistance<br />

pour une plus haute disponibilité en cas <strong>de</strong> partitionement<br />

du réseau et pour <strong><strong>de</strong>s</strong> temps <strong>de</strong> latence plus faib<strong>le</strong>s en cas<br />

normal [1].<br />

La première considération se fait niveaux <strong>de</strong><br />

l’abandon <strong>de</strong> la notion <strong>de</strong> transaction. Cette option<br />

doit être implémentée par <strong>le</strong> SGBD, nous ne pouvons<br />

pas l’ému<strong>le</strong>r via l’application cliente. Si celui-ci ne<br />

propose pas <strong>de</strong> transactions, il est donc impossib<strong>le</strong><br />

d’appliquer cette notion. Il s’agit dès lors d’accepter ce<br />

manque lorsqu’on déci<strong>de</strong> <strong>de</strong> déployer ou d’étudier <strong>de</strong> tels<br />

SGBDs 2 .<br />

La secon<strong>de</strong> considération est autour du rabaissement<br />

<strong>de</strong> la consistance globa<strong>le</strong> <strong>de</strong> ces systèmes. Même si la plupart<br />

<strong>de</strong> ces systèmes ne sont pas limités à une consistance<br />

faib<strong>le</strong> et que l’on peut dès lors <strong>le</strong>s tester en <strong>le</strong>ur soumettant<br />

une consistance parfaite pour chaque opération, se limiter<br />

à tel tests seraient dénaturer ces systèmes (qui tirent<br />

un gain en performance certains <strong>de</strong> ce relâchement <strong>de</strong> la<br />

consistance). Il peut donc être intéressant <strong>de</strong> proposer<br />

lors <strong>de</strong> futurs essais quelques transactions permettant une<br />

réduction <strong>de</strong> la consistance.<br />

3.4 Des systèmes non uniformes<br />

Une <strong>de</strong>rnière réf<strong>le</strong>xion est faite autour du fait que<br />

ces systèmes sont tous fort différents. Chacun apporte<br />

son lot <strong>de</strong> défauts et d’avantages par rapport aux autres.<br />

A la différence <strong>de</strong> YCSB, nous ne nous rattachons pas<br />

à l’idée <strong>de</strong> faire une comparaison pomme-pomme via<br />

l’implémentation d’un banc d’essais testant <strong>le</strong>s fonctionnalités<br />

<strong>le</strong>s plus basiques <strong><strong>de</strong>s</strong> systèmes. Il s’agit <strong>de</strong> profiter<br />

<strong>de</strong> chaque avantage proposé par <strong>le</strong>s différents systèmes,<br />

d’adapter la structure <strong><strong>de</strong>s</strong> <strong>données</strong> au SGBD dans <strong>le</strong> but<br />

2 Dans la suite <strong>de</strong> cet artic<strong>le</strong>, nous utiliserons <strong>le</strong> terme <strong>de</strong> transaction<br />

pour faire référence aux transactions décrites par <strong>le</strong> benchmark que nous<br />

voyons plus comme une suite d’opérations basiques ne satisfaisant pas<br />

nécessairement aux propriétés ACID.


<strong>de</strong> tirer profit <strong>de</strong> toutes ses qualités, d’opter pour une<br />

modélisation (adapté à la sémantique <strong><strong>de</strong>s</strong> <strong>données</strong> ou aux<br />

transactions) et <strong>de</strong> l’adapter au système étudié.<br />

4 Vue d’ensemb<strong>le</strong> du <strong>cloud</strong> <strong>computing</strong><br />

Dans cette section, nous discutons <strong>le</strong>s aspects<br />

spécifiques au <strong>cloud</strong> <strong>de</strong>vant être pris en compte lorsqu’on<br />

y décrit un banc d’essais.<br />

De nouvel<strong>le</strong>s dimensions<br />

• Mise à l’échel<strong>le</strong>: <strong>le</strong>s <strong>cloud</strong>s ont tendance à gérer un<br />

nombre important <strong>de</strong> <strong>données</strong> en ajustant <strong>le</strong> nombre<br />

<strong>de</strong> <strong>le</strong>urs instances en fonction <strong>de</strong> cette charge. La<br />

capacité d’un SGBD à utiliser <strong>de</strong> manière effective<br />

ce nombre <strong>de</strong> ressources est ce que l’on appel<strong>le</strong> sa<br />

capacité à monter à l’échel<strong>le</strong>.<br />

• Elasticité: la capacité <strong>de</strong> monter à l’échel<strong>le</strong> caractérise<br />

<strong>le</strong> comportement d’un système en fonction<br />

du nombre d’instances qui <strong>le</strong> composent. L’élasticité<br />

caractérise la réaction du système à la variation <strong>de</strong> ce<br />

nombre d’instances lorsque <strong>le</strong> système est en cours<br />

d’exécution.<br />

• Haute disponibilité: <strong>le</strong> <strong>cloud</strong> doit fournir un haut<br />

niveau <strong>de</strong> disponibilité, étant donnée qu’ils sont<br />

hautement utilisés. La défaillance d’un nœud peut<br />

avoir <strong><strong>de</strong>s</strong> répercussions multip<strong>le</strong>s. Le <strong>cloud</strong> doit donc<br />

gérer <strong>le</strong>s défaillances et il est donc intéressant <strong>de</strong><br />

me<strong>sur</strong>er la réaction du <strong>cloud</strong> à une défaillance.<br />

De nouvel<strong>le</strong>s me<strong>sur</strong>es Même si <strong>le</strong> nombre <strong>de</strong> transactions<br />

par secon<strong>de</strong> a <strong>le</strong> mérite d’être une me<strong>sur</strong>e<br />

représentative <strong>de</strong> la qualité d’un SGBDD, il apparait que<br />

<strong>le</strong>s nouveaux systèmes ne peuvent être uniquement jugés<br />

que <strong>sur</strong> ce critère. Il s’agit d’étudier aussi <strong>le</strong> temps <strong>de</strong> latence<br />

<strong><strong>de</strong>s</strong> transactions. En effet ce point est fort important<br />

étant donnée que l’utilisateur humain est <strong>de</strong> nature impatiente<br />

et que <strong>le</strong>s moindres temps d’attente peuvent faire<br />

perdre un nombre important <strong>de</strong> clients.<br />

Typiquement, l’administrateur d’un <strong>cloud</strong> fixera une<br />

limite acceptab<strong>le</strong> <strong>de</strong> temps <strong>de</strong> latence et augmentera <strong>le</strong><br />

nombre d’instances du <strong>cloud</strong> pour pouvoir supporter <strong>le</strong><br />

nombre <strong>de</strong> transactions <strong>de</strong> l’application cliente sans que<br />

<strong>le</strong> temps <strong>de</strong> la latence n’excè<strong>de</strong> la limite fixée. Il est donc<br />

intéressant <strong>de</strong> pouvoir extraire <strong>le</strong> temps <strong>de</strong> latence lors du<br />

déploiement <strong><strong>de</strong>s</strong> tests.<br />

Le principe même du <strong>cloud</strong> est d’allouer <strong>le</strong> minimum<br />

<strong>de</strong> ressources nécessaires au bon fonctionnement <strong>de</strong><br />

l’environnement. Dans cette optique, il s’agit <strong>de</strong> proposer<br />

un SGBDD qui soit <strong>le</strong> plus économe et en espace mémoire<br />

et en usage CPU. Une nouvel<strong>le</strong> me<strong>sur</strong>e intéressante se<br />

situe donc au niveau <strong>de</strong> l’usage CPU <strong><strong>de</strong>s</strong> instances stockantes<br />

et <strong>de</strong> l’instance chargée <strong>de</strong> diviser <strong>le</strong>s requêtes et <strong>de</strong><br />

<strong>le</strong>s réunir.<br />

4<br />

5 Notre solution<br />

Dans cette section, nous proposons <strong>de</strong> nouvel<strong>le</strong>s dimensions,<br />

me<strong>sur</strong>es et tests à considérer pour <strong>de</strong> nouveaux<br />

benchmarks adaptés aux services <strong>de</strong> stockage <strong>de</strong> <strong>données</strong><br />

dédiés au <strong>cloud</strong>.<br />

5.1 Les me<strong>sur</strong>es<br />

L’outil chargé <strong>de</strong> re<strong>le</strong>ver <strong>le</strong>s me<strong>sur</strong>es <strong>de</strong>vra être capab<strong>le</strong><br />

<strong>de</strong> monitorer <strong>le</strong>s temps <strong>de</strong> latence <strong><strong>de</strong>s</strong> réponses<br />

du système, <strong>le</strong> nombre <strong>de</strong> transactions moyen qu’il<br />

est capab<strong>le</strong> d’effectuer par secon<strong>de</strong>, l’usage CPU <strong><strong>de</strong>s</strong><br />

différentes instances et l’espace mémoire qu’occupent <strong>le</strong>s<br />

<strong>données</strong> (cet espace pouvant fortement varier en fonction<br />

<strong>de</strong> la politique <strong>de</strong> réplication et <strong>de</strong> stockage <strong><strong>de</strong>s</strong> <strong>données</strong>).<br />

5.2 Les dimensions<br />

Les différents paramètres à faire varier lors du<br />

scénario <strong>de</strong> tests sont <strong>le</strong>s suivants:<br />

• la tail<strong>le</strong> <strong><strong>de</strong>s</strong> <strong>données</strong><br />

Cette dimension permet <strong>de</strong> tester la capacité du système<br />

à monter en charge en terme <strong>de</strong> <strong>données</strong> stockées. Nous<br />

proposons <strong>de</strong> lancer un banc d’essais <strong>sur</strong> une architecture<br />

donnée et un système préalab<strong>le</strong>ment chargé <strong>de</strong> <strong>données</strong>.<br />

Ensuite, il s’agira <strong>de</strong> réinitialiser l’architecture en augmentant<br />

son nombre d’instances, <strong>de</strong> charger <strong>le</strong> système<br />

<strong>de</strong> <strong>données</strong> dont <strong>le</strong> volume serait augmenté <strong>de</strong> manière<br />

proportionnel<strong>le</strong> au nombre d’instance et <strong>de</strong> ré-exécuter <strong>le</strong><br />

banc d’essais. Si <strong>le</strong> système est résistant à une montée en<br />

charge en terme <strong>de</strong> volume, <strong>le</strong>s temps <strong>de</strong> latence résultant<br />

<strong><strong>de</strong>s</strong> tests <strong>de</strong>vraient être constants. Il convient néanmoins<br />

<strong>de</strong> faire attention au facteur <strong>de</strong> réplication <strong><strong>de</strong>s</strong> <strong>données</strong> lors<br />

qu’on augmente la tail<strong>le</strong> <strong><strong>de</strong>s</strong> <strong>données</strong> <strong>de</strong> manière proportionnel<strong>le</strong>.<br />

• <strong>le</strong> nombre d’utilisateurs<br />

Le premier test permet <strong>de</strong> tester la capacité du système<br />

à monter en charge en terme d’utilisateurs attaquant la<br />

base <strong>de</strong> <strong>données</strong>. Son fonctionnement est similaire au test<br />

précédant: augmenter <strong>de</strong> manière proportionnel<strong>le</strong> <strong>le</strong> nombre<br />

d’utilisateurs et <strong>le</strong> nombre d’instances. Les temps <strong>de</strong><br />

latence résultant <strong>de</strong>vraient être constant.<br />

Le <strong>de</strong>uxième consiste à tester la performance d’un<br />

système; pour une architecture et un volume <strong>de</strong> <strong>données</strong><br />

donnés, il s’agit <strong>de</strong> lancer une série <strong>de</strong> tests en faisant<br />

varier <strong>le</strong> nombre d’utilisateurs attaquant <strong>le</strong> système. Il<br />

<strong>de</strong>vrait en résulter une série <strong>de</strong> temps <strong>de</strong> latence croissante<br />

en fonction du nombre d’utilisateurs. Ces me<strong>sur</strong>es<br />

permettront à l’administrateur système <strong>de</strong> savoir combien<br />

d’utilisateurs son architecture est capab<strong>le</strong> <strong>de</strong> traiter en<br />

<strong>de</strong>çà la borne qu’il se fixe (en terme <strong>de</strong> temps <strong>de</strong> latence).<br />

Le troisième consiste à tester l’élasticité du système.<br />

De manière similaire au test <strong>de</strong> montée en charge en


terme d’utilisateurs, ce banc d’essais consiste à faire<br />

varier <strong>le</strong> nombre d’instances et d’utilisateurs <strong>de</strong> manière<br />

dynamique. Les résultats <strong>de</strong>vraient rapporter un temps<br />

<strong>de</strong> latence constant en fonction du nombre d’instancesutilisateurs.<br />

Cet aspect dynamique implique <strong><strong>de</strong>s</strong> considérations<br />

supplémentaires. En effet, un <strong>cloud</strong> composé<br />

<strong>de</strong> N instances risque <strong>de</strong> se comporter différemment en<br />

fonction <strong>de</strong> son état précédant N − 1 ou N + 1 instances.<br />

Il s’agit dès lors <strong>de</strong> considérer une architecture dont on<br />

augmenterait <strong>le</strong> nombre d’instances puis <strong>le</strong> diminuerait.<br />

Cette diminution d’instances représente <strong>le</strong> cas concret où<br />

l’administrateur désirerait diminuer <strong>le</strong> nombre d’instances<br />

<strong>de</strong> son <strong>cloud</strong> pour faire <strong><strong>de</strong>s</strong> économies.<br />

Il faut aussi considérer <strong>le</strong> timing; quand faut-il ajouter<br />

ou soustraire une instance? Il n’y a pas <strong>de</strong> réponses<br />

établies à cette question. L’approche proposée par YCSB<br />

est <strong>de</strong> laisser <strong>le</strong> système se stabiliser (c’est-à-dire attendre<br />

que <strong>le</strong>s temps <strong>de</strong> latence du système soient constants) et<br />

seu<strong>le</strong>ment après ajouter une instance. Deux critiques peuvent<br />

être apportées <strong>sur</strong> une tel<strong>le</strong> approche. La première<br />

est la notion subjective <strong>de</strong> ce ”temps <strong>de</strong> stabilisation” qui<br />

est propre à chaque coup<strong>le</strong> (SGBD et cluster) et ne peut<br />

donc former un standard ré-applicab<strong>le</strong>.<br />

La secon<strong>de</strong> critique se base <strong>sur</strong> <strong>le</strong>s résultats <strong>de</strong> [3] qui<br />

reporte un ”temps <strong>de</strong> stabilisation” allant autour <strong><strong>de</strong>s</strong> 20<br />

min pour quelques systèmes dits élastiques (tels que cassandra<br />

par exemp<strong>le</strong>). Ce temps semb<strong>le</strong> assez long pour<br />

pouvoir être considéré comme une réponse dynamique du<br />

système.<br />

• Le facteur <strong>de</strong> réplication<br />

Faire varier <strong>le</strong> facteur <strong>de</strong> réplication peut influer tant<br />

<strong>sur</strong> <strong>le</strong> niveau <strong>de</strong> performance que <strong>sur</strong> celui <strong>de</strong> consistance.<br />

Nous proposons une solution pour étudier son influence<br />

<strong>sur</strong> <strong>le</strong> niveau <strong>de</strong> performance. Il s’agit d’effectuer, <strong>sur</strong><br />

une architecture <strong>de</strong> <strong>cloud</strong> et un volume <strong>de</strong> <strong>données</strong> fixés,<br />

un test <strong>de</strong> montée en charge en terme d’utilisateurs et <strong>de</strong><br />

réitérer ce test en faisant varier <strong>le</strong> facteur réplication <strong>de</strong><br />

chaque configuration <strong>de</strong> test. Ce facteur <strong>de</strong>vant être à<br />

l’initialisation du SGBD, il s’agit donc d’un test statique.<br />

Les résultats pourront être affichés sous forme <strong>de</strong> courbes<br />

(temps <strong>de</strong> latence en fonction <strong><strong>de</strong>s</strong> utilisateurs). Il s’agira<br />

ensuite pour l’administrateur <strong>de</strong> déterminer quel facteur<br />

lui convient <strong>le</strong> mieux. En conservant à l’esprit que ce facteur<br />

<strong>de</strong>vrait être supérieur à 3 pour préserver l’intégrité<br />

<strong><strong>de</strong>s</strong> <strong>données</strong> [6].<br />

5.3 Architecture<br />

Cette section décrit <strong>le</strong> schéma, l’architecture typique<br />

d’un client 3 favorisant la mise en place d’un banc d’essais<br />

décrit par <strong><strong>de</strong>s</strong> aspects sémantiques et fonctionnels.<br />

3 Nous utilisons <strong>le</strong> terme <strong>de</strong> client pour définir l’application chargée<br />

d’effectuer <strong>le</strong>s tests et <strong>de</strong> récolter <strong>le</strong>s me<strong>sur</strong>es <strong>de</strong> ces tests.<br />

5<br />

La figure 1 représente une tel<strong>le</strong> architecture. El<strong>le</strong> est<br />

composée <strong>de</strong> 6 éléments: un générateur <strong>de</strong> paramètres<br />

aléatoires, un modu<strong>le</strong> représentant <strong>le</strong>s requêtes liées au<br />

standard <strong>de</strong> banc d’essais (ici TPC-C), un interpréteur <strong>de</strong><br />

requêtes chargé <strong>de</strong> lier <strong>le</strong>s paramètres aux requêtes et <strong>de</strong><br />

<strong>le</strong>s distribuer <strong>sur</strong> la couche suivante: la couche base <strong>de</strong><br />

<strong>données</strong> qui sert d’interface entre <strong>le</strong> client et <strong>le</strong> SGBD, un<br />

modu<strong>le</strong> chargé <strong>de</strong> définir <strong>le</strong>s paramètres qui définiront <strong>le</strong>s<br />

tests (nombre d’utilisateurs, tail<strong>le</strong> <strong>de</strong> la base <strong>de</strong> <strong>données</strong>,<br />

etc.) et <strong>le</strong> modu<strong>le</strong> statistique chargé <strong>de</strong> récolter <strong>le</strong>s statistiques<br />

<strong>sur</strong> <strong>le</strong>s tests (temps <strong>de</strong> latence, nombre <strong>de</strong> transactions<br />

par secon<strong>de</strong>).<br />

Génération <strong><strong>de</strong>s</strong> paramètres Lors <strong>de</strong> la génération <strong>de</strong><br />

test, afin <strong>de</strong> pouvoir reproduire <strong>le</strong>s tests, il s’agit <strong>de</strong> pouvoir<br />

générer <strong>le</strong>s <strong>données</strong> et <strong><strong>de</strong>s</strong> paramètres <strong><strong>de</strong>s</strong> transactions<br />

<strong>de</strong> manière reproductib<strong>le</strong>. Notre architecture contient<br />

donc une couche génératrice <strong>de</strong> paramètres qui<br />

produira <strong><strong>de</strong>s</strong> va<strong>le</strong>urs pseudo-aléatoires (c’est-à-dire <strong><strong>de</strong>s</strong><br />

va<strong>le</strong>urs aléatoires pouvant être reproduites aisément). Le<br />

travail <strong>de</strong> cette couche n’est soumis à aucune me<strong>sur</strong>e <strong>de</strong><br />

performance.<br />

Générateur <strong>de</strong> requêtes Ce modu<strong>le</strong> connait la<br />

sémantique <strong><strong>de</strong>s</strong> <strong>données</strong> et <strong>le</strong>s requêtes décrites par <strong>le</strong><br />

standard <strong>de</strong> test. Par exemp<strong>le</strong>, pour TPC-C, ce modu<strong>le</strong><br />

aura connaissance <strong><strong>de</strong>s</strong> définitions <strong>de</strong> chaque attribut<br />

formant <strong>le</strong>s entités et <strong><strong>de</strong>s</strong> 5 différentes requêtes et <strong>le</strong>s<br />

communiquera à l’interpréteur <strong>de</strong> requêtes. Ce modu<strong>le</strong><br />

n’a pas une fonction très élaborée toute fois nous l’isolons<br />

<strong>de</strong> manière symbolique. Il représente <strong>le</strong> standard <strong>de</strong> banc<br />

d’essais que l’on désire déployer. Ce modu<strong>le</strong> ne sera pas<br />

monitoré, aucune me<strong>sur</strong>e n’en sera tirée.<br />

Interpréteur <strong>de</strong> requêtes Qu’el<strong>le</strong>s soient <strong><strong>de</strong>s</strong> requêtes<br />

<strong>de</strong> chargement <strong>de</strong> <strong>données</strong> ou <strong><strong>de</strong>s</strong> requêtes formant <strong>le</strong>s<br />

transactions, <strong>le</strong>s requêtes décrites par <strong>le</strong> benchmark (typiquement<br />

en langage SQL) doivent être interprétées et<br />

transformées en requêtes spécifiques. Cette couche est<br />

la première à avoir connaissance <strong>de</strong> l’architecture <strong>de</strong> la<br />

BDD. L’interprétation se fait en <strong>de</strong>ux phases:<br />

Figure 1: Architecture du client.


• la couche insère <strong>le</strong>s paramètres dans la requêtes SQL.<br />

• la couche analyse la requête et la distribue en<br />

requêtes interprétab<strong>le</strong>s par la couche inférieure. La<br />

couche d’interprétation est la première à avoir conscience<br />

<strong>de</strong> l’architecture <strong><strong>de</strong>s</strong> <strong>données</strong> <strong>sur</strong> <strong>le</strong> SGBDD.<br />

A ce titre, el<strong>le</strong> sait quel<strong>le</strong> entité stockante el<strong>le</strong> doit atteindre<br />

4 . Une simp<strong>le</strong> requête pourra être distribuée<br />

<strong>sur</strong> plusieurs sous-requêtes.<br />

Les requêtes faisant intervenir <strong><strong>de</strong>s</strong> jointures en SQL ne<br />

sont pas possib<strong>le</strong>s via une interface CRUD. Pour effectuer<br />

<strong>de</strong> tel<strong>le</strong>s requêtes l’interpréteur <strong>de</strong> <strong>données</strong> <strong>de</strong>vra<br />

être capab<strong>le</strong> <strong>de</strong> recevoir <strong><strong>de</strong>s</strong> <strong>données</strong> <strong>de</strong> la couche<br />

inférieure (la couche base <strong>de</strong> <strong>données</strong>), <strong>le</strong>s interpréter pour<br />

<strong>le</strong>s réinjecter dans <strong>de</strong> nouvel<strong>le</strong>s requêtes. Toute opération<br />

<strong>de</strong> Map/Reduce sera effectuée par ce modu<strong>le</strong>. Le travail<br />

<strong>de</strong> ce modu<strong>le</strong> est à estimer; Si el<strong>le</strong> n’influence aucunement<br />

<strong>le</strong>s temps <strong>de</strong> latence, la phase <strong>de</strong> redirection <strong><strong>de</strong>s</strong> transactions<br />

et <strong>de</strong> réduction <strong><strong>de</strong>s</strong> différents résultats pourrait se<br />

révé<strong>le</strong>r couteuse en terme <strong>de</strong> calcul. Il s’agit donc <strong>de</strong> monitorer<br />

l’usage CPU d’un tel modu<strong>le</strong>.<br />

Le modu<strong>le</strong> paramètres Ce modu<strong>le</strong> récoltera <strong>le</strong>s<br />

différentes dimensions voulues par l’utilisateur et <strong>le</strong>s<br />

répercutera <strong>sur</strong> <strong>le</strong>s tests. Ces différentes dimensions<br />

sont par exemp<strong>le</strong>, <strong>le</strong> nombre d’utilisateurs attaquant <strong>le</strong><br />

SGBDD, <strong>le</strong> nombre <strong>de</strong> transactions à la secon<strong>de</strong> effectuées<br />

par ces clients, la tail<strong>le</strong> <strong>de</strong> la base <strong>de</strong> <strong>données</strong><br />

à charger et la fréquence <strong>de</strong> chaque transaction 5 . Ce modu<strong>le</strong><br />

est un modu<strong>le</strong> symbolique, il permet <strong>de</strong> bien distinguer<br />

<strong>le</strong>s différents tests formant <strong>le</strong> banc d’essai. Il n’y a donc<br />

aucune me<strong>sur</strong>e à récolter <strong>de</strong> ce modu<strong>le</strong>.<br />

la couche base <strong>de</strong> <strong>données</strong> Le client se compose d’une<br />

interface capab<strong>le</strong> <strong>de</strong> communiquer avec <strong>le</strong> SGBD. Il est en<br />

charge <strong>de</strong> l’ interroger et <strong>de</strong> récolter <strong>le</strong>s me<strong>sur</strong>es définies<br />

plus haut. C’est à ce niveau qu’il s’agira <strong>de</strong> prendre <strong>le</strong>s<br />

me<strong>sur</strong>es correspondant aux temps <strong>de</strong> latence du SGBD et<br />

du nombre <strong>de</strong> transactions qu’il est capab<strong>le</strong> d’effectuer par<br />

secon<strong>de</strong>.<br />

La modu<strong>le</strong> statistique Ce modu<strong>le</strong> est en charge <strong>de</strong><br />

récolter <strong>le</strong>s me<strong>sur</strong>es <strong>sur</strong> <strong>le</strong>s tests c’est-à-dire <strong>le</strong> nombre <strong>de</strong><br />

transactions par secon<strong>de</strong>, <strong>le</strong>s temps <strong>de</strong> latence pour chaque<br />

transaction et l’usage CPU <strong>de</strong> chaque instance composant<br />

<strong>le</strong> <strong>cloud</strong>.<br />

6 Nos tests<br />

Cette section illustre <strong>le</strong>s essais que nous avons effectués<br />

dans <strong>le</strong> but d’étudier la mise en place d’un tel banc<br />

4 Quel<strong>le</strong> tab<strong>le</strong> el<strong>le</strong> doit atteindre si <strong>le</strong> SGDB est un système SQL,<br />

quel<strong>le</strong> columnFamily si il sagit <strong>de</strong> cassandra<br />

5 La fréquence <strong>de</strong> chaque transaction est une chose fixée par <strong><strong>de</strong>s</strong><br />

standards tels que TPC-C et peut dès lors être remontée à la couche<br />

Générateur <strong>de</strong> requêtes pour <strong>de</strong> tels standards.<br />

6<br />

d’essais. À ce titre, nous concédons que <strong>le</strong>s résultats exposés<br />

peuvent semb<strong>le</strong>r faib<strong>le</strong>s mais <strong>le</strong> but <strong>de</strong> ce travail<br />

consiste plus à la proposition d’adaptation <strong>de</strong> standards<br />

et la mise en place d’un outil facilitant <strong>le</strong> déploiement <strong>de</strong><br />

bancs d’essais qu’à étudier un système particulier.<br />

6.1 Mise en situation<br />

Sur un cluster composé <strong>de</strong> 4 nœuds, nous déployons<br />

Cassandra[4]. Sur une architecture fixe 6 , nous chargeons<br />

trois différents volumes <strong>de</strong> <strong>données</strong> (répondant aux<br />

normes <strong>de</strong> TPC-C). Pour chacun <strong>de</strong> ces volumes, nous effectuons<br />

3 tests simulant <strong>le</strong>s cinq transactions TPC-C qui<br />

différent en considérant <strong>le</strong> nombre d’utilisateurs attaquant<br />

<strong>le</strong> SGBD.<br />

Pour simu<strong>le</strong>r une charge <strong><strong>de</strong>s</strong> utilisateurs, nous simulons<br />

trois différents nombres d’utilisateurs attaquant <strong>de</strong><br />

manière concurrentiel<strong>le</strong> <strong>le</strong> système <strong>sur</strong> 1000 transactions.<br />

Aucune borne n’est donnée pour <strong>le</strong>s utilisateurs, ils effectuent<br />

autant <strong>de</strong> transactions que <strong>le</strong> SGBD <strong>le</strong> permet à<br />

la secon<strong>de</strong>. En faisant varier <strong>le</strong> nombre d’attaquants 50,<br />

100 et 200, on obtient donc 50.000, 10.000 et 200.000<br />

transactions effectuées.<br />

6.2 Modélisation<br />

Modélisation <strong><strong>de</strong>s</strong> <strong>données</strong> Les <strong>données</strong> simu<strong>le</strong>nt 5 entrepôts<br />

(tels que définis par TPC-C) entraînant environ<br />

2, 610 6<br />

entrées (soit 4GB <strong>de</strong> <strong>données</strong> réplicats compris).<br />

Nous modélisons <strong>le</strong>s <strong>données</strong> en fonction du schéma<br />

relationnel et <strong>de</strong> la sémantique décrite dans TPC-C<br />

(première modélisation décrite dans la section 3.2).<br />

6.3 Prise <strong>de</strong> me<strong>sur</strong>e<br />

La principa<strong>le</strong> application chargée <strong>de</strong> prendre <strong>le</strong>s<br />

me<strong>sur</strong>es est une extension <strong>de</strong> YCSB. YCSB assume<br />

<strong>le</strong>s modu<strong>le</strong>s paramètres, statistiques et db client. Le<br />

générateur <strong>de</strong> paramètres est un simp<strong>le</strong> objet java capab<strong>le</strong><br />

<strong>de</strong> générer <strong>le</strong>s paramètres <strong>de</strong> manière pseudo-aléatoire<br />

et correspondant aux critères définis par TPC-C.<br />

Les modu<strong>le</strong>s TPC-C requêtes et Interpréteur <strong>de</strong><br />

requêtes ne se distinguent pas. En effet, l’interpréteur <strong>de</strong><br />

requêtes est non seu<strong>le</strong>ment dépendant du benchmark mais<br />

aussi <strong>de</strong> l’architecture <strong>de</strong> la structure stockant <strong>le</strong>s <strong>données</strong>;<br />

ceci entrainant une gran<strong>de</strong> difficulté, voire l’impossibilité<br />

<strong>de</strong> formaliser cet interpréteur. Dans ce travail, nous avons<br />

donc regroupé <strong>le</strong>s <strong>de</strong>ux composants en un seul. Ce composant<br />

appel<strong>le</strong> <strong>le</strong> générateur <strong>de</strong> paramètres et <strong>le</strong>s introduit<br />

dans <strong>le</strong>s requêtes TPC-C traduites No-SQL et interroge <strong>le</strong><br />

DB client.<br />

Le DB client est une interface Java utilisant l’API<br />

thrift <strong>de</strong> Cassandra [5] et implémentant <strong>le</strong>s fonction<br />

CRUD.<br />

6 La configuration <strong>de</strong> Cassandra est la configuration <strong>de</strong> base proposée<br />

dans [6] à l’exception que <strong>le</strong> dossiers <strong>de</strong> log sont <strong>sur</strong> <strong><strong>de</strong>s</strong> disques dédiés


6.4 Résultats et analyse<br />

La figure 2 illustre <strong>le</strong>s temps <strong>de</strong> latence du SGBD<br />

supportant une montée en charge en terme d’utilisateurs.<br />

Un tel graphe permet à l’administrateur du système<br />

<strong>de</strong> connaître <strong>le</strong>s limites <strong>de</strong> son application en terme<br />

d’utilisateurs et <strong>de</strong> savoir à partir <strong>de</strong> quel<strong>le</strong> charge, il sera<br />

nécessaire <strong>de</strong> repenser l’architecture (comme rajouter une<br />

nouvel<strong>le</strong> instance).<br />

Figure 2: Montée en charge en terme d’utilisateurs<br />

7 Conclusion<br />

Dans ce travail, nous avons donc proposé une<br />

méthodologie pour exporter <strong>le</strong>s standards <strong>de</strong> benchmark<br />

à toute solution <strong>de</strong> SGBD. A la <strong>le</strong>cture <strong>de</strong> cet artic<strong>le</strong>, on<br />

se rend compte que la démarche n’est pas dénouée <strong>de</strong> sens<br />

mais reste très sensib<strong>le</strong> et diffici<strong>le</strong> à mettre en place.<br />

Une démarche qui a du sens. Oui, tout SGBD<br />

stocke <strong><strong>de</strong>s</strong> <strong>données</strong> auxquel<strong>le</strong>s on peut accé<strong>de</strong>r moyennant<br />

quelque temps <strong>de</strong> latence. A ce titre, on peut effectivement<br />

<strong>le</strong>s comparer.<br />

Un démarche sensib<strong>le</strong> à la critique! Les récents<br />

SGBD (notamment <strong>le</strong>s NoSQL) ouvrent <strong>de</strong> nouveaux<br />

chantiers qui ne sont pas explorés par <strong>le</strong>s benchmark (et<br />

en ferment certains). On voit par exemp<strong>le</strong> qu’une idée<br />

populaire dans <strong>le</strong>s systèmes NoSQL est <strong>de</strong> laisser la consistance<br />

<strong><strong>de</strong>s</strong> <strong>données</strong> se dégra<strong>de</strong>r pour une amélioration<br />

<strong>de</strong> la disponibilité. Or <strong>le</strong>s standards <strong>de</strong> benchmark ne proposent<br />

pas <strong>de</strong> tels relâchements <strong>de</strong> la consistance et ne<br />

permettent donc pas <strong>de</strong> profiter <strong><strong>de</strong>s</strong> avantages certains <strong>de</strong><br />

ces démarches.<br />

Une démarche diffici<strong>le</strong> à mettre en place. Mettre en<br />

place un benchmark qui serait adapté à tout SGBD est une<br />

tâche trop comp<strong>le</strong>xe voire impossib<strong>le</strong>:<br />

• Les a<strong>de</strong>ptes <strong><strong>de</strong>s</strong> SGBDRs traditionnels n’acceptent<br />

pas l’abandon <strong>de</strong> la notion <strong>de</strong> transactions or cette<br />

fonction bien souvent omise dans <strong>le</strong>s nouveaux<br />

SGBDs ne peut être mise en place par l’ application<br />

<strong>de</strong> benchmark.<br />

7<br />

• Tous <strong>le</strong>s SGBDRs traditionnels sont fort similaires.<br />

Pour être <strong>le</strong>s plus performants à un benchmark, <strong>le</strong>s<br />

responsab<strong>le</strong>s du SGBD peuvent adapter quelques<br />

paramètres divers, mais la nature, la sémantique <strong><strong>de</strong>s</strong><br />

<strong>données</strong> et transactions restent communes pour tous<br />

<strong>le</strong>s systèmes. Cette règ<strong>le</strong> ne peut être respectée<br />

pour <strong>le</strong>s nouveaux systèmes plus exotiques. De par<br />

cette subjectivité, on ne peut donc plus as<strong>sur</strong>er qu’un<br />

benchmark représente effectivement une application<br />

<strong>de</strong> la vie réel<strong>le</strong>.<br />

Nous remarquons aussi que la démarche voulue par<br />

<strong>le</strong>s nouveaux SGBDs est d’être la plus simp<strong>le</strong> possib<strong>le</strong><br />

(<strong>le</strong>ur performance s’en trouvant augmentée) et <strong>de</strong><br />

déléguer toute opération <strong>sur</strong> <strong>le</strong>s <strong>données</strong> à <strong><strong>de</strong>s</strong> couches<br />

supérieures. Á ce titre, <strong>de</strong> manière similaire à [3],<br />

nous pensons qu’il est intéressant <strong>de</strong> connaître <strong>le</strong>s performances<br />

pures du SGBD c’est-à-dire <strong>le</strong>s opérations<br />

CRUD. La démarche suivante, indépendante <strong>de</strong> cel<strong>le</strong>-ci,<br />

est d’étudier <strong>le</strong>s systèmes (<strong>de</strong> Map/Reduce) par exemp<strong>le</strong>)<br />

permettant <strong>de</strong> traiter <strong>de</strong> manière plus comp<strong>le</strong>xe <strong>le</strong>s<br />

<strong>données</strong>.<br />

Enfin, une <strong>de</strong>rnière critique reste à faire <strong>sur</strong> la manière<br />

dont un benchmark peut traiter <strong>le</strong> problème <strong>de</strong> l’élasticité<br />

d’un SGBD. Cette question reste ouverte. En effet, il<br />

s’agit <strong>de</strong> considérer <strong>de</strong>ux aspects:<br />

• <strong>le</strong> temps <strong>de</strong> stabilisation, c’est-à-dire <strong>le</strong> temps que<br />

prend <strong>le</strong> système à se stabiliser lorsqu’on rajoute ou<br />

retire une instance à la volée.<br />

• Le second aspect est d’analyser la manière dont <strong>le</strong><br />

système réagit une fois <strong>le</strong> système stabilisé.<br />

Á notre connaissance, aucune étu<strong>de</strong> ne distingue ces<br />

<strong>de</strong>ux aspects. Certaines ten<strong>de</strong>nt à oublier <strong>le</strong> temps <strong>de</strong> stabilisation<br />

à l’ai<strong>de</strong> d’outils statistiques, d’autres ten<strong>de</strong>nt <strong>le</strong><br />

négliger tout simp<strong>le</strong>ment.<br />

Dans <strong><strong>de</strong>s</strong> travaux futurs, nous tenterons d’ iso<strong>le</strong>r ces<br />

<strong>de</strong>ux composants et <strong>le</strong>s étudier indépendamment. En<br />

réduisant nos tests aux opérations CRUD, nous espérons<br />

pouvoir détacher <strong>le</strong>s nouveaux concepts introduits par <strong>le</strong>s<br />

nouveaux SGBDs tels que <strong>le</strong> <strong>de</strong>gré <strong>de</strong> consistance, la<br />

métho<strong>de</strong> <strong>de</strong> stockage et <strong>de</strong> réplication <strong>sur</strong> l’élasticité (en<br />

isolant chaque paramètre).<br />

References<br />

[1] Amazon - page d’accueil. http://www.amazon.<br />

com, consulté <strong>le</strong> 12 décembre 2010.<br />

[2] Apache Cassandra - page d’accueil. http:<br />

//cassandra.apache.org, consulté <strong>le</strong> 12<br />

décembre 2010.


[3] Apache Cassandra - Wiki, API. http://wiki.<br />

apache.org/cassandra/API, consulté <strong>le</strong> 15<br />

décembre 2010.<br />

[4] Apache Cassandra - Wiki, Getting Started.<br />

http://wiki.apache.org/cassandra/<br />

GettingStarted, consulté <strong>le</strong> 15 décembre 2010.<br />

[5] D. Abadi. Prob<strong>le</strong>ms with CAP, and Yahoo’s<br />

Litt<strong>le</strong> Known NoSQL System. http:<br />

//www.massivedatanews.com/content/<br />

prob<strong>le</strong>ms-cap-and-yahoos-litt<strong>le</strong>-known-nosql-system,<br />

consulté <strong>le</strong> 15 décembre 2010.<br />

[6] E. Tam R. Ramakrishnan et R. Sears B F Cooper,<br />

A. Silberstein. Benchmarking Cloud Serving systems<br />

with ycsb. In SoCC ’10: Proceedings of the 1st ACM<br />

Symposium on Cloud Computing, page <strong>de</strong> 143 à 154,<br />

2010.<br />

8


B.4.2 L’entrée dans <strong>le</strong> blog d’ Euranova<br />

Ci <strong><strong>de</strong>s</strong>sous, vous trouverez une retranscription d’un entrée dans <strong>le</strong> blog du département<br />

Recherche et Développement d’ Euranova. C’est une entrée que j’ai écrite lors <strong>de</strong> mon stage<br />

et qui a été relue et publiée par <strong>le</strong> directeur du département : Sabri Skhiri :<br />

99


The R&D director’s blog<br />

Euranova R&D blog<br />

Data storage elasticity – quick view on master thesis<br />

work (part 2)<br />

April 18, 2011, 1:10 pm<br />

In this second part I welcome Nicolas Degroodt who explains how he has exten<strong>de</strong>d<br />

the YCSB for imp<strong>le</strong>menting TPC-C benchmark for NoSQL. In this post we call DBMS<br />

a storage framework whether it is RDBMS or a NoSQL.<br />

When <strong>de</strong>aling with new DBMS in a <strong>cloud</strong> environment, traditional benchmarks (like<br />

TPC-C [1]) need to be re-<strong><strong>de</strong>s</strong>igned. First of all, the semantic of their queries is too<br />

rigid and cannot fit, as they are <strong>de</strong>fined, with a NoSQL system. For examp<strong>le</strong>, a keyvalue<br />

store cannot execute immediately a GROUP BY SQL statement. These queries<br />

need to be translated regarding to the tested storage.<br />

Secondly, their data-schemas are oriented and <strong><strong>de</strong>s</strong>igned for relational data<strong>bases</strong>.<br />

Storing data, as they are <strong><strong>de</strong>s</strong>cribed by TPC, in a non-relational data<strong>bases</strong> would be<br />

weak in terms of performance. The data-schema needs to be mo<strong>de</strong><strong>le</strong>d by taking<br />

into account the un<strong>de</strong>rlying DBMS, its in<strong>de</strong>xation schema, its data sharding policy,<br />

etc.<br />

We proposed to adapt the TPC-C to these new DBMS and to study the related<br />

issues. We proposed to <strong><strong>de</strong>s</strong>cribe a new benchmark, TPC-C like, which <strong>de</strong>fines data<br />

and queries as functional values (instead of semantic fields).<br />

On the other hand, Yahoo Cloud Serving Benchmark (YCSB) proposes a framework<br />

[2] and a common set of workloads for evaluating the performance the performance<br />

of different key-value and <strong>cloud</strong> serving stores. Their approach consists of testing<br />

DBMS consi<strong>de</strong>ring only their common basic functions (i.e. put, get, <strong>de</strong><strong>le</strong>te<br />

operation).


The Yahoo! Cloud Serving Benchmark<br />

The modular architecture of YCSB (see figure above from [3]) is very powerful and<br />

easy to configure, for instance, scenari are <strong>de</strong>fined by in-line parameters such as<br />

number of clients, etc. We adapted this architecture to meet our requirements: (1)<br />

we ad<strong>de</strong>d a pseudo-random data generator modu<strong>le</strong> for producing not only data but<br />

also parameters for TPC-C transactions, and (2) we ad<strong>de</strong>d a queries generator<br />

modu<strong>le</strong> which produces queries for putting data into the data base (according to<br />

the data schema) and for attacking the DBMS (according to its syntax).<br />

The adaptation to the TPC-C<br />

benchmark.<br />

We tested successfully this adapted framework in the Euranova lab on Cassandra<br />

0.5 <strong>de</strong>ployed on a 4-no<strong><strong>de</strong>s</strong> cluster. For testing another DBMS, we need to adapt the<br />

Queries Generator and the DB Interface Layer modu<strong>le</strong>s. In our next work, we will<br />

continue to <strong>de</strong>al with YCSB and focusing on the elasticity aspects ( <strong>de</strong>finition,<br />

criteria and test scenario).<br />

References:<br />

[1] Transaction Processing Performance Council: http://www.tpc.org/<br />

[2] YCSB Application, https://github.com/brianfrankcooper/YCSB<br />

[3] YCSB Artic<strong>le</strong>, http://research.yahoo.com/fi<strong>le</strong>s/ycsb.pdf<br />

Category: NoSQL | Comment (RSS) | Trackback

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

Saved successfully!

Ooh no, something went wrong!