• Aucun résultat trouvé

2.2 Les protocoles de cohérence

2.2.4 Quorum en trapèze

Ce protocole organise de manière logique les répliques des données dans un trapèze de hauteur (h+1) [20]. Le trapèze contienth+1 niveaux et le niveaulcontientsl =al+b répliques pour 0≤lh, avec :

a est un nombre entier positif ou nul ;

b est nombre entier strictement positif.

Avec ce protocole, les quorums d’écriture et de lecture sont définis comme suit pour garantir les cohérences des opérations d’écriture et de lecture :

Quorum d’écriture : Un quorum d’écriture est obtenu en sélectionnant une majorité des répliques se trouvant au niveau l = 0 et w répliques dans chaque niveau restant (c’est-à-dire du niveau l = 1 jusqu’au niveau l = h). Le paramètre w est un nombre entier choisi arbitrairement compris entre 1 ets1 (1≤ws1). Il correspond au nombre minimum de répliques qui doivent-être écrites au niveau l (pour 1 ≤lh) lors d’une opération d’écriture pour que cette dernière puisse être validée.

Quorum de lecture : Un quorum de lecture est formé soit à partir d’une majorité des répliques résidant au niveaul = 0, soit à partir de slw+ 1 répliques résidant au niveaul (1≤lh).

La probabilité de trouver une majorité au niveau l = 0 est égale à Φ(b2bc+ 1, s0) et la probabilité de trouver au moinswrépliques au niveau l (pour 1≤lh) est égale à Φ(w, sl). Par conséquent, la disponibilité en écriture peut être exprimé comme suit :

