上一主题: 编写生效的业务逻辑示例

下一主题: 案例研究 16:业务逻辑设计模式

案例研究 15:组群的度量标准

通常,在介绍特定软件时,可分两部分进行说明:含义和方法。 “含义”是指此段代码内容的说明。 “方法”是指它如何实现其功能。 存在一种专注于“含义”部分,而忽略“方法”部分的倾向。 产生这种倾向的原因很简单,且在大多数情况下是合理的。 这样做,可以减少组件间的耦合,且不会干涉您关注多数情况下无关的信息。 但在大多数棘手的情况下,忽略“方法”部分会对成本产生负面影响。

此案例研究讨论了引擎正在计算组群的度量标准的方法(回答“方法”部分),并介绍了在特定实施上所暗示的性能成本。 还讨论了通过更改实施降低此成本的多种方法。

什么是组群的度量标准

组群的度量标准是在其定义中嵌入特定资源组的度量标准。 此组称为度量标准群,该组中的每个资源称为群项。 在计算组群的度量标准时,会为每个群项执行单独计算。 除以下内容外,每个群项的计算都彼此类似:

如何计算组群的度量标准

对于组群的度量标准的计算,需要重点了解的一点是,所有群项都并行计算。 并行并不表示通过其他线程计算,但是在处理应由多个群项处理的事件时,会按顺序处理这些事件,并为每个事件调用相关群项,而这些群项会处理该事件。 例如,存在多个应由多个群项处理的事件。 可通过以下两种方式执行此操作:

示例:选项 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)称为“上下文切换”。

在上述代码中可以轻松看到的两个主要问题是:

重新计算组群的度量标准

上下文切换