• Aucun résultat trouvé

4.3 Causalit´ e dans les syst` emes distribu´ es

4.3.1 Ev´ ´ enements et ordres partiels de d´ elivrance

Calcul r´eparti

Pour mieux comprendre la r´epartition, il est n´ecessaire d’avoir une mod´elisation la plus pr´ecise possible d’un syst`eme r´eparti. Les processus communiquant par messages constituent le mod`ele `a la fois le plus ancien et le plus ´etudi´e des mod`eles de calcul r´eparti. Les diffusions de messages peuvent se faire via des canaux logiques de communication dont les propri´et´es peuvent varier comme nous l’avons montr´e dans la section pr´ec´edente.

Lorsqu’on cherche `a analyser le comportement d’un calcul r´eparti, il est int´eressant d’en avoir une image graphique. La notion de chronogramme est un outil ´el´ementaire et indispensable. Il permet d’abs- traire graphiquement une ex´ecution r´epartie en ne consid´erant que les ´ev´enements significatifs issus de chaque processus. Trois types d’´ev´enements sont distingu´es : les ´ev´enements internes au processus, les ´

emissions de messages et les r´eceptions de message.

Le chronogramme de la figure 4.14 montre par exemple un ´ev´enement interne i1, des envois de message point `a point (par exemple couple e1; r1), une diffusion (´emission e2), la perte d’un message (´emission e),. . .

1Il est th´eoriquement impossible de le mettre en œuvre en cas de d´efaillance ou de communications sans garantie de

Un calcul r´eparti peut ˆetre abstrait en terme des ensembles d’´ev´enements produits par chaque proces- sus au cours d’une ex´ecution particuli`ere. C’est le point de vue ´ev´enementiel. `A tout processus Pi peut donc ˆetre associ´e une suite finie ou non d’´ev´enements Ci totalement ordonn´es d´enotant des ´ev´enements internes, des envois ou des r´eceptions de messages issus de Pi ayant eu lieu pour une ex´ecution donn´ee. Globalement, un calcul r´eparti est repr´esent´e par une union de toutes ces suites :

C = N 

1 Ci

Les ´ev´enements issus de processus diff´erents ne sont pas forc´ement ordonn´es. Un ordre partiel les relie cependant, induit par les messages ´echang´es. Un calcul r´eparti va donc ˆetre caract´eris´e par une ordre partiel fond´e sur une relation dite de causalit´e. `A titre d’exemple, la figure (4.15) montre une suite d’´ev´enements ayant lieu sur trois sites diff´erents durant une ex´ecution r´epartie comportant des ´echanges de messages entre les sites.

a1 a2 a3 a4 a5 b1 b2 b3 b4 A B C c2 c3 c1 m3 m4 c4 m5 m2 m1

Fig. 4.15 – Exemple de calcul r´eparti

Dans cette section, nous allons r´esumer des r´esultats classiques du concept de causalit´e dans les syst`emes r´epartis. ´Etant donn´es deux ´ev´enements, une question importante est de savoir si ces deux ´

ev´enements sont causalement li´es, en d’autres termes, s’ils sont li´es par une relation de pr´ec´edence appel´ee happened before [Lam78]. Cette relation capture la notion intuitive de cause-`a-effet et est une notion fondamentale lorsqu’on raisonne dans un calcul r´eparti a des fins de d´ebogage, supervision, observation, communication et synchronisation.

Ordre causal. Syst`emes de datation.

La causalit´e d´efinit une relation d’ordre partiel entre les ´ev´enements d’un calcul r´eparti. Cette relation d’ordre partiel, not´ee≺, est la plus petite relation transitive satisfaisant les deux conditions suivantes : – Pour tout couple d’´ev´enements (e, e) issu d’un mˆeme processus, tel que e pr´ec`ede e dans la suite

associ´ee au processus, la relation e≺ e est v´erifi´ee ;

– Lorsque deux processus ´echangent un message M , les ´ev´enements d’envoi e et de r´eception r sont li´es : e pr´ec`ede toujours r dans un temps global et e est la cause de r. En cons´equence, pour tout message M , on aura la relation e≺ r.

Dot´ee de cette relation de causalit´e, une union C = N1 Ci peut repr´esenter un calcul r´eparti si la relation≺ est acyclique. En effet, tout calcul r´eel implique que (C, ≺) est un ordre partiel strict.

L’id´ee g´en´erale est que, si e≺ e, alors e est potentiellement la cons´equence de e. Un int´erˆet de l’ordre causal tient au fait qu’il peut ˆetre implant´e plus efficacement qu’un ordre total sur les ´ev´enements et qu’il est n´eanmoins suffisant pour beaucoup d’applications.

Dans l’exemple de la figure (4.15), certains couples d’´ev´enements sont li´es causalement, soit directe- ment, par exemple a1≺ c1, soit par transitivit´e de la relation causale, par exemple a1≺ b3. Par ailleurs, certains couples d’´ev´enements ne sont pas causalement li´es, par exemple a3et c1. On note par||, l’absence de causalit´e entre ´ev´enements. Autrement dit :

e|| e ≡ ¬((e ≺ e)∨ (e≺ e))

Cette relation|| d´enote une relation logique de parall´elisme. Elle ne signifie pas que les deux ´ev´enements se sont produits simultan´ement dans le temps global r´eel mais simplement qu’ils auraient pu sans en- freindre la causalit´e.

Syst`emes de datation Les protocoles de communication qui assurent la d´elivrance des messages dans un certain ordre (par exemple FIFO ou causal) s’appuient sur des m´ecanismes de datation. En g´en´eral, un m´ecanisme de datation doit respecter une r`egle fondamentale : ˆetre compatible avec la relation de causalit´e qui peut exister entre toute paire d’´ev´enements. Autrement dit :

∀ e, e : e≺ e ⇒ date(e) < date(e) On peut distinguer deux approches :

– une approche « temps r´eel » consistant `a dater les ´ev´enements avec une horloge la plus pr´ecise possible. La difficult´e est alors de disposer de cette horloge globale ;