Pwrite = Φ(bb

2c+ 1, s0

l=h

Y

l=1

Φ(w, sl) (2.17)

De façon similaire, la probabilité de trouver au moins slw+ 1 répliques au niveau l (pour 1≤lh) est égale àPl= Φ(slw+ 1, sl). Une opération de lecture ne peut pas être validée si le protocole ne trouve pas une majorité au niveau l = 0 et que tous les niveaux restant disposent chacun de moins de slw+ 1 répliques disponibles. Ainsi, la probabilité pour qu’une opération de lecture ne puisse pas être validée est égale à

Ql=h

l=0(1−Pl) avec P0 = Φ(bb2c+ 1, s0). Par conséquent, la disponibilité en lecture est égale à :

Pread = 1−

l=h

Y

l=0

(1−Pl) (2.18)

La figure 2.5 représente un exemple de trapèze de paramètres sl = 2l+ 3, a = 2, b = 3 et h = 2. La valeur du paramètre w est fixée à 3. Dans cet exemple, selon la définition ci-dessus, un quorum d’écriture est un ensemble de 2 répliques (une majorité) au niveau l = 0, w = 3 répliques au niveau l = 1 et w = 3 répliques au niveau l = 2.

Ainsi, l’ensemble de répliques{r1, r3, r5, r7, r8, r9, r12, r14} constitue un quorum d’écriture. Un quorum de lecture est un ensemble constitué de 2 répliques au niveau l = 0 ou 3 (= s1w+ 1) répliques au niveau l = 1 ou 5 (= s2w+ 1) répliques au niveau l = 2. Donc, les deux répliques {r2, r3} forment un quorum de lecture en utilisant ce protocole.

2.3. Synthèse 62

Figure 2.5 – Exemple de quorums en trapèze : a= 2, b = 3, h= 2 et w= 3

2.3 Synthèse

Nous avons présenté dans ce chapitre les différents modèles de cohérence dans un système de stockage distribué. Deux grandes catégories d’approches s’opposent. D’une part, les approches pessimistes, qui s’assurent d’abord que les répliques soient synchro-nisées avant d’autoriser les accès. La propagation des mises à jour de toutes les répliques d’une donnée est effectuée simultanément. Ces approches garantissent la cohérence des répliques des données et supportent ainsi les applications critiques. En contrepartie, la durée des mises à jour pourrait être relativement longue selon la performance de l’infrastructure utilisée. D’autre part, les approches optimistes propagent leur mises à jour en arrière-plan et découvrent éventuellement les conflits après qu’ils se soient produits. Elles autorisent aux utilisateurs l’accès à n’importe quelle réplique et à tout moment, en se basant sur l’hypothèse optimiste selon laquelle les conflits lors des mises à jour sont rares. Ces approches permettent d’améliorer la performance des opérations de mises à jour et de lecture. Par contre, elles ne peuvent pas garantir à tout moment la cohérence des données. Ainsi, la principale différence entre les approches optimistes et celles pessimistes réside sur la manière dont les mises à jour sont traitées. Nous avons vu également une autre classification des modèles de cohérence qui consiste à distinguer les modèles de cohérence centrés sur les données et ceux centrés sur le client. Les modèles centrés sur les données considèrent le fait que les données sont partagées entre plusieurs utilisateurs alors que les modèles centrés sur le client se basent sur la cohérence vis-à-vis d’un client individuel.

Nos travaux de thèse ont pour but de garantir la cohérence des répliques de données stockées dans CloViS avec un code correcteur (n, k) comme technique de distribution des données. Dans ce contexte, une opération de lecture doit trouver au moins k répliques à jour pour retrouver la donnée originale. Ainsi, une cohérence stricte entre au moins k répliques d’une donnée est nécessaire. Dans CloViS, nous avons choisi d’utiliser les

protocoles à base des quorums. Ces protocoles ayant été conçus dans le contexte de réplication totale, nous avons besoin de les adapter dans notre contexte et d’étudier leurs performances respectives. C’est ce que nous allons présenter dans le prochain chapitre.

Chapitre 3

Gestion de la cohérence des données dans CloViS

Sommaire

3.1 Contexte . . . . 65 3.2 Quorum majoritaire général . . . . 70 3.2.1 Définition . . . 70 3.2.2 Disponibilité en écriture . . . 70 3.2.3 Disponibilité en lecture . . . 71 3.2.4 Nombre moyen de messages échangés . . . 72 3.3 Quorum en grille général . . . . 73 3.3.1 Définition . . . 73 3.3.2 Disponibilité en écriture . . . 75 3.3.3 Disponibilité en lecture . . . 76 3.3.4 Nombre moyen de messages échangés . . . 80 3.4 Quorum en arbre général . . . . 84 3.4.1 Définition . . . 84 3.4.2 Disponibilité en écriture . . . 86 3.4.3 Disponibilité en lecture . . . 86 3.4.4 Nombre moyen de messages échangés . . . 90 3.5 Quorum en trapèze général . . . . 94 3.5.1 Définition . . . 94 3.5.2 Disponibilité en écriture . . . 95 3.5.3 Disponibilité en lecture . . . 96 3.5.4 Nombre moyen de messages échangés . . . 99 3.6 Algorithmes d’écriture et de lecture . . . . 104

64

3.7 Évaluations numériques . . . . 107 3.7.1 Analyse théorique . . . 107 Disponibilité en écriture . . . 109 Disponibilité en lecture . . . 112 Nombre moyen de messages échangés pour l’opération d’écriture114 Nombre moyen de messages échangés pour l’opération de lecture116 Synthèse . . . 118 3.7.2 Analyse de performances dans un environnement réel . . . . 119 Le système de fichiers de CloViS : CloViSFS . . . 119 Analyse réelle sur des charges simulées avec IOzone . . . 120 Synthèse . . . 123

3.1 Contexte

D

ans un environnement de stockage distribué, la solution naturelle pour améliorer la disponibilité et la fiabilité des données est le protocole de réplication totale.

Cette technique de distribution des données permet d’obtenir la plus grande dis-ponibilité possible mais entraîne une utilisation excessive des ressources système. Cette solution ne constitue pas une solution viable car l’un des défis d’un système de stockage distribué tel que CLoViS c’est de réduire l’utilisation des ressources système tout en gardant une disponibilité et une fiabilité élevées des données. Pour cela, CloViS permet l’utilisation de plusieurs techniques de distribution des données afin de pouvoir définir plusieurs niveaux de qualité de service en termes de stockage. Le choix de ces techniques de distribution des données est basé sur le(s) critère(s) prioritaire(s) aux yeux des utili-sateurs tels que la fiabilité des opérations d’entrée/sortie, la disponibilité des données, la tolérance aux pannes, la performance, etc. Cependant l’utilisation des techniques de distribution des données nécessite un mécanisme de contrôle de la concurrence des accès aux données et un protocole de gestion de la cohérence des données (appelé souvent protocole de réplication dans le contexte de réplication des données). Le contrôle de la concurrence a été traité par Aurélien Ortiz dans le cadre de sa thèse effectuée au sein du laboratoire IRIT [10, 75]. Nos travaux, présentés dans ce manuscrit, traitent de la gestion de la cohérence des répliques des objets répartis dans les différentes ressources de stockage de CloViS.

De nombreux travaux ont été publiés dans la littérature sur la gestion des répliques des données dans le contexte de réplication totale. Quelques exemples non exhaustifs ont été donnés dans le chapitre 2 de la partie II. Mais ces protocoles ne sont pas adaptés aux autres techniques de distribution des données telles que le RAID, les schémas à seuil et les codes correcteurs. En effet ces protocoles de maintien de la cohérence, dans le cadre de réplication totale, ne garantissent qu’une seule réplique avec une bonne version lors

3.1. Contexte 66 d’une opération de lecture alors que plusieurs répliques à jour sont souvent requises dans les autres techniques de distribution des données. Par exemple, avec un code correcteur de type (n, k) (avec 1 ≤kn),k répliques sont requises pour pouvoir reconstruire les données originales. Ainsi, nous avons décidé d’adapter ces protocoles de maintien de la cohérence pour supporter ces différentes techniques de distribution des données. Le nombre de répliques à jour exigées lors d’une opération de lecture va être paramétrable avec ces protocoles adaptés et peut aller de 1 jusqu’à n (nombre total de répliques utilisées pour stocker une donnée). Ensuite, nous analysons ces nouveaux protocoles afin de mettre en exergue leurs points forts et leurs points faibles respectifs. Les résultats de ces analyses constituent une aide à la décision au sein de CloViS pour le choix d’un protocole de maintien de la cohérence selon les critères de performance souhaités par les utilisateurs. Avec ces protocoles, plusieurs critères de performance peuvent être définis au sein de CloViS tels que la disponibilité des données, l’utilisation des ressources système, le nombre de messages échangés durant les opérations d’entrée/sortie, etc.

Dans le reste de ce manuscrit, nous allons adopter les notations suivantes :

+ t : dénote la disponibilité des nœuds, c’est-à-dire la probabilité qu’un nœud donné dans le système soit disponible ;

+ n : dénote le nombre total de blocs utilisés pour stocker une donnée ;

+ Pwrite : représente la disponibilité en écriture, c’est à dire la probabilité que l’opé-ration d’écriture d’une donnée dans le système réussisse ;

+ Pread : représente la disponibilité en lecture, c’est à dire la probabilité pour qu’une opération de lecture d’une donnée depuis le système réussisse ;

+ Nwrite : représente le nombre moyen de messages échangés durant une opération d’écriture ;

+ Nread : représente le nombre moyen de messages échangés durant une opération de lecture.

Sans perte de généralité, pour l’évaluation de la disponibilité des opérations d’écriture et de lecture et le calcul du nombre moyen de messages échangés durant ces opérations, nous allons supposer dans tous ce qui suit que :

ñ la disponibilité de tous les nœuds du système est identique et est égale à t; ñ les nœuds tombent en panne indépendamment les uns des autres ;

ñ chaque nœud s’éteint en cas de panne. Ainsi, par abus de langage, nous utilise-rons souvent l’expression disponibilité du nœud pour désigner la disponibilité des répliques des données qui y sont stockées;

ñ il n’y a pas de panne sur les liens de communication ;

ñ la réussite ou non des opérations d’écriture et de lecture d’un bloc sur un nœud dépend uniquement de la disponibilité de ce dernier ;

ñ trois messages sont échangés quand une opération d’écriture d’un bloc réussit et uniquement un message si cette dernière échoue ;

1. une requête d’écriture est envoyée pour récupérer l’ancien bloc ;

2. le nœud concerné envoie une réponse pour autoriser l’opération d’écriture si il est disponible ;

3. s’il y a une réponse, le bloc à écrire sera envoyé vers le nœud concerné.

ñ deux messages sont échangés quand une opération de lecture d’un bloc réussit et uniquement un message si cette dernière échoue ;

1. une requête de lecture d’un bloc est envoyée vers le nœud qui stocke ce bloc ; 2. le nœud concerné envoie alors le bloc demandé si il est disponible.

ñ un nœud en défaillance n’émet pas de message lors des opérations d’écriture et de lecture.

Dans un souci de lisibilité, nous allons utiliser les expressions suivantes :

+ ΨN(t, i) : dénote la probabilité que exactement inœuds sur un total deN nœuds soient disponibles ;

+ ΦN(t, i, j) : dénote la probabilité qu’au moins inœuds et au plus j nœuds sur un total de N nœuds soient disponibles ;

+ ξnu,nr,nw : cette expression retourne 1 si l’évènement “nu nœuds parmi les nr nœuds disponibles durant l’opération de lecture étaient également disponibles lors de la dernière opération d’écriture où au total nw nœuds étaient disponibles” est vrai, 0 sinon ;

+ µnu,nr,nw : cette expression retourne 1 si l’évènement “nu nœuds parmi les nr nœuds disponibles durant l’opération de lecture étaient également disponibles lors de la dernière opération d’écriture où au total nw nœuds étaient disponibles” est vrai et permet de déterminer la version de la donnée, 0 sinon ;

+ T(nu, t, w, N) : représente la probabilité que exactement nu nœuds parmi les nœuds disponibles durant une opération de lecture stockent des blocs à jour. En notant nr ce nombre de nœuds, on a nrNw+ 1, avecN etwrespectivement le nombre total de nœuds et la taille d’un quorum d’écriture.

Avant d’utiliser ces expressions, nous allons d’abord déterminer leur formule ma-thématique. Par définition, ΨN(t, i) et ΦN(t, i, j) peuvent s’exprimer comme suit :

ΨN(t, i) = N i

!

.ti.(1t)(N−i) (3.1)

ΦN(t, i, j) =

k=j

X

k=i

"

N k

!

.tk.(1t)(N−k)

#

(3.2) Soient W,R etU trois variables aléatoires définies comme suit :

ñ W : représente la liste des nœuds disponibles durant la dernière opération d’écri-ture valide ;

ñ R : représente la liste des nœuds disponibles durant l’opération de lecture en cours ;

ñ U : désigne l’intersection de W etR c’est à dire le nombre de nœuds disponibles à la fois durant l’opération de lecture en cours et la dernière opération d’écriture valide.

3.1. Contexte 68

|W|, |R| et |U| désignent respectivement le nombre d’éléments de W, R et U. Soit E l’évènement suivant : “nu nœuds parmi les nr nœuds disponibles durant l’opération de lecture étaient également disponibles lors de la dernière opération d’écriture où au total nw nœuds étaient disponibles”. Alors l’expression ξnu,nr,nw peut être exprimée en fonction de la probabilité de l’évènement E.

ξnu,nr,nw =

( 1 si P(E)6= 0

0 sinon (3.3)

Or, l’évènement E est équivalent à l’évènement “|W| = nw, |R| = nr et |U| = nu”.

Donc, nous avonsP(E) = P(|W|=nw,|R|=nr,|U|=nu).

Soit w la taille d’un quorum d’écriture. Par définition, W doit contenir au moins w éléments et au plus N éléments, soit wnwN. Par ailleurs, U = WR; le cardinal deW est donc supérieur ou égal à celui de U (soit nwnu). Par conséquent, max(w, nu)≤nwN.

Soitnw ∈[max(w, nu), N]. Pour que la probabilitéP(|W|=nw,|R|=nr,|U|=nu) soit non nulle, il faut quenr vérifie les conditions suivantes : nrnu etnrN+nunw. En effet, la première condition vient du fait que U = WR. Il en résulte que le cardinal deR est supérieur ou égal à celui de U. Quant à la deuxième condition, il faut que le cardinal de la réunion de W et de R soit inférieur ou égal au nombre total de nœuds impliqués dans le stockage d’une donnée, soitN. Alors |W∪R| ≤N c’est-à-dire

|W|+|R| − |U| ≤N =⇒ |R| ≤N +|U| − |W|, soit nrN+nunw. D’où le nombre de nœuds disponibles durant cette opération de lecture est supérieur ou égal àNw+ 1 (autrement dit, WR6=∅). Par conséquent,

Pour |W| = nw ∈ [max(w, nu), N] et |R| = nr ∈ [nu, N +nunw] (autrement dit ξnu,nr,nw = 1), parmi les nr nœuds disponibles durant l’opération de lecture en cours, nu nœuds étaient aussi disponibles durant la dernière opération d’écriture valide tandis que les nrnu nœuds restants ne l’étaient pas. Et, parmi les Nnr nœuds qui ne sont pas disponibles durant l’opération de lecture en cours, seulsnwnu nœuds étaient disponibles durant la dernière opération d’écriture valide. Ainsi,

P(|U|=nu,|R|=nr,|W|=nw) =

( ΨN(t, nr).Ψnr(t, nu).ΨN−nr(t, nwnu) si ξnu,nr,nw = 1

0 sinon (3.8)

Comme le paramètre ξnu,nr,nw ne prend que deux valeurs (0 ou 1), alors l’expression dans la formule (3.8) est équivalente à :

P(|U|=nu,|R|=nr,|W|=nw) =

ΨN(t, nr).Ψnr(t, nu).ΨN−nr(t, nwnu).ξnu,nr,nw (3.9) En utilisant les deux équations (3.7) et (3.8), nous avons l’expression suivante en conser-vant uniquement les bornes de sommations correspondantes à ξnu,nr,nw = 1 :

P(|U|=nu,|R| ≥Nw+ 1,|W| ≥w) = Par conséquent, l’expression deT(nu, t, w, N) peut être déduite des équations (3.6) et (3.11) : don-nées respectivement par les formules (3.1), (3.2), (3.4), (3.5) et (3.12). Nous allons utiliser ces expressions dans ce qui suit.