3.1.4 ノード間負荷バランス機能
ノード間負荷バランス機能とは,負荷の軽いサーバを選択してRPCメッセージを送信または転送して,他ノードにある同じサービスグループ名のサーバUAP間でサービス処理の負荷を分散させる機能です。ノード間負荷バランス機能は,ネームサービスが稼働している場合に使用できます。
ノード間負荷バランス機能を使用する場合は,RPC関連定義のrpc_loadbalanceオペランドにYを指定してください。
なお,TP1キャッシュ機能を使用する場合,CLサーバでは実行系だけがノード間負荷バランス機能による監視の対象となります。また,MCPを使用する場合,端末キューに滞留するメッセージについては,ノード間負荷バランス機能による監視の対象外となります。
(1) 負荷レベル
RPCメッセージは,各ノードの負荷レベルに応じて送信されます。次に示す負荷レベルがあります。
-
LEVEL0
小さい負荷です。通常,RPCメッセージはLEVEL0またはLEVEL1のノードに送信されます。
-
LEVEL1
やや大きい負荷です。障害などによるRPCメッセージの再送受信時には,RPCメッセージはLEVEL1のノードに送信されにくくなります。ただし再送受信時にLEVEL1またはLEVEL2のノードしかない場合は,それらのノードに送信されます。
-
LEVEL2
大きい負荷です。通常,RPCメッセージはLEVEL2のノードに送信されません。ただし,LEVEL2のノードしかない場合は,LEVEL2のノードに送信されます。
各ノードの負荷レベルは,負荷レベル監視間隔(RPC関連定義のloadcheck_intervalオペランドで指定)ごとに監視されます。負荷レベルは,ユーザが選択した方法に従って決定されます。
- 注意事項
-
特定のサービスでの,単位時間当たりの処理数※を超えるサービス要求が,複数回の負荷レベル監視にわたって連続して発生した場合は,ノードの負荷が軽いときでも負荷レベルがLEVEL2に遷移します。この場合,処理スレッド数を見直して,サービス引き出しの多重度を上げてください。
- 注※
-
単位時間当たりの処理数は,次に示す計算式から算出される値です。
(1÷1サービス要求を処理する時間)×サービス引き出しの多重度
負荷レベルに変更があった場合は,各ノードのネームサービスに負荷レベルが通知され,サーバ情報が更新されます。
(2) 負荷レベルの決定方法
ユーザは,次に示す負荷レベルの決定方法を選択できます。
-
固定の処理キュー処理率をしきい値とした決定方法
-
ユーザが指定する処理キュー滞留率をしきい値とした決定方法
-
ユーザが指定する処理キュー滞留数をしきい値とした決定方法
負荷レベルの決定方法は,RPC関連定義のloadcheck_typeオペランドで指定します。
- 注意事項
-
負荷レベルの決定方法を選択するときは,次に示す点を考慮してください。
-
TP1キャッシュ機能を使用する場合,処理キューの処理数は同期点処理が完了したときに更新されます。UAPでee_scd_msg_receive関数を呼び出した場合,ee_scd_msg_receive関数で受信した処理キューは,そのサービスが終了するまで滞留しているものと見なされます。サービスが終了したあと,処理数が更新されます。
-
サービス閉塞時に処理キューを引き出し禁止にしている場合(ユーザサービス関連定義のforbid_draw_serviceオペランドにYを指定),閉塞中のサービスの処理キューの滞留数は減少しません。そのため,負荷レベルが高くなることがあります。
-
(a) 固定の処理キュー処理率をしきい値とした決定方法
今回の負荷レベルは,前回の負荷レベル,およびノード間負荷バランスで使用する処理キュー処理率によって決定されます。処理キュー処理率とは,次に示す計算式から算出される処理率です。
処理キュー処理率=(負荷レベル監視間隔中に処理された処理キューの数÷前回の負荷レベルチェック時の処理キュー滞留数)×100
負荷レベルと処理キュー処理率について次の表に示します。
|
前回の負荷レベル |
処理キュー処理率:q |
今回の負荷レベル |
|---|---|---|
|
LEVEL0 |
50 ≦ q |
LEVEL0 |
|
q < 50 |
LEVEL1 |
|
|
LEVEL1 |
75 ≦ q |
LEVEL0 |
|
50 ≦ q < 75 |
LEVEL1 |
|
|
q < 50 |
LEVEL2 |
|
|
LEVEL2 |
q = 100 |
LEVEL0 |
|
q < 100 |
LEVEL2 |
固定の処理キュー処理率をしきい値とした決定方法での,負荷レベルが遷移する例を次の図に示します。
|
|
負荷レベルが遷移する負荷レベル監視のチェックポイントごとに説明します。
- C2(LEVEL0からLEVEL1への負荷レベルの遷移)
-
C1時点の処理キュー滞留数(P1)に対する,C1からC2までの負荷レベル監視間隔中に処理された処理キューの数(S1)の割合である処理キュー処理率が50%未満になったため,負荷レベルはLEVEL0からLEVEL1に遷移します。
- C4(LEVEL1からLEVEL2への負荷レベルの遷移)
-
C3時点の処理キュー滞留数(P3)に対する,C3からC4までの負荷レベル監視間隔中に処理された処理キューの数(S3)の割合である処理キュー処理率が50%未満になったため,負荷レベルはLEVEL1からLEVEL2に遷移します。
- C6(LEVEL2からLEVEL0への負荷レベルの遷移)
-
C5時点の処理キュー滞留数(P5)に対する,C5からC6までの負荷レベル監視間隔中に処理された処理キューの数(S5)の割合である処理キュー処理率が100%になったため,負荷レベルはLEVEL2からLEVEL0に遷移します。
(b) ユーザが指定する処理キュー滞留率をしきい値とした決定方法
今回の負荷レベルは,前回の負荷レベル,およびノード間負荷バランスでユーザが指定する処理キュー滞留率によって決定されます。処理キュー滞留率とは,次に示す計算式から算出される滞留率です。
処理キュー滞留率=(負荷レベル監視時にキュー中に滞留している処理キューの数※1÷メモリ関連定義のpce_noオペランドで指定したサービス処理キュー数※2)×100
- 注※1
-
TP1キャッシュ機能を使用する場合,CLサーバの実行系で自動的に確保される処理キュー数(UDP受信スレッド数+1)も別途確保されます。そのため,処理キュー滞留率が100%にならないことがあります。
- 注※2
-
TP1キャッシュ機能を使用する場合,XTC用ワーク領域(XTCPOOL)の確保によって,pce_noオペランドで指定した数以上のサービス処理キューを滞留させることができます。しかし,処理キュー滞留率を算出する場合,XTC用ワーク領域分については考慮されません(pce_noオペランドの指定値が計算式として使用されます)。そのため,処理キュー滞留率が100%を超えることがありますが,その場合でも100%として扱われます。
- しきい値とする処理キュー滞留率の指定
-
RPC関連定義のlevelup_queue_rateオペランドおよびleveldown_queue_rateオペランドを次に示すとおりに指定することによって,サービスグループごとに処理キュー滞留率によって負荷レベルを決定するしきい値を指定できます。
set levelup_queue_rate = U1,U2 set leveldown_queue_rate = D0,D1
U1:サーバの負荷レベルがLEVEL1に上がったと判断する処理キュー滞留率
U2:サーバの負荷レベルがLEVEL2に上がったと判断する処理キュー滞留率
D0:サーバの負荷レベルがLEVEL0に下がったと判断する処理キュー滞留率
D1:サーバの負荷レベルがLEVEL1に下がったと判断する処理キュー滞留率
負荷レベルと処理キュー滞留率について次の表に示します。
ユーザが指定する処理キュー処理率をしきい値とした決定方法での,負荷レベルが遷移する例を次の図に示します。
|
|
負荷レベルが遷移する負荷レベル監視のチェックポイントごとに説明します。ここでは,メモリ関連定義のpce_noオペランドで指定したサービス処理キュー数を2000とします。
- C2(LEVEL0からLEVEL2への負荷レベルの遷移)
-
メモリ関連定義のpce_noオペランドで指定したサービス処理キュー数に対する,C2時点の処理キュー滞留数の割合(P2)がU2以上になったため,負荷レベルはLEVEL0からLEVEL2に遷移します。
- C4(LEVEL2からLEVEL1への負荷レベルの遷移)
-
メモリ関連定義のpce_noオペランドで指定したサービス処理キュー数に対する,C4時点の処理キュー滞留数の割合(P4)がD1以下になったため,負荷レベルはLEVEL2からLEVEL1に遷移します。
- C6(LEVEL1からLEVEL0への負荷レベルの遷移)
-
メモリ関連定義のpce_noオペランドで指定したサービス処理キュー数に対する,C2時点の処理キュー滞留数の割合(P2)がD0以下になったため,負荷レベルはLEVEL1からLEVEL0に遷移します。
(c) ユーザが指定する処理キュー滞留数をしきい値とした決定方法
今回の負荷レベルは,前回の負荷レベル,およびノード間負荷バランスでユーザが指定する処理キュー滞留数によって決定されます。処理キュー滞留数とは,負荷レベル監視時にキュー中に滞留している処理キューの数です。
- しきい値とする処理キュー滞留数の指定
-
RPC関連定義のlevelup_queue_countオペランドおよびleveldown_queue_countオペランドを次に示すとおりに指定することによって,サービスグループごとに処理キュー滞留数によって負荷レベルを決定するしきい値を指定できます。
set levelup_queue_count = U1,U2 set leveldown_queue_count = D0,D1
U1:サーバの負荷レベルがLEVEL1に上がったと判断する処理キュー滞留数
U2:サーバの負荷レベルがLEVEL2に上がったと判断する処理キュー滞留数
D0:サーバの負荷レベルがLEVEL0に下がったと判断する処理キュー滞留数
D1:サーバの負荷レベルがLEVEL1に下がったと判断する処理キュー滞留数
TP1キャッシュ機能を使用する場合,CLサーバの実行系では,UDP受信スレッド数+1の処理キューが自動的に確保されます。自動的に確保される処理キュー数分を引いてlevelup_queue_countオペランドおよびleveldown_queue_countオペランドを指定してください。
負荷レベルと処理キュー滞留数について次の表に示します。
ユーザが指定する処理キュー処理数をしきい値とした決定方法での,負荷レベルが遷移する例を次の図に示します。
|
|
負荷レベルが遷移する負荷レベル監視のチェックポイントごとに説明します。
- C2(LEVEL0からLEVEL2への負荷レベルの遷移)
-
負荷レベル監視時にキュー中に滞留している処理キューの数(P2)がU2以上になったため,負荷レベルはLEVEL0からLEVEL2に遷移します。
- C4(LEVEL2からLEVEL1への負荷レベルの遷移)
-
負荷レベル監視時にキュー中に滞留している処理キューの数(P4)がD1以下になったため,負荷レベルはLEVEL2からLEVEL1に遷移します。
- C6(LEVEL1からLEVEL0への負荷レベルの遷移)
-
負荷レベル監視時にキュー中に滞留している処理キューの数(P6)がD0以下になったため,負荷レベルはLEVEL1からLEVEL0に遷移します。
(3) ノード間負荷バランス拡張機能
ユーザは次に示す指定ができます。
-
RPC関連定義のloadcheck_intervalオペランドを指定すると,負荷監視インタバル時間を指定できます。負荷監視時に負荷レベルの変更があった場合は,各ノードのネームサービスに負荷レベルが通知されます。そのため,負荷監視インタバルごとにサーバ情報がネットワーク上に送信される可能性がありますので,必要以上に小さい値を指定しないでください。
loadcheck_intervalオペランドの指定を省略した場合の負荷監視インタバルは,30秒です。
-
通常,サービス要求のスケジュール時に通信障害が発生すると,再スケジュールしないでエラーリターンします。
RPC関連定義のscd_retry_of_comm_errorオペランドを指定することによって,通信障害が発生したノード以外へスケジュールするリトライ回数を指定できます。
ただし,scd_retry_of_comm_errorオペランドの指定値が,サービス要求の対象となるサービスグループが起動しているノード数を上回っている場合は,サービス要求の対象となるサービスグループが起動しているノード数をリトライ回数の上限値とします。ただし,scd_retry_of_comm_errorオペランドに0を指定した場合には,リトライしません。
(4) ノード間負荷バランス機能によるRPCメッセージの送信先および転送先の決定
次に示す場合は,ノード間負荷バランス機能でRPCメッセージの送信先および転送先を決定します。
-
RPCメッセージの送信時
ee_rpc_call関数またはee_rpc_cmtsend関数を呼び出し,かつ送信先をネームサーバから取得する場合は,ノード間負荷バランス機能によってRPCメッセージの送信先を決定します。
RPCメッセージの送信先に指定されたサービスグループのノードがない場合は,エラーリターンします。指定されたサービスグループのノードが複数ある場合は,負荷レベルによって送信先を決定します。
RPCメッセージの送信先がTP1/Server Baseの場合,閉塞状態または未起動のサービスグループは,RPCメッセージの送信先に指定されません。
また,入力パラメタ長が従来のEERPC_MAX_MESSAGE_SIZEの最大値(1メガバイト)より大きい場合,EERPC_MAX_MESSAGE_SIZEの値を超えた入力パラメタに対応していないサービスグループは,送信の対象外となります。詳細は,「3.1.11 RPCメッセージの最大長拡張機能」を参照してください。
-
RPCメッセージの転送時
自ノードの負荷レベルがLEVEL2でRPCメッセージを受信した場合,ノード間負荷バランス機能によってRPCメッセージの転送先を決定します。
他ノードに同じ名称のサービスグループがない場合は,他ノードに転送しないで自ノードでサービス要求を処理します。他ノードに同じ名称のサービスグループがある場合は,ノード間負荷バランス機能によって,転送するかどうかおよび転送先を決定します。
RPCメッセージの転送先がTP1/Server Baseの場合,閉塞状態または未起動のサービスグループは,RPCメッセージの転送先に指定されません。
また,入力パラメタ長が従来のEERPC_MAX_MESSAGE_SIZEの最大値(1メガバイト)より大きい場合,EERPC_MAX_MESSAGE_SIZEの値を超えた入力パラメタに対応していないサービスグループは,送信の対象外となります。詳細は,「3.1.11 RPCメッセージの最大長拡張機能」を参照してください。