Argomento precedente: Esempi di scrittura di business logic efficaceArgomento successivo: Case study 16: modelli di progettazione di business logic


Case study 15: metriche di gruppo

In genere, nella descrizione di un determinato componente software, questa può essere divisa in due parti, WHAT e HOW. Per WHAT si intende la descrizione del significato di questa parte di codice. Per HOW si intende la procedura eseguita. Esiste una tendenza a concentrarsi sulla parte WHAT, trascurando la parte HOW. Il motivo di ciò è semplice e in molti casi giustificato. In questo modo, è possibile ridurre l'accoppiamento tra i componenti ed evitare di tediare l'utente con informazioni in molti casi non pertinenti. In molti casi, tuttavia, il costo di trascurare la parte HOW si traduce in scarse prestazioni.

Il presente case study descrive il modo in cui il motore calcola le metriche di gruppo (risposta alla parte HOW) e descrive il costo delle prestazioni implicate in determinate implementazioni. Inoltre, vengono descritti diversi metodi per ridurre questo costo modificando l'implementazione.

Che cosa sono le metriche di gruppo

Le metriche di gruppo sono metriche che comprendono nella propria definizione un certo gruppo di risorse. Questo gruppo è indicato come Gruppo di metrica e ogni risorse in tale gruppo è definito come elemento di gruppo. Durante il calcolo di una metrica di gruppo viene eseguito un calcolo distinto per ciascun elemento di gruppo. I calcoli per ciascun elemento di gruppo sono simili l'uno all'altro, ad eccezione di:

Procedura di calcolo delle metriche di gruppo

L'aspetto più importante da comprendere sul calcolo di una metrica di gruppo è che tutti gli elementi di gruppo vengono calcolati in parallelo. Per parallelo non significa che vengono calcolati con thread diversi, ma che durante l'elaborazione dei vari eventi che devono essere gestiti dai vari elementi di gruppo, gli eventi vengono elaborati in sequenza e per ciascun evento vengono chiamati gli elementi di gruppo pertinenti che elaborano l'evento. Ad esempio, sono presenti molti eventi che devono essere gestiti da numerosi elementi di gruppo. Esistono due modi per tale scopo:

Esempio: Opzione 1

Per ciascun elemento di gruppo C
     Per ogni evento E che deve essere gestito da C
          Consentire a C di gestire E

Esempio: Opzione 2

Per ogni evento E
     Per ciascun elemento di gruppo C che deve gestire E
          Consentire a C di gestire E

Il motore gestisce le metriche di gruppo utilizzando l'opzione 2.

Un altro punto importante da comprendere è che l'esecuzione di VBScript in PslWriter viene effettuata da un componente denominato Script Control. È presente solo una singola istanza di questo componente per ogni metrica e tale istanza viene riutilizzata per il calcolo dei vari elementi di gruppo. Poiché gli elementi di gruppo vengono calcolati in parallelo come descritto in precedenza, e poiché il componente Script Control può contenere solo i dati di un singolo elemento di gruppo in ogni momento, è necessario commutare i dati di frequente all'interno del componente Script Control.

A scopo illustrativo, viene riportato di seguito uno pseudo-codice più dettagliato per l'esecuzione del calcolo.

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

L'intero processo di rilevamento talvolta di un evento non ancora preso in considerazione e di esecuzione del calcolo da questo punto in poi è denominato Nuovo calcolo. Il processo di sostituzione dei valori delle variabili globali (i passaggi 8 e 9 nel codice sopra riportato) è denominato Cambio di contesto.

I due principali problemi che possano essere facilmente riscontrati nel codice riportato sopra sono:

Ricalcolo delle metriche di gruppo

Cambio di contesto