Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 解説


3.2.2 サービス情報検索の付加機能

サービス情報検索の付加機能には,グローバル検索機能と,サービス情報優先度指定機能があります。これらの機能を使用すると,OpenTP1システム内で水平分散を利用したサービス要求をしたり,特定のノードのサービス情報を優先的に使用したりできます。

〈この項の構成〉

(1) グローバル検索機能

グローバル検索機能を使用すると,次に示すサービス情報を取得できます。

  1. all_nodeオペランドで指定された各ノードで起動するサービス情報

  2. 1.のノード上のネームサービスが管理する,all_nodeオペランドで起動するサービス情報

グローバル検索機能使用時のシステム構成例を次の図に示します。各OpenTP1ノードのネームサービス定義のname_global_lookupオペランドを次の図のように指定してください。name_global_lookupオペランドの指定方法の詳細については,マニュアル「OpenTP1 システム定義」を参照してください。

図3‒15 グローバル検索機能使用時のシステム構成

[図データ]

OpenTP1-Aからの検索範囲は,OpenTP1-BおよびCのall_nodeオペランドで指定したOpenTP1ノードまでとなります。つまり,OpenTP1システム1だけでなく,OpenTP1システム2および3までのサービスと通信できるようになります。なお,OpenTP1-D,E,FおよびGのall_nodeオペランドで指定したノードは検索対象となりません。

グローバル検索機能を使用した環境では,DCRPC_BINDTBL_SET関数の引数portnoにネームサービスのポート番号を指定した,dc_rpc_call_to関数は使用できません。

DCRPC_BINDTBL_SET関数の引数nidにノード識別子を指定した,dc_rpc_call_to関数を使用する場合は,必ずグローバル検索機能の検索範囲(図のOpenTP1システム1〜3)内のすべてのOpenTP1ノードのノード識別子を一意に定義してください。

サービス情報(閉塞,負荷状態など)は,検索元OpenTP1(図のOpenTP1-A)まで通知されないため,OpenTP1システム2内のOpenTP1-DとEの間,およびOpenTP1システム3内のOpenTP1-FとGの間のように,OpenTP1システム内で相互にall_nodeオペランドを指定し合い,水平分散を利用したサービス要求を行うことをお勧めします。

ネームサービス定義のname_cache_sizeオペランドの指定値は,自ノードから検索を要求するサービス情報の数に,all_nodeオペランドで指定されたノードにキャッシュされるサービス情報の数まで含めて算出する必要があります。

グローバル検索機能を使用したOpenTP1(図のOpenTP1-A)に対し,TP1/Client/P,TP1/Client/WまたはTP1/Client/Jからサービス要求が送信された場合,OpenTP1システム1だけでなく,OpenTP1システム2および3のサービス情報まで取得します。

(2) サービス情報優先度指定機能

サービス情報優先度指定機能とは,ネームサービスがサービス要求元のクライアントUAPにサービス情報を返すときに,特定のノードのサービス情報を優先的に返す機能です。サービス情報を優先的に返すノードを,優先選択ノードと呼びます。

通常のRPCを実行する場合,高負荷などの状態を除き,クライアントUAPのサービス要求を処理するサーバUAPが複数ある場合には,それらを同じ優先度で扱います。このため,システム共通定義のall_nodeオペランドに指定したすべてのノードのネームサービスに対してサービス情報の検索要求を送信し,応答によって取得したすべてのサービス情報をクライアントUAPに返します。クライアントUAPは,返ってきたサービス情報の中からRPCのあて先となるサーバUAPをランダムに選び出し,RPCを実行します。

これに対して,サービス情報優先度指定機能を使用すると,クライアントUAPのサービス要求を処理するサーバUAPが複数ある場合には,優先選択ノードのサービス情報を優先してクライアントUAPに返します。クライアントUAPは,優先選択ノードのサーバUAPに対してRPCを実行します。また,優先選択ノードでサーバUAPの閉塞などの障害が発生した場合には,優先選択ノード以外のノードのサービス情報をクライアントUAPに返します。このように,サービス情報優先度指定機能を使用すると,通常は優先選択ノードのサーバUAPを使用し,障害が発生した場合だけ優先選択ノード以外のノードのサーバUAPを使用できるため,サーバUAPを実行系と待機系に分けて扱うことができます。

優先選択ノードは,システム共通定義のall_nodeオペランドで指定します。優先選択ノードの定義ファイルの指定方法は,ドメイン定義ファイルの指定と同じです。優先選択ノードの指定方法については,マニュアル「OpenTP1 システム定義」を参照してください。

以降,通常のRPCの流れと,サービス情報優先度指定機能を使用した場合のRPCの流れの違いを説明します。なお,以降の説明のグローバルキャッシュとは,ネームサービスが,他ノードで起動しているサーバのサービス情報を管理する領域を示します。

優先選択ノードのサーバUAPが閉塞していたり,グローバル検索機能を使用したりする場合は,上の図で示したサービス情報優先度指定機能を使用した場合のRPCの流れとは異なります。RPCの流れが異なる場合について,(a)〜(c)で説明します。なお,以降の説明では,ネームサービスの処理を省略しています。

(a) サーバUAPが閉塞している場合のRPCの流れ

優先選択ノードのサーバUAPが閉塞している場合のRPCの流れを次の図に示します。

図3‒18 サーバUAPが閉塞している場合のRPCの流れ

[図データ]

TP1-Aは,TP1-Cを優先選択ノードとして指定していますが,TP1-CのサーバUAPは閉塞しています。TP1-CのサーバUAPの閉塞がTP1-Aに通知されると,TP1-AはTP1-CをRPCのあて先の選択候補から除きます。そのため,TP1-Aは,優先選択ノードに指定していないTP1-BのサーバUAPにRPCを実行します。

