Rubrique précédente: Ecriture d'exemples de logique applicative efficacesRubrique suivante: Etude de cas 16 : Modèles de conception de logique applicative


Etude de cas 15 : Métriques groupées

La description d'une partie d'un logiciel peut généralement être divisée en deux parties, le QUOI et le COMMENT. QUOI signifiant la description de ce que la partie du code fait. Le COMMENT pour la façon dont il le fait. Si l'on se concentre souvent sur le QUOI, le COMMENT tend plutôt à être ignorer. La raison en est simple et dans beaucoup de cas, elle est justifiée. Vous réduisez ainsi la connexion entre vos composants et ne surchargez pas votre esprit avec des informations le plus souvent non pertinentes. Dans beaucoup de cas en revanche, ignorer le COMMENT implique des performances médiocres.

Cette étude de cas aborde la manière dont le moteur calcule des métriques groupées (réponse au COMMENT) et décrit le coût de performance impliqué pour certaines implémentations. Elle examine également plusieurs façons de réduire ce coût en changeant l'implémentation.

Que sont les métriques groupées ?

Les métriques groupées sont des métriques intégrant un certain groupe de ressources dans leur définition. Ce groupe est appelé groupe de la métrique et chacune des ressources dans ce groupe est appelée élément de groupe. Lors du calcul d'une métrique groupée, un calcul séparé est effectué pour chaque élément groupé. Les calculs de ces éléments sont identiques excepté pour :

De quelle manière les métriques groupées sont-elles calculées ?

Ce qu'il importe de comprendre à propos du calcul d'une métrique groupée est que tous les éléments groupés sont calculés en parallèle. Nous n'entendons pas par là qu'ils sont calculés par fils différents, mais que lors du traitement des événements devant être gérés par les différents éléments groupés, ces événements sont traités de façon séquentielle, et pour chacun d'entre deux les éléments groupés appropriés sont appelés pour traiter l'événement. Par exemple, beaucoup d'événements doivent être traités par de nombreux éléments groupés. Il existe deux procédures à cette fin :

Exemple : option 1

For each cluster item C
     For each event E that should be handled by C
          Let C handle E

Exemple : option 2

For each event E
     For each cluster item C that should handle E
          Let C handle E

Le moteur gère les métriques groupées en utilisant l'option 2.

Autre point important : l'exécution du VBScript dans le PslWriter est accomplie par un composant appelé Contrôle de script. Il n'existe qu'une seule instance de ce composant pour chaque métrique et cette instance est réutilisée pour le calcul des divers éléments groupés. Vu que les éléments groupés sont calculés en parallèle et que le composant Script Control ne peut contenir les données que d'un seul élément groupé à chaque instant, nous devons fréquemment basculer les données dans le composant Script Control.

Pour expliquer cela, un code fictif plus détaillé effectuant le calcul est présenté ci-dessous.

1-     For each metric M
2-          Let X be the earliest event not yet handled by M
3-          Let T be the timestamp of the latest state before X
4-          Let L be the list of all events registered by M (all cluster items) starting from timestamp T until the current time
5-          For each event E in L
6-               For each cluster item C that should handle E
7-                    Let C’ be the cluster item that is currently loaded into the script control
8-                    Take the values of the global variables from the script control and store them aside for C’
9-                    Take the values of the global variables stored aside for C and load them into the script control
10-                    Handle event E

Tout le processus consistant à rechercher le moment d'un événement qui n'était pas encore pris en compte pour ensuite calculer depuis ce point est nommé Nouveau calcul. Le processus visant à remplacer les valeurs des variables globales (étapes 8 et 9 du code ci-dessus) est appelé Commutation de contexte.

Les deux problèmes principaux que vous pouvez facilement observer dans le code ci-dessus sont les suivants :

Nouveau calcul de métriques groupées

Commutation de contexte