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)