– une approche« temps logique » consistant `a dater les ´ev´enements en respectant la causalit´e selon la r`egle ´enonc´ee.

Datation temps-r´eel Cette approche pose le probl`eme de la disponibilit´e d’une horloge globale. En

effet, comme nous l’avons soulign´e, un syst`eme r´eparti ne dispose justement pas d’un r´ef´erentiel global de temps. Chaque nœud poss`ede une horloge locale plus ou moins pr´ecise et surtout non synchronis´ee a priori avec les horloges des autres nœuds. Or, une datation directe `a l’aide de telles horloges ne convient donc pas car des anomalies causales peuvent ˆetre engendr´ees. Il suffit que l’horloge du nœud ´emetteur soit en avance sur celle du nœud r´ecepteur pour obtenir un message dont la date de r´eception est ant´erieure `

a la date d’´emission.

Pour r´esoudre ce probl`eme, des algorithmes de synchronisation d’horloges ont ´et´e con¸cus et implant´es. Ils permettent de recaler les horloges des nœuds de fa¸con `a ce que leur diff´erence reste dans un intervalle born´e connu. L’algorithme doit maintenir un invariant du type :

invariant M ax(hi : i = 1, N )− Min(hi : i = 1, N ) <

On obtient ainsi une pr´ecision qui garantira une datation correcte si tous les ´ev´enements causalement li´es sont s´epar´es par un d´elai sup´erieur `a la pr´ecision de l’horloge globale ainsi implant´ee.

La datation temps r´eel n´ecessite un protocole de synchronisation d’horloges complexe et relativement coˆuteux. La disponibilit´e d’un ´emetteur unique (diffusion de tops par une horloge atomique par exemple) peut apporter une simplification dans la mise en œuvre et plus de pr´ecision. Cependant, la solution est alors centralis´ee par nature et donc moins tol´erante aux d´efaillances : d´efaillance de l’´emetteur, mais aussi d´efaillance locale des r´ecepteurs.

Enfin, pour de nombreuses applications, seul le respect de la causalit´e est important. Il est mˆeme parfois souhaitable de savoir si deux ´ev´enements sont causalement li´es ou non. Une datation temps r´eel ordonne totalement tous les ´ev´enements et ne permet donc pas de distinguer ceux qui sont ind´ependants (sans causalit´e) malgr´e leur pr´ec´edence temporelle. Face `a ces inconv´enients, des solutions fond´ees sur un temps logique ont ´et´e ´etudi´ees.

Datation temps logique Deux solutions ont ´et´e propos´ees :

– Horloges scalaires - due `a L. Lamport [Lam78], permet de dater les ´ev´enements selon un ordre total. L’inconv´enient ´eventuel de cette approche est donc de mˆeme nature que celui d’une datation temps r´eel : l’introduction d’un ordre arbitraire entre des ´ev´enements ind´ependants.

