クラスター化: 複数のクラスター伝送キューの使用によるアプリケーションの分離
クラスター内のキュー・マネージャー間のメッセージ・フローは、分離することができます。 さまざまなクラスター送信側チャネルによって転送されるメッセージを、それぞれに異なるクラスター伝送キューに配置できます。 この手法は、単一のクラスターでも、オーバーラップするクラスターでも使用できます。 このトピックでは、使用する手法を選択する際に参考となる例およびベスト・プラクティスを説明します。
アプリケーションをデプロイするときには、どの IBM® MQ リソースを他のアプリケーションと共有するか、どのリソースを共有しないかを選択できます。 共有できるリソースには、さまざまなタイプがあります。そのうち主なタイプは、サーバー自体、キュー・マネージャー、チャネル、およびキューです。 少ない数の共有リソースでアプリケーションを構成し、個々のアプリケーションに個別のキュー、チャネル、キュー・マネージャー、さらにはサーバーを割り振るという方法があります。 この方法では、システム構成全体が大きくなり、複雑さも増してきます。 IBM MQ クラスターを使用すると、多数のサーバー、キュー・マネージャー・キュー、およびチャネルを管理する場合の複雑さは軽減されますが、別の共有リソースであるクラスター伝送キュー SYSTEM.CLUSTER.TRANSMIT.QUEUE が導入されます。
図 1 は、 SYSTEM.CLUSTER.TRANSMIT.QUEUEの共有の重要性を示す大規模な IBM MQ デプロイメントのスライスです。 この図のアプリケーション Client App は、クラスター CL1 内のキュー・マネージャー QM2 に接続されています。 Client App からのメッセージは、アプリケーション Server App によって処理されます。 このメッセージは、Server App が CLUSTER2 内のキュー・マネージャー QM3 にあるクラスター・キュー Q1 から取得します。 クライアント・アプリケーションとサーバー・アプリケーションは同じクラスター内に配置されていないため、メッセージはゲートウェイ・キュー・マネージャー QM1 によって転送されます。
クラスター・ゲートウェイを構成する通常の方法は、ゲートウェイ・キュー・マネージャーをすべてのクラスターのメンバーにすることです。 ゲートウェイ・キュー・マネージャーには、すべてのクラスター内のクラスター・キューに対応するクラスター別名キューを定義します。 クラスター化されたキュー別名は、すべてのクラスター内で使用可能になります。 クラスター化されたキュー別名に入れられたメッセージは、ゲートウェイ・キュー・マネージャーを介して、それぞれの正しい宛先にルーティングされます。 ゲートウェイ・キュー・マネージャーは、クラスター別名キューに送信されたメッセージを QM1 上の共通 SYSTEM.CLUSTER.TRANSMIT.QUEUE に入れます。
ハブ・スポーク・アーキテクチャーでは、クラスター間のすべてのメッセージが、ゲートウェイ・キュー・マネージャーを通過しなければなりません。 したがって、すべてのメッセージ・フローが、QM1 上の 1 つのクラスター伝送キュー SYSTEM.CLUSTER.TRANSMIT.QUEUE を通過することになります。
パフォーマンスの観点からすると、キューが 1 つでも問題にはなりません。 共通伝送キューは、一般にパフォーマンス・ボトルネックを意味しません。 ゲートウェイでのメッセージ・スループットは、主にそのゲートウェイに接続するチャネルのパフォーマンスによって決まります。 キューの数やチャネルが使用するキューに置かれたメッセージの数は通常、スループットに影響を与えません。
- ある宛先へのメッセージ・フローを、別の宛先へのメッセージ・フローから分離することができません。 メッセージがそれぞれに異なるクラスター内の異なるキュー・マネージャーを宛先としているとしても、メッセージのストレージを分離してからメッセージを転送することは不可能です。
1 つのクラスター宛先が使用不可になると、その宛先のメッセージが単一の伝送キューに蓄積され、最終的には、その伝送キューがこれらのメッセージで満杯になってしまいます。 伝送キューが満杯になると、あらゆるクラスター宛先の伝送キューへのメッセージの配置が中断されます。
- さまざまなクラスター宛先へのメッセージの転送をモニターするのは容易ではありません。 すべてのメッセージは、単一の伝送キューに配置されます。 伝送キューの深さを表示しても、すべての宛先にメッセージが転送されているかどうかは、ほとんど明らかになりません。