注意事項

TP1-CのサーバUAPの閉塞情報がTP1-Aに通知されていない間は,TP1-AはTP1-CのサーバUAPへRPCを実行します。このとき,TP1-Cのシステム共通定義のall_nodeオペランドにTP1-Bを指定していると,TP1-CからTP1-BへRPCが転送されることがあります。一方,TP1-Cのシステム共通定義のall_nodeオペランドにTP1-Bを指定していないときは,RPCはエラーリターンします。

また,閉塞情報はサーバ単位で通知されます。そのため,TP1-CのサーバUAPがサービス単位で閉塞した場合,閉塞情報はTP1-Aに通知されません。したがって,TP1-AはTP1-CのサーバUAPにRPCを実行します。この要求先のサービスが閉塞していた場合,RPCはエラーリターンします。

(b) サーバUAPが高負荷状態になっている場合のRPCの流れ

優先選択ノードのサーバUAPが高負荷状態になっている場合のRPCの流れを次の図に示します。

図3‒19 サーバUAPが高負荷状態になっている場合のRPCの流れ

[図データ]

TP1-Aは優先選択ノードにTP1-Cを指定しているため,TP1-Cで稼働しているサーバUAPがRPCのあて先の選択候補になります。しかし,TP1-CのサーバUAPが高負荷状態であるため,TP1-Cのシステム共通定義のall_nodeオペランドに指定したノードのサーバUAPにRPCを転送します。ここでは,TP1-CからTP1-BのサーバUAPへRPCが転送され,TP1-BのサーバUAPがTP1-AのRPCを実行します。

(c) グローバル検索機能とサービス情報優先度指定機能を併用した場合のRPCの流れ

グローバル検索機能とサービス情報優先度指定機能は,併用できます。この二つの機能を併用した場合,グローバル検索中継ノードを優先選択ノードに指定しているかどうかで,RPCの流れが異なります。

グローバル検索中継ノードを優先選択ノードに指定している場合は,グローバル検索機能の検索範囲の中で指定された優先選択ノードがRPCのあて先になります。グローバル検索中継ノードを優先選択ノードに指定していない場合は,要求元で指定した優先選択ノードがRPCのあて先になります。それぞれの場合について説明します。

  • グローバル検索中継ノードを優先選択ノードに指定した場合のRPCの流れ

    グローバル検索中継ノードを優先選択ノードに指定した場合のRPCの流れを次の図に示します。

    図3‒20 グローバル検索中継ノードを優先選択ノードに指定した場合のRPCの流れ

    [図データ]

    グローバル検索機能を使用しているため,TP1-Aは,TP1-Bを経由して,TP1-Bのシステム共通定義のall_nodeオペランドに指定されているTP1-Cのサービス情報を取得します。

    TP1-Aは優先選択ノードにTP1-Bを指定しているため,TP1-Bのall_nodeオペランドに指定されているTP1-Cのサービス情報が,優先選択ノードで稼働しているものとして扱われます。この結果,TP1-Aは,TP1-Cのサービス情報を優先的に選択します。

    つまり,サービス要求元のノード(TP1-A)での優先度に関係なく,優先選択ノードに指定したグローバル検索中継ノード(TP1-B)を経由して取得したサービス情報(TP1-Cのサービス情報)が,優先選択ノードで稼働しているものとして扱われて,優先的に選択されます。

  • グローバル検索中継ノードを優先選択ノードに指定していない場合のRPCの流れ

    グローバル検索中継ノードを優先選択ノードに指定していない場合のRPCの流れを次の図に示します。

    図3‒21 グローバル検索中継ノードを優先選択ノードに指定していない場合のRPCの流れ

    [図データ]

    グローバル検索機能を使用しているため,TP1-Aは,TP1-Bを経由して,TP1-Bのシステム共通定義のall_nodeオペランドに指定されているTP1-CおよびTP1-Dのサービス情報を取得しようとします。このとき,TP1-Bは,TP1-Bの優先選択ノードであるTP1-Dで稼働しているサービス情報を選択して,TP1-Aに返します。

    この結果,TP1-Aは,優先選択ノードであるTP1-Eを選択します。

    つまり,サービス要求元のノード(TP1-A)での優先度が有効となります。グローバル検索中継ノード(TP1-B)での優先度に関係なく,優先選択ノードではないグローバル検索中継ノード(TP1-B)を経由して取得したサービス情報(TP1-Dのサービス情報)は,選択されません。

(d) サービス情報優先度指定機能を使用する場合の注意事項

サービス情報優先度指定機能を使用する場合の注意事項を次に示します。

  • 優先選択ノードに一つ以上のノードを指定し,かつRPCを実行するノードでもRPC先となるサーバUAPが稼働している場合は,RPCを実行するノードも優先選択ノードになります。

  • dc_rpc_call_to関数を実行した場合,サービス情報優先度指定機能は無効になります。そのため,指定されたホスト名称が示すノードで稼働しているサーバUAPへRPCを実行します。

  • 優先選択ノードで稼働しているサーバUAPがすべて閉塞していた場合,そのノードは優先選択ノードから除きます。そのため,優先選択ノードに指定していないノードで稼働しているサーバUAPへRPCを実行します。

  • 優先選択ノードで稼働しているサーバUAPが高負荷状態の場合,優先選択ノード以外のノードで稼働している同一サービスグループにRPCが転送されてしまうことがあります。そのため,優先選択ノードに指定していないノードで稼働しているサーバUAPでRPCが実行されることがあります。

    高負荷状態の詳細については,「3.4.3(6) ノード間負荷バランス機能」を参照してください。