• Aucun résultat trouvé

Auto-Spécification de la structure à générer en fonction des dépendances entre les services du composant

Auto-adaptation structurelle de

Propriété 3 : états cohérents après la configuration

4.5 Processus d’auto-adaptation structurelle dynamique

4.5.3 Auto-Spécification de la structure à générer en fonction des dépendances entre les services du composant

Cette règle a pour objectif de minimiser le surcoût lié aux communications entre les sous-composants générés. Elle consiste à regrouper les services les plus dépendants au sein de composants déployés sur une même machine. Comme nous l’avons vu précédemment, les dépendances entre les services sont de deux types : d’une part, les dépendances fonctionnelles (appels de services, etc.) et d’autre part, les dépendances liées au partage de ressources (mise en œuvre de sections critiques, etc.). Ces deux types de dépendances peuvent nécessiter la mise en œuvre de communications distantes ; ce qui peut se révéler très coûteux dans certains cas. Il est donc indispensable de sélectionner judicieusement les services de chaque composant à générer de manière à minimiser le nombre de communications entre les composants distants.

4.5.3.1 Éléments évaluables du contexte

Pour mettre en place un tel système de sélection, il est nécessaire d’évaluer quantitativement les dé- pendances entre les composants. Pour cela, nous devons conserver un historique des communications entre différents composants interfaces du composant conforme au format canonique : des mécanismes vont être mis en place au niveau des connecteurs entre composants afin de conserver des informations sur

les communications échangées. Les données à conserver pour chaque serviceSidu composant à adapter

sont les suivantes :

• la probabilité que le service Si appelle un autre serviceSj tel queSj ∈ Sf ourni∪ Srequis, notée

Puse(Si, Sj) : nombre de fois où Sj est appelé lors de l’exécution deSi (appel direct ou indirect)

par rapport au nombre d’appels deSi,

• le nombre moyen d’appels de Si à un autre service Sj tel que Sj ∈ Sf ourni ∪ Srequis, noté

Mmoy(Si, Sj) : nombre moyen de fois où Sj est appelé lors de l’exécution deSi(appel direct ou

indirect),

• le nombre moyen de paramètres utilisés lors de l’appel d’un service Sj par le service Si, noté

N bparam(Si, Sj) ainsi que leur taille mémoire moyenne (en octets), notée Tparam(Si, Sj),

• la probabilité de mise à jour d’une ressource dans Si partagée avec un autre service Sj tel que

• la probabilité de déclencher une section critique dans Sirelative à une ressource partagée avec un

autre serviceSjtel queSj ∈ Sf ourni, notéesPcritical(Si, Sj). 4.5.3.2 Évaluation des dépendances entre les services

Les données contextuelles ainsi récoltées sont utilisées pour établir des matrices de proximité entre les différents services fournis par le composant à adapter. La proximité entre deux services dépend de leur couplage qui représente l’évaluation des dépendances fonctionnelles et de leur cohésion qui représente l’évaluation des dépendances liées au partage de ressources.

Le couplage (équation 4.1) entre deux services différents Si etSj notéCcouplage(Si, Sj) est évalué

en fonction du nombre probable d’appels du service Sj au cours de l’exécution de Si et inversement

(équation 4.2) pondéré par le nombre et le type de paramètres échangés entre ces deux services (équation 4.3). En fait, cette pondération est calculée en fonction du nombre moyen de paramètres utilisés pour l’appel du service et de la taille mémoire moyenne de ces paramètres. Ainsi, nous évaluons le couplage entre deux servicesSietSj de la manière suivante :

Ccouplage(Si, Sj) = α(Si, Sj) ∗ β(Si, Sj) + α(Sj, Si) ∗ β(Si, Sj) (4.1)

T el que α(x, y) = Tparam(x, y) ∗ (N bparam(x, y) + 1) (4.2)

β(x, y) = Mmoy(x, y) ∗ Puse(x, y) (4.3)

La cohésion (équation 4.4) entre deux services différentsSietSj, notéeCcohesion(Si, Sj) est déter-

minée en fonction du nombre de sections critiques déclenchées dans chaque service (équation 4.5) et de

la fréquence de mise à jour de ressources partagées deSiversSjet inversement (équation 4.6), pondérée

par le nombre et le type de ressources (équation 4.7). La pondération par rapport au type de ressources correspond à leur taille moyenne exprimée en octets et notéeTrp(Si, Sj). Ainsi, la valeur de la cohésion

entre deux servicesSietSj est obtenue comme suit :

Ccohesion(Si, Sj) = χ(Si, Sj) + γ(Si, Sj) ∗ η(Si, Sj) (4.4)