SYSTEM.CLUSTER.TRANSMIT.QUEUE からクラスター送信側チャネルへの潜在的メッセージ・フローです。 黒の破線は、ラベルをそのターゲットに結びます。 グレーの破線の矢印は参照です。例えば、 Client App による MQOPEN 呼び出しからクラスター別名キュー定義 Q1Aへの参照です。図 1では、 Server App のクライアントがキュー Q1Aを開きます。 QM2 の SYSTEM.CLUSTER.TRANSMIT.QUEUE に入れられたメッセージは、QM1 の SYSTEM.CLUSTER.TRANSMIT.QUEUE に転送されてから、QM3 の Q1 に転送されます。このキューから、Server App アプリケーションはメッセージを受け取ります。
Client App からのメッセージは、QM2 および QM1 のシステム・クラスター伝送キューを通過します。 図 1の目的は、ゲートウェイ・キュー・マネージャー上のメッセージ・フローをクライアント・アプリケーションから分離して、そのメッセージが SYSTEM.CLUSTER.TRANSMIT.QUEUEに保管されないようにすることです。 他のすべてのクラスター・キュー・マネージャーでも、フローを分離できます。 逆の方向で、クライアントに戻るフローを分離することも可能です。 ソリューションの説明を簡潔にするため、以降の説明ではクライアント・アプリケーションからの 1 つのフローのみを検討します。
クラスター・ゲートウェイ・キュー・マネージャーでクラスター・メッセージ・トラフィックを分離するためのソリューション
問題を解決する 1 つの方法は、キュー・マネージャー別名 (リモート・キュー定義) を使用して、クラスター間にブリッジを確立することです。 クラスター化されたリモート・キュー定義、伝送キュー、およびチャネルを作成して、ゲートウェイ・キュー・マネージャー上の各メッセージ・フローを分離します。 ゲートウェイ・キュー・マネージャーから送信されるメッセージを分離するためのリモート・キュー定義の追加を参照してください。
IBM WebSphere® MQ 7.5 以降、クラスター・キュー・マネージャーは単一のクラスター伝送キューに制限されなくなりました。 次のいずれかを選択できます。
- 追加のクラスター伝送キューを手動で定義し、各伝送キューからメッセージを転送するクラスター送信側チャネルを定義します。 ゲートウェイ・キュー・マネージャーから送信されるクラスター・メッセージ・トラフィックを分離するためのクラスター伝送キューの追加を参照してください。
- キュー・マネージャーが追加のクラスター伝送キューを自動的に作成して管理できるようにします。 これは、クラスター送信側チャネルごとに異なるクラスター伝送キューを定義します。 メッセージ・トラフィックを分離するためのクラスター伝送キューを分離するためのデフォルトの変更を参照してください。
一部のクラスター送信側チャネルに手動で定義したクラスター伝送キューは、残りのクラスター送信側チャネルを管理するキュー・マネージャーに結合できます。 伝送キューの組み合わせは、 ゲートウェイ・キュー・マネージャーから送信されるクラスター・メッセージ・トラフィックを分離するためのクラスター伝送キューの追加で採用されているアプローチです。 このソリューションでは、クラスター間のほとんどのメッセージが共通 SYSTEM.CLUSTER.TRANSMIT.QUEUE を使用します。 非常に重要な 1 つのアプリケーションがあり、そのすべてのメッセージ・フローは、手動で定義された 1 つのクラスター伝送キューを使用して他のメッセージ・フローから分離されます。
ゲートウェイ・キュー・マネージャーから送信されるクラスター・メッセージ・トラフィックを分離するためのクラスター送信キューの追加 の構成は制限されています。 あるクラスター・キューへと流れるメッセージ・トラフィックは、同じクラスター内の同じキュー・マネージャー上の別のクラスター・キューへと流れるメッセージ・トラフィックから分離されません。 メッセージ・トラフィックを個々のキューに分離するには、分散キューイングの一部であるリモート・キュー定義を使用することができます。 クラスターでは、複数のクラスター伝送キューを使用して、異なるクラスター送信側チャネルに向かうメッセージ・トラフィックを分離できます。 同じクラスター内の同じキュー・マネージャーにある複数のクラスター・キューは、クラスター送信側チャネルを共有します。 これらのキューのメッセージは、同じ伝送キューに保管された後、ゲートウェイ・キュー・マネージャーから転送されます。 ゲートウェイ・キュー・マネージャーから送信されたクラスター・メッセージ・トラフィックを分離するためのクラスターおよびクラスター送信キューの追加の構成では、別のクラスターを追加し、キュー・マネージャーおよびクラスター・キューを新しいクラスターのメンバーにすることによって、この制限が回避されます。 新しいキュー・マネージャーが、そのクラスター内の唯一のキュー・マネージャーである場合もあります。 クラスターにさらにキュー・マネージャーを追加し、同じクラスターを使用して、これらのキュー・マネージャーでもクラスター・キューを分離するという方法もあります。