• Aucun résultat trouvé

montre la structure de la spécification modulaire.

7.2.1.2 Décomposition

La compilation du modèle décrit à la figure 7.4 produit une hiérarchie de contrôleurs :CtrlrM1,CtrlrM2etCtrlrM3. A l’exécution centralisée, le contrôleur principalCtrlrM3instancie les contrôleursCtrlrM2. Chaque contrôleurCtrlrM2

instancie un contrôleurCtrlrM1.

Repair

Apache

Repair Sizing

Tomcat repl. tier

Repair

Proxy

Repair Sizing

MySQL repl. tier

CtrlrM1 CtrlrM2 CtrlrM1 CtrlrM2 CtrlrM3 (o1,na1,u1, ...,f L2,f2,o2,na2)

(repL1,rep1,add1,rem1) (repL2,rep2,add2,rem2) s

(c, ...)

s0 (c0, ...)

7.2. EXEMPLE: GESTION D’UNE APPLICATION MULTI-TIERS

Ici, nous décomposons le code en trois parties à exécuter sur des machines différentes comme le montre la figure 7.5. Les contrôleursCtrlrM1sont locaux aux contrôleurs CtrlrM2. Sur cet exemple, l’exécution distribuée obtenue est totalement synchronisée. En effet toutes les entrées sont reçues par le contrôleur

CtrlrM3. Ce dernier, distribue les entrées reçues aux autres contrôleurs avec

ses restrictions pour respecter son contrat. Une fois qu’il a calculé les valeurs de contrôle, il appelle la méthode step des contrôleurs CtrlrM2 distants. Ces derniers vont, eux aussi, appliquer des restrictions pour atteindre leurs objectifs. L’appel des méthodesstepest bloquant et totalement synchronisé.

7.2.2 Exécution distribuée partiellement synchronisée

Pour obtenir une exécution distribuée partiellement synchronisée, il faut dis-tinguer les entrées nécessaires au contrôleur principalCtrlrM3pour réaliser son contrôle. Cela permet de ne transmettre à ce dernier que les entrées dont il a be-soin. Les autres entrées seront directement transmises aux contrôleursCtrlrM2. De manière générale, il faut distinguer pour chaque entrée, le contrôleur de haut niveau qui doit la traiter en premier.

7.2.2.1 Modélisation

Pour une exécution partiellement synchronisée, les entrées qui ne sont pas nécessaires au contrôleur de haut niveau, par exempleCtrlrM3, sont directe-ment transmises aux contrôleurs qui les traitent, par exempleCtrlrM2. Toutefois les contrats associés aux contrôleurs ne changent pas. Le code obtenu de la spécification décrite à la figure 7.4 peut être adapté pour une exécution dis-tribuée partiellement synchronisée. Une approche est d’affecter une valeur par défaut aux entrées que le contrôle principal ne traitent pas lors de l’appel de sa méthode step. Les vraies valeurs de ces entrées seront transmises aux contrôleursCtrlrM2qui les traitent.

Une autre approche est de modifier la spécification des contrôleurs pour n’avoir que les entrées de contrôle comme arguments de leur méthode step. Les autres entrées sont récupérées dans la méthode step via des appels de fonctions externes. Le langageHeptagon/BZR, tout comme les autres langages synchrones, permet d’appeler des fonctions externes dans la définition d’un

automate. Pour utiliser les fonctions externes, nous définissons un module qui fournit les signatures de ces dernières. Dans la suite, nous utilisons le terme

«System» comme nom du module.

Tier dupliqué.

(. . .) =coord_repl_tier(cr0, ca0, crm0) enforce(not(repairingandadd))

and LongActions(cr0,rep,repairing) and LongActions(ca0,add,adding) and(crm0or notrem)

withcr, ca, crm fail= System.failure(); nr =System.repaired(); o =System.overload(); na =System.added(); u =System.underload();

(rep, repairing) =self_repair(cr, fail, nr);

(add, rem, adding) =self_sizing (ca, crm, o, u, na);

FIGURE7.6– Tier dupliqué

La figure 7.6 correspond au modèle de coordination d’un gestionnaire self-sizing et un gestionnaire self-repair pour un tier dupliqué. Ici les événements en entrée sont récupérées via les fonctions externes «System.*». Ces dernières sont implémentées en dehors du modèle. Chaque fonction externe retourne

unbooléenqui correspond à la valeur courante de l’événement qu’elle traite.

Par exempleSystem.overloadretournevrailorsqu’une sur-charge est détectée, sinon elle retournefaux. Cependant ce modèle expose les entrées de contrôle qui permettent sa réutilisation et d’inhiber les actions des gestionnaires.

Tier dupliqué avec aiguilleur de charge en frontal.

La figure 7.7 correspond au modèle de coordination de deux gestionnaires self-repair et un gestionnaire self-sizing pour un tier dupliqué avec un aiguilleur en frontal. Le modèle dans la figure 7.6 est réutilisé pour la construction de la hiérarchie. Toutefois, ici toutes les entrées ne sont pas transmises au modèle dans la figure 7.7.