– Horloges vectorielles - due `a Fidge et Mattern [Fid91, MF89], permet de dater les ´ev´enements selon un ordre partiel isomorphe `a la relation de causalit´e. Ce m´ecanisme est plus pr´ecis mais plus coˆuteux `a implanter et permet de distinguer (d´etecter) les ´ev´enements ind´ependants. Toutefois, un tel m´ecanisme ne permet pas de d´ecider de l’existence d’un ´ev´enement compris entre deux ´

ev´enements causalement li´es.

Horloges scalaires Sur chaque site Si est cr´e´e un compteur Hi `a valeurs enti`eres (horloge logique),

initialis´e `a 0, qui sert `a dater les ´ev´enements sur ce site. A chaque ´ev´enement e arrivant sur Si la valeur Hi est incr´ement´ee de 1 et la date de e, not´ee Hi(e), est par d´efinition la nouvelle valeur de Hi. Pour garantir la pr´ec´edence causale, tout message m ´emis par Si porte une estampille E(m) qui est sa date d’´emission, et le site Sj qui re¸coit m ex´ecute : Hj := max(Hj, E(m)) + 1. La relation ainsi d´efinie n’est pas un ordre strict : en effet, des ´ev´enements causalement ind´ependants, arrivant sur des sites diff´erents peuvent avoir la mˆeme date. Pour obtenir un ordre strict, il suffit de d´efinir un ordre arbitraire entre

les sites. Si e et e sont des ´ev´enements arrivant respectivement sur les sites Si et Sj, on peut d´efinir comme suit une relation d’ordre total strict, not´ee → : e → e si et seulement si Hi(e) < Hj(e) ou Hi(e) = Hj(e)∧ i < j. Un ´ev´enement est maintenant dat´e par le couple (num´ero de site, estampille).

Le chronogramme de la figure 4.16 montre l’´evolution des horloges de chaque site et la surcharge des messages par la date d’´emission de chaque message. On remarquera que les ´ev´enements de r´eception ne sont pas dat´es. Ils ne sont l’occasion que d’un recalage de l’horloge du site de r´eception mais n’entraˆınent pas d’op´eration d’incr´ementation.

a1 a2 a3 c1 c2 c3 <(A,2),m2> b3 b2 A B C (A,0) (B,0) (C,0) b1 (A,3) (A,2) (A,1) <(A,0), m1> a4 (B,3) (B,4) (B,5) (A,4) <(B,3),m3> <(B,4),m4> (C,5) (C,0) (C,1)

Fig. 4.16 – Horloges de Lamport

Les horloges de Lamport permettent un ordonnancement total des ´ev´enements d’un calcul r´eparti en respectant la causalit´e qui peut exister entre ces ´ev´enements. N´eanmoins, l’ordre introduit entre des ´

ev´enements causalement ind´ependants (≡ logiquement simultan´es) est arbitraire. Par exemple, la figure 4.16 montre que l’´ev´enement a3 a pour date (A, 2) et l’´ev´enement c2 a pour date (C, 1) : on a donc c2 qui pr´ec`ede a3 avec cette datation alors que dans le temps absolu c’est l’inverse qui s’est produit. Ceci n’est pas erron´e puisque ces deux ´ev´enements ne sont pas causalement li´es.

Horloges vectorielles La relation d’ordre→ d´efinie par les horloges de Lamport ne suffit pas pour

´

etablir une relation de causalit´e entre deux ´ev´enements. On peut simplement dire que l’ordre total d´efini par la relation→ est compatible avec l’ordre partiel de pr´ec´edence causale ≺. En effet, si e → e, ou bien e ≺ e ou bien e et e sont causalement ind´ependants. L’ordre total introduit ”efface” artificiellement l’ind´ependance causale. Il est n´eanmoins utile de pouvoir d´eterminer la d´ependance ou l’ind´ependance causale entre deux ´ev´enements.

Le m´ecanisme des horloges vectorielles [Fid91, MF89] a ´et´e introduit pour caract´eriser la d´ependance causale. Soit n le nombre de sites. Sur chaque site Si, on d´efinit une horloge vectorielle comme un vecteur Vi[1· · · n] initialis´e `a 0. Lorsqu’un ´ev´enement se produit sur le site Si, on ex´ecute Vi[i] := Vi[i] + 1. Chaque message m porte comme estampille Vm l’horloge vectorielle Vi du site ´emetteur. A la r´eception d’un message (m, Vm), le site r´ecepteur, soit Si, ex´ecute : Vi[j] := max(Vi[j], Vm[j]) pour j = 1,· · · , n. Appelons pass´e d’un ´ev´enement e l’ensemble constitu´e de e lui-mˆeme et des ´ev´enements qui le pr´ec`edent causalement. Grˆace `a leur construction, les horloges vectorielles peuvent ˆetre interpr´et´ees comme suit : si un ´ev´enement e est dat´e par le vecteur Ve, alors :

– Ve[j] = nombre d’´ev´enements du pass´e de e sur le site Sj; – jVe[j] = nombre total d’´ev´enements du pass´e de e.

D´efinissons une relation d’ordre partiel entre horloges vectorielles : 1. V ≤ W ⇔ ∀j, V [j] ≤ W [j]

2. V < W ⇔ V ≤ W ∧ V = W 3. V  W ⇔ ¬(V ≤ W ) ∧ ¬(V ≤ W )

La relation d’ordre partiel entre horloges vectorielles refl`ete la relation de pr´ec´edence causale et peut ˆ

etre exprim´ee comme suit. Soit deux ´ev´enements e et e, dat´es respectivement par les vecteurs Veet Ve.

Alors :

1. e≺ e ⇔ Ve< Ve

2. e et e sont causalement ind´ependants⇔ Ve Ve

Pour r´esumer, on peut remarquer que les m´ecanismes de datation permettent : – l’ordonnancement correct de deux ´ev´enements (horloges de Lamport ou vectorielles) – le non-ordonnancement des ´ev´enements non li´es (horloges vectorielles)

De plus, des m´ecanismes de datation plus complexes `a base de matrices d’horloges ( [CDK94]) per- mettent la d´etection d’un message manquant (« detection gap »).