2.1.4 RPCの種類
Client .NETでは,次のRPCを使用できます。
-
リモートAPI機能を使用したRPC
-
ネームサービスを使用したRPC
-
スケジューラダイレクト機能を使用したRPC
-
通信先を指定したRPC
(1) リモートAPI機能を使用したRPC
リモートAPI機能を使って,クライアント側のノードにあるUAPが発行したAPIを,OpenTP1がサーバ側に転送してサーバ側のプロセスで代理実行することができます。
リモートAPI機能を要求するクライアント側のノードにあるUAPをrapクライアントといいます。rapクライアントが発行したAPIを,OpenTP1のrapリスナーが受け付け,rapサーバがサーバ側のノードで実行します。rapリスナー,rapサーバはOpenTP1のユーザサービスとして動作します。
リモートAPI機能を使用したRPCでは,OpenTP1上のrapサーバを経由してサービスを要求します。リモートAPI機能を使用すると,Client .NETから確立したコネクションを常に使用してサービスの要求や応答の受信ができます。したがって,ファイアウォールの内側にあるUAPに対しても,サービスを要求できます。なお,リモートAPI機能を使用したRPCは,TP1/Serverのほかに,DCCM3およびTMS-4V/SPを使用できます。
リモートAPI機能を使用したRPCを行う場合は,必ず常設コネクションを確立してください。常設コネクションについては,「2.2 常設コネクション」を参照してください。
リモートAPI機能を使用したRPCを行う場合で,OpenRpcメソッドを呼び出すときは,Client .NET構成定義の<rpc>要素のuse属性にrapを指定し,かつClient .NET構成定義の<rapService>要素を指定します。
リモートAPI機能を使用したサービス要求の流れを次に示します。
-
TP1Clientクラスのインスタンスを作成します。
-
OpenConnectionメソッドを呼び出し,OpenTP1上のrapリスナーを経由して,rapサーバとの間に常設コネクションを確立します。
-
Callメソッドを呼び出して,rapサーバ経由で該当するSPP.NETまたはSPPにサービスを要求します。
-
CloseConnectionメソッドを呼び出して,OpenTP1上のrapサーバとの間の常設コネクションを解放します。
(2) ネームサービスを使用したRPC
OpenTP1のネームサービスを使用したRPCを発行できます。
ネームサービスを使用したRPCでは,サービスを要求する前にOpenRpcメソッドを呼び出す必要があります。また,CUP.NETの実行の最後にCloseRpcメソッドを呼び出す必要があります。
ネームサービスを使用したRPCの流れと,RPCごとにサービス要求先スケジューラを分散させる場合の定義について説明します。
(a) ネームサービスを使用したRPCの流れ
ネームサービスを使用したRPCを行う場合は,Client .NET構成定義の<rpc>要素のuse属性にnamを指定し,かつClient .NET構成定義の<nameService>要素を指定します。
ネームサービスを使用したサービス要求の流れを次に示します。
-
TP1Clientクラスのインスタンスを作成します。
-
OpenRpcメソッドを呼び出して,CUP.NETのRPC環境を初期化します。
-
Callメソッドを呼び出して,該当するSPP.NETまたはSPPにサービスを要求します。※
-
Callメソッドを呼び出して,Client .NETのキャッシュを検索し,該当するSPP.NETまたはSPPにサービスを要求します。
-
CloseRpcメソッドを呼び出して,RPC環境を解放します。
- 注※
-
Callメソッド内部の処理の流れを次に示します。
-
指定されたnamサーバに対してコネクションを確立します。
-
namサーバにサービス情報取得要求を送信し,namサーバとの間で確立したコネクションを解放します。
-
namサーバから応答メッセージ送信用のコネクション確立要求を受信後,コネクションを確立してサービス情報を受信します。
-
サービス情報の受信後,namサーバとのコネクションを解放します。
-
namサーバからの応答メッセージ中のサービス情報をClient .NETのキャッシュに格納し,その情報を基に,サービスを実行しているOpenTP1上のscdサーバに対してコネクションを確立します。
-
scdサーバとのコネクション確立後,サービス要求メッセージを送信してコネクションを切断します。
-
SPP.NETまたはSPPから応答メッセージ送信用のコネクション確立要求を受信後,コネクションを確立して応答メッセージを受信します。
-
SPP.NETまたはSPPとの間で確立したコネクションを解放します。
-
(b) RPCごとにサービス要求先スケジューラを分散させる場合の定義
ネームサービスを使用したRPCでは,サービス要求先スケジューラの情報をネームサーバからキャッシュに格納し,キャッシュの情報を参照してRPCごとにサービス要求先スケジューラを分散させることができます。RPCごとにサービス要求先スケジューラを分散させる場合のClient .NET側,TP1/Server側の関連する定義について説明します。
■ Client .NET側の定義
RPCごとにサービス要求先スケジューラを分散させる場合は,<nameService>要素のloadBalance属性にtrueを指定します。
これによって,Client .NETは,ネームサーバから複数のサービス要求先スケジューラの情報を取得し,負荷レベルが最も低いサービス要求先スケジューラの情報をキャッシュに格納します。キャッシュに格納されるサービス要求先スケジューラは,一つだけではなく,複数の場合もあります。
キャッシュに格納されたサービス要求先スケジューラが複数ある場合,最初のサービス要求先スケジューラは,ランダムに選択されます。RPCでのサービス要求が2度目以降の場合は,サービス要求先スケジューラの情報を取得するためにキャッシュを参照し,RPCごとにラウンドロビン方式でサービス要求先スケジューラを切り替え,分散させます。
- キャッシュの有効期限の指定
-
<nameService>要素のcacheTime属性で,サービス要求先スケジューラの情報を保持する,キャッシュの有効期限を指定できます。
キャッシュにサービス要求先スケジューラの情報を格納したあとで,キャッシュの有効期限を満了した場合,そのサービス要求先スケジューラの情報を破棄します。その後,サービス要求先スケジューラの情報を再度取得して,その情報をキャッシュに格納することで,キャッシュを更新します。
<nameService>要素のcacheTime属性は,<nameService>要素のloadBalance属性にtrueを指定した場合だけ有効になります。
■ TP1/Server側の定義
次に示すTP1/Server側の定義のオペランドを指定すると,ネームサーバからサービス要求先スケジューラの情報を取得するときに,スケジューラの負荷情報も同時に取得します。
- スケジュールサービス定義
-
-
scd_announce_server_status=Y(デフォルト)※1
-
- ユーザサービス定義,またはユーザサービスデフォルト定義
-
-
loadcheck_interval
-
levelup_queue_count※2
-
leveldown_queue_count※2
- 注※1
-
このオペランドにNを指定した場合,スケジューラの負荷レベルは常にLEVEL0(負荷が低い状態)になります。負荷レベルが常にLEVEL0のスケジューラが,Client .NETのサービス要求先スケジューラになった場合,実際の負荷状態に関係なく,常にサービス要求先スケジューラとして選択されます。
- 注※2
-
負荷レベルがサービス要求の滞留数で決まる方式とする場合に指定します。
-
上記の定義の詳細については,マニュアル「OpenTP1 システム定義」を参照してください。
(c) マルチホームドホスト形態のTP1/Serverに対してRPCを行う場合の定義
ネームサービスを使用したRPCでは,通信先TP1/Serverがマルチホームドホスト形態の場合に通信障害が発生することがあります。これは,CUP.NETが存在するネットワークから,通信先TP1/Serverのシステム共通定義のmy_hostオペランドで指定したホスト名(IPアドレス)に対応するネットワークアダプタに通信できないことが原因です。
これを回避するためには,Client .NET側で,<nameService>要素のmultiHomedHost属性にtrueを指定します。ネットワークの構成例を次の図に二つ示し,それぞれのネットワーク構成でのmultiHomedHost属性の定義の要否を示します。
ネットワーク構成例2のCUP.NETがIPアドレス4と通信するには,<nameService>要素のmultiHomedHost属性にtrueの指定が必要です。この指定がない場合,CUP.NETとIPアドレス4との間では通信障害が発生します。
通信先TP1/Serverがマルチホームドホスト形態で,かつ同じTP1/Server上にサービス要求先のSPPが存在しているときは,<nameService>要素のmultiHomedHost属性にtrueを指定することでRPCが行えるようになります。通信先TP1/Serverのシステム共通定義のall_nodeオペランドに,CUP.NETが接続されていないネットワーク上に存在するTP1/Serverが指定されている場合,このTP1/Server上のSPPに対してRPCを行うと通信障害が発生します。なお,通信先TP1/Serverがマルチホームドホスト形態でない場合,multiHomedHost属性の指定に関係なく,RPCを行えます。
(3) スケジューラダイレクト機能を使用したRPC
スケジューラダイレクト機能を使用すると,RPCの実行時にOpenTP1のネームサービスを使用しないで,直接スケジューラサービスに問い合わせることができます。
スケジューラダイレクト機能を使用したRPCでは,サービスを要求する前にOpenRpcメソッドを呼び出す必要があります。また,CUP.NETの実行の最後にCloseRpcメソッドを呼び出す必要があります。
スケジューラダイレクト機能を使用したRPCの流れと,RPCごとにサービス要求先スケジューラを分散させる場合の定義について説明します。
(a) スケジューラダイレクト機能を使用したRPCの流れ
スケジューラダイレクト機能を使用したRPCを行う場合は,Client .NET構成定義の<rpc>要素のuse属性にscdを指定し,かつClient .NET構成定義の<scheduleService>要素を指定します。
スケジューラダイレクト機能を使用したサービス要求の流れを次に示します。
-
TP1Clientクラスのインスタンスを作成します。
-
OpenRpcメソッドを呼び出して,CUP.NETのRPC環境を初期化します。
-
Callメソッドを呼び出して,該当するSPP.NETまたはSPPにサービスを要求します。※
-
CloseRpcメソッドを呼び出して,RPC環境を解放します。
- 注※
-
Callメソッド内部の処理の流れを次に示します。
-
指定されたscdサーバに対してコネクションを確立します。
-
scdサーバとのコネクション確立後,サービス要求メッセージを送信してコネクションを切断します。
-
SPP.NETまたはSPPから応答メッセージ送信用のコネクション確立要求を受信後,コネクションを確立して応答メッセージを受信します。
-
SPP.NETまたはSPPとの間で確立したコネクションを解放します。
-
(b) RPCごとにサービス要求先スケジューラを分散させる場合の定義
スケジューラダイレクト機能を使用したRPCでは,RPCごとにラウンドロビン方式でサービス要求先スケジューラを切り替え,分散させることができます。RPCごとにサービス要求先スケジューラを分散させる場合は,<scheduleService>要素のhostChange属性にtrueを指定してください。