7.2. EXEMPLE: GESTION D’UNE APPLICATION MULTI-TIERS (. . .) =coord_lb_repl_tier(cL0, c0, ca0, crm0)

enforce(not(repairingLandrem))

and LongActions(cL0,repL,repairingL) and LongActions(c0,rep,repairing) and LongActions(ca0,add,adding) and(crm0 or notrem)

withcL, c, ca, crm

failL= System.failureLb();

nrL= System.repairedLb();

(repL, repairingL) =self_repair(cL, failL, nrL);

FIGURE7.7– Tier dupliqué avec aiguilleur en frontal

Multi-tiers.

(. . .) =coord_multitier(cL01, c10, ca01, crm10, cL20, c02, ca02, crm02)

enforce(not((repairingL1 orrepairing1)andrem2))

and LongActions(cL0i,repLi,repairingLi)

and LongActions(c0i,repi,repairingi)

and LongActions(ca0i,addi,addingi)

and(crm0ior notremi)

i=1, 2

withcL1, c1, ca1, crm1, cL2, c2, ca2, crm2

(repL1, repairingL1, rep1, repairing1, add1, rem1, adding1) =coord_lb_repl_tier(cL1, c1, ca1, crm1);

(repL2, repairingL2, rep2, repairing2, add2, rem2, adding2) =coord_lb_repl_tier(cL2, c2, ca2, crm2);

FIGURE7.8– Multi-tiers

La figure 7.8 correspond au modèle de coordination de l’application multi-tiers. Ce dernier modèle ne reçoit aucun événement. Ses objectifs de contrôle sont définis sur les sorties des contrôleurs sous-jacents.

Dans cet exemple, seules les entrées de contrôle et les sorties sont utilisées pour exprimer les objectifs. De ce fait, toutes les autres entrées peuvent être récupérées via des appels de fonctions dans les méthodes step. Cependant, lorsque ces dernières sont utiles dans la déclaration des objectifs, il est nécessaire qu’elles soient reçues comme entrées de la méthodesteppour pouvoir appliquer

la synthèse de contrôleur.

Dans tous les cas, il faut distinguer les entrées qui nécessitent l’appel de la méthode step, ici, du contrôleur CtrlrM3. Dans cet exemple, ces entrées sont : failL1 (panne Apache),nrL1 (Apache réparé), failL1 (panne Tomcat),

nr1(Tomcatréparé),u2(sous-chargeMysql).

7.2.2.2 Décomposition

La compilation donne la même hiérarchie de contrôleurs que celle obtenue avec la coordination totalement synchronisée. Chacun des contrôleurs assure le respect des mêmes objectifs que son vis-à-vis dans la coordination totalement synchronisée.

Repair

Apache

Repair Sizing

Tomcat repl. tier

Repair

Proxy

Repair Sizing

MySQL repl. tier

CtrlrM1 CtrlrM2 CtrlrM1 CtrlrM2 CtrlrM3 (f L1,nrL1,f1,nr1,u2)

(o1,na1,u1) (repL1,rep1,add1,rem1) (f L2,nrL2,f2,nr2,o2,na2) (repL2,rep2,add2,rem2) s

(c, ...)

s0 (c0,u2)

FIGURE7.9– Exécution distribuée partiellement synchronisée

Cependant, comme le montre la figure 7.9, le contrôleur principalCtrlrM3et les deuxCtrlrM2reçoivent, chacun, une partie des entrées. De ce fait, lesstep sont partiellement synchronisés. Le contrôleurCtrlrM3n’initie la synchronisa-tion que pour le respect de l’objectif global. Les entrées qui ne concernent pas le contrat du contrôleurCtrlrM3sont transmises directement aux contrôleurs

CtrlrM2 qui les traitent. Chaque contrôleur CtrlrM2 évolue à son propre

7.2. EXEMPLE: GESTION D’UNE APPLICATION MULTI-TIERS

contrôleurCtrlrM3. Ces entrées (failL1,nrL1,fail1,nr1,u2) sont transmises au contrôleurCtrlrM3 qui calcule ses valeurs de contrôle. Ensuite, il appelle les méthodesstep des contrôleurs CtrlrM2, avec ses valeurs de contrôle. Ces derniers conservent les valeurs de contrôle reçues du contrôleur principal jusqu’à la prochaine synchronisation.

7.2.3 Exécution distribuée désynchronisée

Pour l’exécution distribuée désynchronisée, le contrat qui est défini dans le modèle global est assuré par les contrôleursCtrlrM2. Dans la coordination modulaire synchronisée, ce contrat est assuré par le contrôleurCtrlrM3.

7.2.3.1 Modélisation

Repair

Apache

Repair Sizing

Tomcat repl. tier CtrlrM1 CtrlrM2

Repair

Proxy

Repair Sizing

MySQL repl. tier CtrlrM1 CtrlrM2

Communication

Veri f ication(model−checking)