プール・サイズとアクター・プール・サイズ
概要
プロダクションのアクター・プール・サイズおよび各ビジネス・ホストのプール・サイズの選択により、そのプロダクションでどのタイプの作業を実行できるか、およびその作業で使用できるジョブの数が決まります。これらの数値は、プロダクション設計の基本的な要素であり、プロダクションの導入が済んで実稼働に移った後で調整が必要になる数値ではありません。大きな値が必ずしも役に立つわけではありません。ほとんどのプール・サイズは 0 または 1 が最適で、1 を超える値に設定すると深刻な結果を招く場合があります。
ビジネス・ホストのプライベート・プール・サイズ
ビジネス・サービス、ビジネス・プロセス、またはビジネス・オペレーションでは、それぞれ専用に、割り当てられたジョブのプライベート・プールを設定できます。管理ポータルでこのプールのサイズを構成できます。プロダクションのテスト時に、ビジネス・ホストに対して 100 を超えるジョブが必要であった場合、ボトルネックやデッドロックなど、別の種類の問題に対処すべきであることを示している可能性があります。これが処理上のボトルネックであるとしたら、プール・サイズを CPU 数より大きくする意味がありません。
InterSystems IRIS では、アダプタ不要型ビジネス・サービスについては、プール・サイズを 0 にします。これは、受信アダプタによる通常の方法で要求を受け取るビジネス・サービスではなく、InterSystems IRIS の外部から直接呼び出されるビジネス・サービスです。アダプタ不要型ビジネス・サービスは、InterSystems IRIS 言語バインディング、CSP ページ、SOAP、またはオペレーティング・システム・レベルから呼び出されるルーチンを介して呼び出すことができます。詳細は、"プロダクションの開発" の "ビジネス・サービスの直接呼び出し" を参照してください。
ビジネス・オペレーションがキュー内ではなくプロセス内で実行されるように設定した場合は、そのビジネス・オペレーションのバックグラウンド・ジョブやメッセージ・キューは自動的に作成されません。代わりに、要求がこのビジネス・オペレーションに送信されるたびに、呼び出し側のジョブ内でこのビジネス・オペレーションがプロダクションによってインスタンス化されて、そのメソッドもそのジョブ内で呼び出されます。そのため、ジョブ・プールは必要なく、ビジネス・オペレーションの [プールサイズ] を 0 に設定する必要があります。
他のすべてのタイプのビジネス・サービスまたはビジネス・オペレーションの場合、プール・サイズを 0 に設定すると、ビジネス・ホストは実行されません。
プロダクションのビジネス・プロセスのアクター・プール・サイズ
ビジネス・プロセスでは、他のタイプのビジネス・ホストと異なり、パブリック・プール内のジョブを共有できます。このプールは、アクター・プールまたは Ens.Actor と呼ばれます。プロダクションの [アクター・プール・サイズ] を構成できます。プロダクション全体のアクター・プールに含まれるアクターは、特定のビジネス・プロセスとの関係を持たず、またそれらのプロセスで事前に認識されていることもありません。プライベート・プール・サイズが 0 のビジネス・プロセスでは、パブリック・アクター・プールにあるジョブを使用できます。
ビジネス・プロセスで独自のプライベート・プールまたはパブリック・プールを使用するかどうかは、プロダクションのニーズによって決まります。プライベートのプール・サイズに 0 以外の値を指定すると、ビジネス・プロセスではプライベート・プールにあるジョブのみを使用するようになります。ビジネス・プロセスでアクター・プールのジョブを使用する場合は、そのプライベートのプール・サイズを 0 に設定する必要があります。既定のプロダクション構成では、各ビジネス・ホストのプライベート・プールでジョブを 1 つ、プロダクション全体のアクター・プールでジョブを 2 つ使用できます。つまり、ビジネス・プロセスでアクター・プールを共有する場合は、自動的には共有されることはないので、ビジネス・プロセスごとにプール・サイズを 0 に設定する必要があります。
ビジネス・プロセスを無効にした場合、結果はそのプライベートのプール・サイズの構成設定によって異なります。
-
ビジネス・プロセスの [プール・サイズ] > 0 :
このビジネス・プロセスは、プライベート・プールからのジョブのみを使用します。ビジネス・プロセスの構成ページにある [有効] チェックボックスのチェックを外して、このプロセスのみを無効にできます。
-
ビジネス・プロセスの [プール・サイズ] = 0 :
プール・サイズが 0 のビジネス・プロセスを無効にすることはできません。これにより、共有アクター・プールを使用しているすべてのビジネス・プロセスが停止されるためです。ビジネス・プロセスを無効にする場合は、まずプール・サイズを > 0 に設定し、そのビジネス・プロセスが専用のキューを使用するようにします。共有アクター・プールを使用してすべてのビジネス・プロセスを停止する場合は、[プロダクション設定] タブの [アクター・プール・サイズ] を 0 に設定します。
プール・サイズ変更の影響
ビジネス・ホストの [プールサイズ] が 1 以上の場合、そのビジネス・ホストのキューには、ビジネス・ホストと同じ名前が付けられます。ビジネス・プロセスの [プールサイズ] の設定を 0 に変更すると、ビジネス・ホストは共有キュー Ens.ActorOpens in a new tab を使用するようになります。キューを見慣れているユーザの場合、これは混乱を招く可能性があります。
医療用途向けの先入れ先出し (FIFO)
プライベート・プール・サイズを 1 に設定すると、先入れ先出し (FIFO) 処理が可能になります。プロダクションにあるビジネス・ホストすべてで使用できるジョブが 1 つのみの場合、ホストごとに一度に処理できるメッセージは 1 つのみになります。これにより、指定されたソースからのメッセージごとにプロダクションを介して可能なパスは 1 つのみになるため、各メッセージは設定された宛先に、送信されたときと必ず同じ順序で到着します。FIFO が保証されていない状態では、同じソースから送信されたメッセージのうちのあるメッセージが、高速の並列ジョブを使用して宛先に短時間で到着することにより、他のメッセージを飛び越える可能性があります。
このため、医療用途のメッセージ・ルーティング・プロダクションでは、すべてのビジネス・サービス、ビジネス・プロセス、およびビジネス・オペレーションの [プール・サイズ] を 1 に設定し、プロダクションの [アクター・プール・サイズ] を 0 に設定することをお勧めします。
BPL ビジネス・プロセスに対して FIFO を保証するには、[プールサイズ] を 1 に設定することに加えて、次のいずれかを実行してください。
-
<code> SendRequestSync() 呼び出しを使用して呼び出しを行います。
または
-
ビジネス・プロセス・ロジックの条件分岐から呼び出しを行うことを避けて、かつ、それら自体が FIFO である要素の呼び出しのみを行います。
FIFO の維持およびビジネス・プロセスの開発の詳細は、"基本原理" を参照してください。
医療用途では FIFO が必須です。患者が入院し、治療を必要としていると仮定します。システム A は承認イベント、治療指示の順に送信しますが、システム B が治療指示を先に受信するとします。システム B は承認がなくては指示を処理できないため、指示を受信する際にエラーとなります。これにより、患者の治療が遅れる恐れが出てきます。また、承認イベントがシステム B に到着した後で、承認と治療指示を関連付けるために、情報システムでは複雑なロジックの実行が必要になる可能性があります。
考慮すべき事柄とトレードオフ
医療以外の状況では、低速実行されるビジネス・プロセスも含まれているプロダクション内の高速実行されるビジネス・プロセスに対しては、プライベート・プールを 1 以上のサイズに設定すると有用な場合があります。高速のビジネス・プロセスには、パブリック・アクター・キューで低速のビジネス・プロセスの要求列の後に要求がスタックしないように、プライベート・プールを持たせます。
プロダクションの各ビジネス・プロセスにプライベート・プールがある場合は、プロダクションのアクター・プール・サイズを 0 に設定できます。一方、パブリック・アクター・プールを使用するビジネス・プロセスが多数存在するプロダクションの場合、プロダクションのアクター・プール・サイズをデフォルトの 2 よりも大きな値に変更すると、多数のビジネス・プロセスを実行したときにボトルネックの発生を回避できます。一般的には、最大値として、アクター・プール・サイズには InterSystems IRIS サーバの CPU の数と同じ値を設定します。これよりも大きな数を設定できますが、どのような場合でも、同時に実行できるジョブの数は CPU の数が上限となります。