前のトピック: 効果的なビジネス ロジック例の作成

次のトピック: ケース スタディ 16: ビジネス ロジックの設計パターン

ケース スタディ 15: クラスタ化メトリック

通常、あるソフトウェアを説明するとき、説明は WHAT および HOW の 2 つの部分に分割できます。 WHAT は、この一片のコードが何を実行するかの説明を意味します。 HOW は、どのようにそれを実行するかです。 WHAT の部分に専念し、HOW の部分を無視する傾向があります。 その理由は単純で、多くの場合は正当化されます。 そうすることによって、コンポーネント間の結合を縮小し、多くの場合無関係の情報に煩わされなくなります。 しかし、多くの場合、HOW の部分を無視するのは割に合いません。

このケース スタディでは、エンジンがクラスタ化メトリックを計算する方法(HOW 部分への回答)を説明し、特定の実装について結果として伴うパフォーマンス コストを説明します。 また、実装法を変更することにより、このコストを削減する方法をいくつか説明しています。

クラスタ化メトリックとは

クラスタ化メトリックは、それらの定義内にリソースのあるグループを埋め込んだメトリックです。 このグループはメトリックのクラスタと呼ばれ、そのグループ内のリソースはそれぞれクラスタ アイテムと呼ばれます。 クラスタ化メトリックを計算するとき、それらのクラスタ アイテムに対して個別の計算が実行されます。 それらのクラスタ アイテムそれぞれの計算は次のものを除いて互いに似ています。

クラスタ化メトリックの計算方法

クラスタ化メトリックの計算について理解する必要のある重要なことは、クラスタ アイテムはすべて並行して計算されるということです。 並行ということは、別々のスレッドで計算されるという意味ではなく、さまざまなクラスタ アイテムにより処理される必要のあるさまざまなイベントを処理する間、イベントはシーケンシャルに処理され、それぞれのイベントに対して関連するクラスタ アイテムが呼び出されてこのイベントを処理するということです。 たとえば、多くのクラスタ アイテムによって処理される必要のある多くのイベントがあります。 これを行う方法は 2 とおりあります。

例: オプション 1

各クラスタ アイテム C に対し
     C によって処理される必要のある各イベント E に対し
          C に E を処理させる

例: オプション 2

各イベント E に対し
     E を処理する必要のある各クラスタ アイテム C に対し
          C に E を処理させる

エンジンはオプション 2 を使用して、クラスタ化メトリックを処理します。

理解する必要のある別の重要なポイントは、PslWriter の内部の VBScript は Script Control と呼ばれるコンポーネントによって実行されるということです。 各メトリックについてこのコンポーネントのインスタンスはただ 1 つのみで、このインスタンスはさまざまなクラスタ アイテムの計算に再利用されます。 前に述べたようにクラスタ アイテムは並行に計算され、Script Control コンポーネントは各瞬間に単一のクラスタ アイテムのみを含むことができるので、Script Control コンポーネントの内部のデータを頻繁にスイッチする必要があります。

これについて説明するために、その計算を実行するさらに詳しい疑似コードを下に示します。

1- 各メトリック M に対し
2- X を M によってまだハンドルされていない最初のイベントとする
3- T を X の前の最新の状態のタイム スタンプとする
4- L をタイム スタンプ T から現在の時刻までの、M に登録されたすべてのイベントのリスト(すべてのクラスタ アイテム)とする
5- L 内の各イベント E に対し
6- E を処理する必要のある各クラスタ アイテム C に対し
7- C' を、現在スクリプト コントロールにロードされているクラスタ アイテムとする
8- スクリプト コントロールからグローバル変数の値をとって C'用に別に格納する
9- C 用の別に格納されたグローバル変数の値を取り、スクリプト コントロールにロードする
10- イベント E の処理

まだ考慮に入れられていなくて、次にこのポイントから先の計算を実行するイベントの時間を見つけるこの全工程は、再計算と呼ばれます。 グローバル変数(上記のコードの手順 8 および 9)の値を置換する過程は、コンテキスト スイッチングと呼ばれます。

上記のコード中で容易にわかる、2 つの主要な問題は次のとおりです。

クラスタ化メトリックの再計算

コンテキスト スイッチング