通常,在介绍特定软件时,可分两部分进行说明:含义和方法。 “含义”是指此段代码内容的说明。 “方法”是指它如何实现其功能。 存在一种专注于“含义”部分,而忽略“方法”部分的倾向。 产生这种倾向的原因很简单,且在大多数情况下是合理的。 这样做,可以减少组件间的耦合,且不会干涉您关注多数情况下无关的信息。 但在大多数棘手的情况下,忽略“方法”部分会对成本产生负面影响。
此案例研究讨论了引擎正在计算组群的度量标准的方法(回答“方法”部分),并介绍了在特定实施上所暗示的性能成本。 还讨论了通过更改实施降低此成本的多种方法。
什么是组群的度量标准
组群的度量标准是在其定义中嵌入特定资源组的度量标准。 此组称为度量标准群,该组中的每个资源称为群项。 在计算组群的度量标准时,会为每个群项执行单独计算。 除以下内容外,每个群项的计算都彼此类似:
如何计算组群的度量标准
对于组群的度量标准的计算,需要重点了解的一点是,所有群项都并行计算。 并行并不表示通过其他线程计算,但是在处理应由多个群项处理的事件时,会按顺序处理这些事件,并为每个事件调用相关群项,而这些群项会处理该事件。 例如,存在多个应由多个群项处理的事件。 可通过以下两种方式执行此操作:
示例:选项 1
For each cluster item C
For each event E that should be handled by C
Let C handle E
示例:选项 2
For each event E
For each cluster item C that should handle E
Let C handle E
引擎将使用选项 2 处理组群的度量标准。
需要了解的另一个要点是,PslWriter 内 VBScript 的执行将通过名为“脚本控制”的组件来执行。 针对每个度量标准仅有一个此组件的实例,此示例可重复用于各种群项的计算。 由于前面所提到的将并行计算群项,以及脚本控制组件在任何时刻都仅可包含单个群项的数据,因此我们必须在脚本控制组件内频繁切换数据。
为了解释这一点,下面提供了更详细的用于执行计算的伪代码。
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
查找尚未纳入考虑范围的事件的时间,然后从该时间点开始执行计算的整个过程称为“重新计算”。 替换全局变量值的过程(上述代码中的步骤 8 和 9)称为“上下文切换”。
在上述代码中可以轻松看到的两个主要问题是:
重新计算组群的度量标准
正如已经解释的那样,组群的度量标准中的所有群项将作为一个整体进行重新计算。 这意味着如果我们拥有针对 1000 个群项进行群组的度量标准,且由于某个新事件的到来其中一个群项需要在去年重新计算,则所有这 1000 个群项都会在去年进行重新计算。
以下解决方案建议可以减少此问题产生的影响,但并不始终适用且每个都具有其自身的缺点。 重要的是了解问题及其估计成本,并将此成本与建议的解决方案成本进行比较。
上下文切换
正如已经解释的那样,上下文切换在大多数内部循环中执行。 换句话说,适用于应由每个群项处理的每个事件。 在度量标准接收多个事件且每个事件都由多个群项处理时,此数量可能会非常高。 此外,上下文切换操作成本相对较高(相对于在业务逻辑中处理事件本身),并且您将会遇到问题。
上下文切换操作成本与“已切换”的数据大小成比例。 我们在上下文切换期间切换的数据为业务逻辑中所有全局变量(也称为“状态”)的值。 因此,您具有的全局变量越多,并且这些全局变量的大小越大,则上下文切换操作的成本就越高。
特别要指出的是,不建议在组群的度量标准中使用业务逻辑映射,尤其是这些映射的大小可能较大时。
目的是减少状态(全局变量)的大小。 此方法可通过重新编写业务逻辑来执行,以便使其不包含映射。 当然这并非始终可行,但建议在可行时执行。
在群较小时,可以为每个群项创建单个度量标准。
避免具有注册到相同事件的多个已组群项的组群的度量标准。 此处的思想如下:
如果每个事件由单个群项处理,则上下文切换的数量与事件的数目成比例
如果每个事件由所有群项处理,则上下文切换的数量与事件数目乘以群项数目所得的结果成比例
创建用于为所有原始群项(现在为简单资源而不是群项)计算结果的非组群的度量标准。 使此度量标准发送每个群项的结果作为事件。 创建已组群的其他度量标准,其将从第一个度量标准接收事件,并将这些事件中接收的值作为结果。 此处的思想是大量原始数据事件将由非组群的度量标准处理,且组群的度量标准将处理每个群项在每个期间的单个事件。
| 版权所有 © 2012 CA。 保留所有权利。 | 就该主题发送电子邮件至 CA Technologies |