T el que χ(x, y) = Pcritical(x, y) + Pcritical(y, x) (4.5)

η(x, y) = Pupdate(x, y) + Pupdate(y, x) (4.6)

γ(x, y) = N brp(x, y) ∗ Trp(x, y) (4.7)

Nous définissons la proximité entre deux servicesSietSj dans un ensembleS comme une relation

binaire, notéeP r(Si, Sj), exprimée de la manière suivante : P r(Si, Sj) =  1 siSi= Sj 1 α+β(α ∗ C ′

couplage(Si, Sj) + β ∗ Ccohesion′ (Si, Sj)) sinon

Tel que C′ couplage(Si, Sj) = ( 0 siCcouplage_max= 0 Ccouplage(Si,Sj) Ccouplage_max sinon C′ cohesion(Si, Sj) = ( 0 siCcohesion_max= 0 Ccohesion(Si,Sj) Ccohesion_max sinon

Ccouplage_max= max(˘Ccouplage(x, y), ∀x, y ∈ S / x 6= y¯)

Ccohesion_max= max({Ccohesion(x, y), ∀x, y ∈ S / x 6= y})

La proximité entre deux services varie de zéro, quand les deux services ne sont liés par aucune dépendance, à un. La valeur « un » signifie que les deux services sont identiques (par convention). Plus

la valeur de la proximité est proche de un, plus les deux services sont dépendants.α et β sont les facteurs d’impact respectivement du couplage et de la cohésion. L’administrateur peut, en fonction des besoins, faire varier ces facteurs d’impact, en donnant plus de poids au couplage (α > β) ou bien à la cohésion (α < β). Par défaut, on suppose que ces deux dépendances ont des impacts identiques (α = 1 et β = 1).

4.5.3.3 Algorithme de regroupement de services

L’évaluation de la proximité entre les services fournis par le composant à adapter va permettre de les regrouper en sous-ensembles contenant ceux qui sont les plus dépendants (proximité élevée) les uns des autres ; chaque sous-ensemble constituera, par la suite, un composant dont les interfaces fournies sont celles contenues dans ce sous-ensemble.

En fait, pour obtenir une partition des interfaces fournies par le composant à adapter, pour laquelle chaque élément de la partition est associé à un site de déploiement, nous utilisons un algorithme de «

clustering » hiérarchique (voir Figure 4.13) que nous adaptons afin qu’il réponde à nos attentes. Celui-

ci prend en entrée une matrice contenant l’évaluation de la proximité entre les services fournis par le composant à adapter et avec les sites de déploiement de l’application. Chaque site représente le cluster correspondant à l’ensemble des services fournis par les composants qui y sont déployés et requis par le composant à adapter (i.e. cluster de site).

L’algorithme consiste à regrouper les services fournis par le composant à adapter, dans des clusters, en fonction de leur proximité, et à associer à chaque cluster un site de déploiement unique. Initialement, chaque ensemble de services fournis par le composant initial est placé dans un cluster (i.e. cluster de ser- vice). On calcule alors la matrice de proximité entre les différents clusters créés ainsi qu’avec les clusters représentant les sites de déploiement. Dans un premier temps, la valeur maximale de cette matrice est recherchée (valeur correspondant aux clusters les plus proches). Deux cas de figure peuvent se présenter : si cette valeur correspond à la proximité entre deux clusters contenant des services, ces clusters seront alors regroupés en un même cluster. Si cette valeur correspond à la proximité entre un cluster de service et un site de déploiement alors le cluster de service sera associé au site en question. Dans le cas où le

cluster est déjà associé à un site de déploiement, cette valeur est ignorée et l’algorithme recherche la

valeur maximale de cette matrice, exceptées celles déjà trouvées. Une fois que la valeur maximale est traitée, la matrice de proximité doit être recalculée en fonction du nouveau cluster créé. Deux solutions sont possibles pour calculer la proximité entre deux clusters : soit tous les calculs de proximité (cou- plage et cohésion) sont réalisés à nouveau en fonction des services contenus dans chaque cluster. Cette solution ne peut être envisagée du fait de sa complexité qui ne peut être acceptable lors d’une adaptation dynamique ; soit une approximation de la valeur de proximité entre deux clusters est réalisée. Nous avons choisi une stratégie qui consiste à conserver la moyenne des proximités entre les éléments du nouveau

cluster créé : P r(Cl1, Cl2) = 1 |Cl1||Cl2| X Si∈Cl1,Sj∈Cl2 P r(Si, Sj)

L’algorithme est alors réitéré jusqu’à ce que chaque cluster soit associé à un site. Le résultat corres- pond alors aux différents clusters obtenus et à leur site associé.

4.5.3.4 Exemple de regroupement de services

Considérons l’application suivante : trois composants appelés C1, C2 et C3 sont assemblés (voir

Figure 4.14).C1 fournit les ensembles de servicesS1,S2,S3etS4et requiert les ensembles de services

Clinit← Ensemble des clusters initiaux

Tant que∃Cli∈ Clinit tel que Cli∩ Sites 6= ⊘ Faire

∀Cli∈ Clinit, ∀Clj∈ Clinit∪ Sites, T [Cli, Clj] ← P r(Cli, Clj)

DéterminerClmaxietClmaxjtels que

∀Cli∈ Clinit, ∀Clj∈ Clinit∪ Sites, Cli6= Clj

T (Clmaxi, Clmaxj) ≥ T (Cli, Clj) et |Clmaxi∩ Site| ≤ 1

Clinit= Clinit∪ {(Clmaxi, Clmaxj)}

SiClmaxj∈ Clinitalors

Clinit= Clinit− {Clmaxi, Clmaxj}

SiClmaxj∈ Sites alors

Clinit= Clinit− {Clmaxi}

Sites = Sites − {Clmaxj}

RetournerClinit

Figure 4.13 – Algorithme de regroupement des services en clusters associés à des sites

est déployé sur le site 1. Le composant C2 qui fournit l’ensemble de services S5 (requis par C1) est

également déployé sur le site 1. L’ensemble de servicesS6requis parC1est fourni par le composantC3

qui est déployé sur le site 2.

Dès lors que l’adaptation est déclenchée par le composantC1, la proximité entre les clusters de ser-

vices ((S1),(S2),(S3),(S4)) et avec les clusters de sites (Site1 = {S5}, Site2 = {S6}) doit être évaluée.

Nous obtenons les résultats suivants :

Pr (S1) (S2) (S3) (S4) Site1= {S5} Site2= {S6}

(S1) 1 0.1203 0.4972 0 0.059 0

(S2) − 1 0.0409 0.1622 0.0218 0

(S3) − − 1 0.0727 0 0.3454

(S4) − − − 1 0.1909 0

Première itération : nous observons que la valeur de la proximité maximale entre les clusters, corres- pond à la proximité entre deux clusters de services(S1) et (S3). Ainsi, ces deux clusters sont regroupés

et la matrice de proximité est alors réévaluée.

Pr (S1, S3) (S2) (S4) Site1 Site2

(S1, S3) 1 0.0806 0.0363 0.0295 0.1727

(S2) − 1 0.1622 0.0218 0

(S4) − − 1 0.1909 0

Deuxième itération : dans ce cas, nous observons que la valeur de la proximité maximale entre les

clusters, correspond à la proximité entre un cluster de service(S4 et un cluster de site (Site1). Ainsi, le

cluster(S4) est associé au site 1.

Pr (S1, S3) (S2) (S4) Site2

(S1, S3) 1 0.0806 0.0363 0.1727

(S2) − 1 0.1622 0

(S4), Site1 − − 1 0

Troisième itération : le cluster(S1, S3) est associé au site 2.

Pr (S1, S3) (S2) (S4)

(S1, S3), Site2 1 0.0806 0.0363

(S2) − 1 0.1622

Quatrième itération : les deux clusters de services(S2) et (S4) sont regroupés dans un nouveau clus-

ter associé au site 1 car(S4) est déjà associé à ce site.

Pr (S1, S3) (S2, S4)

(S1, S3), Site2 1 0.0585

(S2, S4), Site1 − 1

Étant donné que tous les clusters de service sont associés à un site, l’algorithme se termine. Nous

obtenons ainsi deux clusters : l’un contient les ensembles de services S1 etS3 et est associé au site 2 ;

l’autre contient les ensembles de services S2etS4 et est associé au site 1. Ainsi, le partitionnement du

composant C1 devra être réalisé en générant deux nouveaux composants appelésC1′ etC1′′.C1′ fournira

les ensembles de servicesS1etS3et sera déployé sur le site 2. Et,C1′′fournira les ensembles de services

S2 etS4 et sera déployé sur le site 1. La spécification de l’adaptation ainsi obtenue sera alors utilisée

par le processus d’adaptation structurelle dynamique pour reconfigurer la structure du composant afin de l’adapter à son contexte d’exécution (voir Figure 4.14).

Figure 4.14 – Regroupement des services en fonction des dépendances existantes

Outline

Documents relatifs