2.3.13 窓口となるTP1/Serverの負荷分散

CUPから一斉にサービスを要求した場合,一つの窓口となるTP1/Serverのネームサービスに問い合わせが集中してしまうので,負荷が集中してしまうことになります。しかし,TP1/Clientが複数の窓口となるTP1/Serverの中からランダムに選択すれば,窓口となるTP1/Serverへの負荷を分散できます。

<この項の構成>
(1) 窓口となるTP1/Serverをランダムに選択する
(2) 窓口となるTP1/Serverを優先して負荷分散する

(1) 窓口となるTP1/Serverをランダムに選択する

窓口となるTP1/Serverをランダムに選択するには,クライアント環境定義DCHOSTSELECTにYを指定します。

CUPからサービスを要求する場合,クライアント環境定義DCHOSTに指定された窓口となるTP1/Serverのネームサービスに,要求するサービスがどのノードにあるかを問い合わせます。

複数の窓口となるTP1/Serverを指定している場合,TP1/Clientは先頭に指定したTP1/Serverのネームサービスに最初に問い合わせます。先頭に指定したTP1/Serverが起動していないなどの理由で,サービス要求が受け付けられない場合だけ,その次に指定された窓口となるTP1/Serverに切り替えを試みます。

(2) 窓口となるTP1/Serverを優先して負荷分散する

TP1/Serverでは,サービス要求を各ノードに振り分けてノード間の負荷を分散しています。これによって,サービス要求を受け付けたノードのスケジュールサービスは,負荷を分散させるために,別のノードにあるTP1/Serverにサービス要求を転送する場合があります。

しかし,TP1/Client側で窓口となるTP1/Serverをランダムに選択していた場合は,すでに選択された窓口となるTP1/Serverから,さらに別のノードにあるTP1/Serverへ振り分けられることになります。このため,オーバヘッドが掛かることがあります。

このような現象を回避するために,TP1/Client側で選択した窓口となるTP1/Serverを優先して負荷を分散できます。窓口となるTP1/Serverを優先して負荷を分散するには,クライアント環境定義DCSCDLOADPRIORITYにYを指定します。

この定義は,ネームサービスを使用しないRPCを行う場合(クライアント環境定義DCSCDDIRECTにYを指定)だけ,有効です。

注意事項
窓口となるTP1/Serverを優先して負荷分散した場合,あるノードのTP1/Serverが障害によって停止すると,そのTP1/Serverを窓口としていたTP1/Clientは,別の窓口となるTP1/Serverに切り替えます。その後,停止したTP1/Serverが再起動されても,TP1/Clientは現時点で窓口となっているTP1/Serverを優先します。そのため,再起動したTP1/Serverは,負荷が低い状態であっても,このTP1/Clientからのサービス要求が入りにくくなります。
なお,窓口としているTP1/Serverを変えるには,クライアントユーザの認証解除(dc_clt_cltout関数またはdc_clt_cltout_s関数)およびクライアントユーザの認証要求(dc_clt_cltin_s関数)の再実行が必要です。これによって,再起動したTP1/Serverが窓口となるTP1/Serverに割り当てられることがあります。