OpenTP1では,RPCによる要求が特定のノードに集中しないようにノード間で負荷を分散する機能があります。これをノード間負荷バランス機能といいます。
ノード間負荷バランス機能を使用するためには,負荷分散の前提として次の条件を満たしている必要があります。
ここでは,OpenTP1のノード間負荷バランス機能を使用する場合のクライアント側,サーバ側の関連する定義と処理,およびRPCの処理の内容を説明します。
TP1/Serverのスケジュールサービスが,ノードのスケジュール状態に応じて,より効率的に処理できるノードへ負荷を分散させます。
クライアント環境定義に「dcscddirect=Y」を定義します。
これによって,クライアント側はTP1/Serverのスケジュールサービスに負荷分散を依頼できます。クライアント側の定義では,どのOpenTP1ノードのスケジュールサービスに判断を依頼するかを指定します。
この場合,スケジュールを依頼するOpenTP1ノードは,dchostオペランドに指定された順番にスケジュールを依頼します。dchostオペランドに書かれた順番ではなく,ランダムにOpenTP1ノードがスケジュールを依頼するように設定するには,さらに「dchostselect=Y」を定義に追加する必要があります。
サーバ側の定義では,次のどちらかを設定する必要があります。
この機能を使用する場合は,次の定義を指定してください。
この指定によって,クライアント側で,サーバから得たサーバの負荷レベルを基に,サービス要求を行うOpenTP1ノードを決めてRPCを実行します。
この場合,クライアントでは窓口となるTP1/Serverのネームサービスにサービス情報を問い合わせたあと,サーバの負荷レベルを含むサービス情報を,クライアント環境定義DCCACHEで指定された大きさのキャッシュ領域に一時的に保持します。
クライアントからのRPC実行時に,このキャッシュ領域中に該当するサービス情報が存在する場合には,窓口となるTP1/Serverのネームサービスに対してサービス情報の問い合わせを行いません。
クライアントではLRU(Least Recently Used)方式でキャッシュを管理しているため,キャッシュ領域が不足した場合には参照されていないサービス情報から順に削除します。また,クライアント環境定義DCCLTCACHETIMに指定した有効時間が過ぎたサービス情報は,RPC実行時にキャッシュ領域から削除され,ネームサービスに対してサービス情報を問い合わせます。
クライアント環境定義DCCACHEの指定値を大きくすると,多くのサービス情報を格納でき,窓口となるTP1/Serverのネームサービスとの通信回数を削減できます。その反面,多くのキャッシュ領域中からサービス情報を検索するのでオーバヘッドが掛かります。
クライアント環境定義DCCACHEの指定値を小さくすると,キャッシュ領域に該当するSPPの各ノードのサービス情報が入りきらないことがあります。その場合は,クライアントから再度RPCを実行しても,キャッシュ領域に入りきらなかったノードのSPPに対してはRPC要求を実行しません。
クライアント環境定義DCCLTCACHETIMの指定値を小さくすると,古いサービス情報はただちに削除され,窓口となるTP1/Serverのネームサービスに新しいサービス情報を問い合わせます。この場合,常に最新のサービス情報をキャッシュ領域に保持できるため,サーバの負荷に応じてRPC要求を振り分けられます。その反面,ネームサービスとの通信回数が増え,また,キャッシュ領域の書き換え処理にもオーバヘッドが掛かります。
クライアント環境定義DCCLTCACHETIMの指定値を大きくすると,窓口となるTP1/Serverのネームサービスとの通信回数を削減できます。その反面,SPPの状態変化への対応が遅れるため,起動していないSPPに対してRPC要求を実行してしまうことがあります。この場合は,別のSPPに対してRPC要求を実行する前に,キャッシュ領域中の該当するサービス情報を削除し,窓口となるTP1/Serverのネームサービスに対して,該当するサービス情報の削除要求をします。
サーバが129以上のマルチノードサーバ構成で,窓口となるTP1/Serverでネームサービス定義に「nam_service_extend=1」を指定している場合,クライアント環境定義に「DCCLTNAMEXTEND=1」を指定してください。この定義の指定で,クライアントがネームサービスから一度に取得できるサービス情報の最大数を128個から512個に拡張できます。
負荷バランス機能と別の機能を組み合わせた場合の動作を,次の表に示します。
表2-1 ノード間負荷バランス機能と別機能を組み合わせた場合の動作
組み合わせる機能 | 動作 |
---|---|
クライアントで常設コネクションを使用した場合 | サーバ側のCUP実行プロセスが,常設コネクションを張ったノードでRPCを行う |
クライアントでトランザクション制御APIを使用した場合 | サーバ側のトランザクション代理実行プロセスがRPCを行う |
リモートAPI機能を使用した場合 | サーバ側のrapサーバがRPCを行う |