Vorheriges Thema: Adapter-Listener-Verhalten mit Event-BesonderheitNächstes Thema: Ausführen eines Adapters hinter einer Firewall


Aggregieren von Transaktionsdaten

Transaktionsdaten werden häufig erfasst, um sie mit Schwellenwerten abzugleichen oder um die etwaigen periodischen Prozentsätze des Erfolgs berechnen zu können. Beispiel: Alle fünf Minuten wird eine virtuelle Transaktion gegen ein System ausgeführt und das Ergebnis (Antwortzeit in Millisekunden) wird wie unten dargestellt gespeichert:

[…]
1/1/2004 00:00 432
1/1/2004 00:05 560
1/1/2004 00:10 329
1/1/2004 00:15 250
1/1/2004 00:20 275
1/1/2004 00:25 2860
1/1/2004 00:30 140
[…]

In anderen Situationen kann auf tatsächliche Transaktionen, die im System stattfinden, zugegriffen werden, anstatt virtuelle Transaktion zu verwenden. In diesen Fällen können Hunderte oder sogar Tausende von Transaktionen pro Stunde ausgeführt werden.

In den beiden oben aufgeführten Fällen sollte es möglichst vermieden werden, solch eine große Datenmenge in CA Business Service Insight zu laden.

Die Aggregation von Daten nach Zeiträumen ist die beste Möglichkeit, die Datenmengen zu reduzieren. Wenn der Schwellenwert, gegen den der Erfolg gemessen wird, festgelegt ist, kann die Aggregation ausgeführt werden. Dabei wird dem Adapter ermöglicht, die Anzahl der Transaktionen, die erfolgreich waren, innerhalb des Sammelzeitraums zu zählen. Beispiel: Wenn der Erfolgsschwellenwert im vorherigen Beispiel auf 500 Millisekunden festgelegt wurde, waren nur fünf von sieben Transaktionen innerhalb des angezeigten Zeitraums erfolgreich. Das Problematische an dieser Vorgehensweise ist der festgelegte Schwellenwert: Was ist, wenn man zu einem späteren Zeitpunkt den Schwellenwert ändern möchte? In solch einer Situation müssen Rohdaten wieder gelesen und vom Adapter gegen den neuen Schwellenwert getestet werden.

Deswegen sollte der Adapter Transaktionsdaten optimalerweise auf flexible Art und Weise ansammeln, ohne bedeutende Daten zu verlieren.

Eine beschränkte Lösung ist, dem Adapter zu ermöglichen, die Transaktionen gegen einige Schwellenwerte zu testen. Es gibt zwei Arten, dies zu tun:

Beide Optionen weisen dasselbe Problem auf - die Schwellenwerte können später nur innerhalb eines kleinen Satzes von vordefinierten Werten geändert werden.

Empfohlene Lösung

Annahme: Alle möglichen Schwellenwerte sind das Vielfache einer bestimmten Zahl. Alle Schwellenwerte (in Millisekunden) sind beispielsweise ein Vielfaches von 250, d. h. 0, 250, 500, 1750 und 3000 Millisekunden sind mögliche Schwellenwerte.

Basierend auf dieser Annahme lautet die vorgeschlagene Lösung, Transaktionen anzusammeln, indem alle Werte auf das gemeinsame Vielfache gerundet werden, und zu zählen, wie viele Transaktionen unter jeden gerundeten Wert fallen. Event Type = {RangeFrom, RangeTo, TransactionCount}

Die folgenden Events werden zum Beispiel erstellt, um die zuvor angezeigten Daten zu aggregieren, wobei das gemeinsame Vielfache 250 Millisekunden ist:

{1,     250,    2}
{251,   500,    3}
{501,   750,    1}
{751,  1000,   1}

Kommentare:

Der Zeitstempel dieser Events wäre der gleiche. (Alle aggregierten Events können z. B. den Zeitstempel 1/1/2007 00:00 aufweisen, und es kann einen weiteren Satz von Events für das nächste Zeitbeispiel um 1/1/2007 01:00 geben, vorausgesetzt es findet stündlich eine Aggregation statt)

RangeTo wird berechnet, indem man eine Transaktion auf das gemeinsame Vielfache rundet (siehe nachfolgend).

RangeFrom ist RangeTo abzüglich des Vielfachen plus 1. Es wird nur aus Gründen der Klarheit angegeben, und Sie können es überspringen.

Beispiel: Eine stündlich ausgeführte Aggregation würde ungefähr wie folgt aussehen (ersetzen Sie MULTIPLE durch den Wert des Vielfachen):

select  trunc (time_stamp, 'hh') "TimeStamp",
        round (response_time/MULTIPLE, 0)*MULTIPLE-MULTIPLE+1 "RangeFrom",
        round (response_time/MULTIPLE, 0)*MULTIPLE "RangeTo",
        count (*) "TransactionCount"
from    t_log
group by trunc (time_stamp, 'hh'),
        round (response_time/MULTIPLE, 0)*MULTIPLE

In der Business-Logik kann folgende Bedingung auf die Events angewandt werden:

If eventDetails("RangeTo")<=Threshold Then
	SuccessfulTransactions=SuccessfulTransactions+eventDetails("TransactionCount")
End If

Einige schlüssige Einblicke: