上一主题: 具有事件单一性的适配器侦听程序行为

下一主题: 在防火墙后运行适配器

聚合事务数据

经常收集事务数据,以使其与阈值匹配,或能够计算最终的定期成功百分比。 例如,每五分钟对系统执行一个虚拟事务,并按如下所示存储结果(以毫秒表示的响应时间):

[…]
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
[…]

在其他情况下,不使用虚拟事务,可以访问系统中发生的实际事务。 在这些情况下,每小时会执行数百甚至数千个事务。

在上述两种情况下,应尽可能避免向 CA Business Service Insight 中加载此信息量。

按时间段聚合数据是减少数据量的最好方法。 在固定用于度量成功的阈值后,可以通过允许适配器计算聚合期间成功的事务数来执行聚合。 例如,如果上一个示例中的成功阈值设置为 500 毫秒,则在显示的时间段内,七个事务中只有五个事务成功。 此方法的问题在于固定阈值:如果稍后要更改阈值,会怎么样? 在此类情况下,必须重新读取原始数据并由适配器针对新阈值对其进行测试。

因此,最佳情况是适配器应在不丢失重要数据的情况下以灵活的方式聚合事务数据。

受限的解决方案是允许适配器针对若干个阈值测试事务。 可通过两种方法执行此操作:

这两个选项都面临同一个问题 - 将来只能用较小的预定义值的集合更改阈值。

建议的解决方案

假设 - 所有可能的阈值都是特定数值的倍数。 例如,所有阈值(以毫秒为单位)都是 250 的倍数,因此 0、250、500、1750 和 3000 毫秒都是可能的阈值。

基于此假设,建议的解决方案是通过将所有值都舍入到公倍数来聚合事务,并计算在每个舍入值范围内的事务数。 事件类型 = {RangeFrom, RangeTo, TransactionCount}

例如,为了聚合上面显示的数据,将生成下面的事件,其中公倍数为 250 毫秒:

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

注释

这些事件的时间戳将相同。(例如,所有聚合事件都可能在 1/1/2007 00:00 发生,假定每小时聚合一次,则下次抽样可能有另一组事件在 1/1/2007 01:00 发生)

通过将事务舍入到公倍数可计算 RangeTo(请参阅下文)。

RangeFrom 是 RangeTo 减去倍数,再加 1。 指定它只为了清晰起见,可以跳过它。

例如,按小时聚合将与下例相似(将 MULTIPLE 替换为倍数值):

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

在业务逻辑中,可将以下条件应用于事件:

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

一些结论性见解: