2 機能
2.4 TSC デーモンの機能
"50"が設定されます。これを超えてリクエストが発生した場合は例外が返ります。
リクエストには,プライオリティ(処理の優先順位)を設定できます。プライオリティ 値が1の場合,最もプライオリティが高く,プライオリティ値が大きくなるほどプライ オリティは低くなります。また,リクエストに設定されたプライオリティが高いかどう かは,tscstartコマンドの-TSCHighPriorBorderオプションの指定値で判断します。さ らに,スケジュール用キューに登録できるリクエスト数のうち,プライオリティの高い リクエストだけを登録する数は,tscstartコマンドの-TSCHighPriorRequestCountオ プションに指定できます。
これらのコマンドオプションの指定値を利用して,プライオリティの高いリクエストを 優先してスケジュール用キューに登録できます。具体的には,プライオリティの低いリ クエストの発生件数が,-TSCMaxRequestCountオプション指定値から
-TSCHighPriorRequestCountオプション指定値を減算した値を超えた場合は例外が返り ます。プライオリティの高いリクエストは,-TSCMaxRequestCountオプション指定値 を超えて発生した場合にだけ例外が返ります。
(3) TSC ユーザオブジェクトの呼び出しと要求元への応答
スケジュール用キューに登録されたリクエストは,サーバアプリケーションの使用中で ないスレッド上に配置されたTSCユーザオブジェクトを呼び出します。どのサーバアプ リケーションの,どのスレッド上のTSCユーザオブジェクトが呼び出されるかは,クラ イアントアプリケーションからはわかりません。
その後,TSCデーモンは,TSCユーザオブジェクトからの応答をリクエストの要求元に 返します。ほかのTSCデーモンから転送されてきたリクエストについては,該当する転 送元を経由して,リクエストの要求元に応答を返します。
なお,リクエストがスケジュール用キューに登録されてから取り出されるまでの時間が リクエストのタイムアウト値を超えている場合は,非応答型呼び出しを除きリクエスト を破棄します。
2.4.2 リクエストの負荷分散
負荷分散は,クラスタ構成などで並列に運用しているサーバアプリケーション間で,負 荷が均等になるように処理を分散して割り当て,システム全体の可用性を高める機能で す。クライアントアプリケーションからの要求をサーバ間,プロセス間およびスレッド 間で負荷分散できます。負荷分散は,スケジュール用キューを共有しているサーバアプ リケーション間で実行できるほか,複数のTSCデーモン間で負荷情報を交換すること で,異なるスケジュール用キューで制御されているサーバアプリケーションに含まれる TSCユーザオブジェクトに対しても実行できます。
クライアントアプリケーションからサーバアプリケーションを呼び出す流れと負荷分散 のタイミングを,次の図に示します。
図2-7 クライアントアプリケーションからサーバアプリケーションを呼び出す流れと負 荷分散のタイミング
図について説明します。
1. クライアントアプリケーションは,TSCAdmクラスのgetTSCClient()メソッドで TSCレギュレータまたはTSCデーモンに接続します。
2. 取得したリファレンスからTSCユーザプロキシを作成し,TSCユーザオブジェクト を呼び出します。
3. リクエストを受け付けたTSCデーモンは,スケジュールポリシーに従ってTSCドメ イン内の各TSCデーモンの負荷情報を参照して,負荷の少ないTSCデーモンにリク エストを転送します。
図の場合は,ホストBのTSCデーモンに振り分けられました。振り分けられたリク エストはスケジュール用キューに登録されます。
4. TSCデーモンは,使用されていないスレッド上に配置されたTSCユーザオブジェク トの業務処理プログラムを呼び出します。このとき,異常終了したサーバアプリケー ションやハングアップしてタイムアウトしたTSCユーザオブジェクトを呼び出すこ とはありません。
5. TSCAdmクラスのreleaseTSCClient()メソッドでTSCレギュレータまたはTSCデー モンとの接続を切断します。
サーバアプリケーションからの応答は,リクエストを受け付けたTSCデーモンを経由し て,クライアントアプリケーションに返されます。
2.4.3 リクエストの流量制御
流量制御は,サーバアプリケーションで一度に実行される処理数の最大値を設定して,
リクエストの同時実行数を制限する機能です。これによって,サーバアプリケーション の負荷を一定に抑え,安定した高いスループットを実現します。CPUや排他資源の競合 も抑止できます。流量制御は,TSCデーモンおよびTSCデーモンが管理しているスケ ジュール用キューを使用して実現します。
流量制御の概要を次の図に示します。
図2-8 流量制御の概要
TSCデーモンでは,クライアントアプリケーションから受け付けたリクエストをスケ ジュール用キューに登録して,TSCルートアクセプタ単位に設定された同時実行スレッ ド数分ずつ実行します。クライアントアプリケーションからのリクエストが瞬間的に増 加した場合でも,TSCデーモンによって流量が制御されるため,サーバアプリケーショ ンで実行されるリクエストは同時実行スレッド数以上には増加しません。また,複数の サーバアプリケーションのTSCルートアクセプタで同じスケジュール用キューを共有し ている場合は,そのTSCルートアクセプタ数および各TSCルートアクセプタの同時実 行スレッド数の設定で,一度に処理できるTSCユーザオブジェクトを多重化できます。
リクエストは,スケジュール用キューの最大リクエスト登録数分まで受け付けられます。
最大リクエスト登録数は,TSCデーモン単位で設定できます。これを超えると,エラー が返されます。
2.4.4 リクエストの閉塞制御
閉塞制御(サービス閉塞)は,特定のTSCルートアクセプタに対するリクエストの受け 付けを停止したり,リクエストを滞留させたりする機能です。これによって,システム 全体を停止させないでTSCユーザオブジェクトの入れ替えや再起動を可能にして,シス テムの可用性を高められます。
閉塞制御でできることは,次のとおりです。
●サーバアプリケーションの閉塞制御
スケジュール用キューに滞留したリクエストを破棄して,サーバアプリケーションを 終了させます。
●スケジュール用キューの閉塞制御
スケジュール用キューをすぐに閉塞させます。キューに登録済みのリクエストを破棄 するかどうかを選択できます。
●サーバアプリケーション異常終了時のリクエスト保持
サーバアプリケーション異常終了時にスケジュール用キューのリクエストを一定時間 保持します。
(1) サーバアプリケーションの閉塞制御
TSCルートアクセプタを非活性化するときに,スケジュール用キューに登録されたリク エストを破棄して,TSCユーザオブジェクトを停止できます。キューを共有する最後の TSCルートアクセプタが停止する場合,TSCデーモンは,スケジュール用キューの入り 口を閉じてサービスを停止して,それ以上リクエストを受け付けないようにします。
サーバアプリケーションの閉塞制御は,tscstopprcコマンドで指定できます。
サーバアプリケーションの閉塞制御の概要を次の図に示します。
図2-9 サーバアプリケーションの閉塞制御の概要
(2) スケジュール用キューの閉塞制御
スケジュール用キューに対して,直接閉塞を実行することもできます。これによって,
複数のTSCルートアクセプタでスケジュール用キューが共有されている場合に,一度に 複数のTSCルートアクセプタを停止できます。スケジュール用キューに登録されている
リクエストについては,破棄するか,一定の時間処理を続けるかを選択できます。処理 を続ける場合は,一定の時間内に処理ができなければ強制的に破棄するように,タイム アウト時間が指定できます。また,仕掛かり中のリクエストについては,処理が続行さ れます。
スケジュール用キューの閉塞が指示されると,TSCデーモンは,スケジュール用キュー の入り口を閉じてサービスを停止して,それ以上リクエストを受け付けないようにしま す。また,すでにスケジュール用キューに登録されたリクエストは,設定に従って,破 棄するか,または処理を実行してからスケジュール用キューの閉塞を完了します。リク エストを破棄する場合は,キューに登録されていたリクエストの処理はすべてエラーと してクライアントアプリケーションに返されます。処理を実行してから閉塞する場合は,
一定時間処理を継続して,時間内に終了しなかった処理がエラーとして返されます。
スケジュール用キューの閉塞制御は,tscholdraコマンドで閉塞を,tscrlesraコマンドで 閉塞解除を指定できます。
スケジュール用キューの閉塞制御の概要を次の図に示します。
図2-10 スケジュール用キューの閉塞制御の概要
(3) サーバアプリケーション異常終了時のリクエスト保持
サーバアプリケーション異常終了時に,スケジュール用キューのリクエストを一定時間 保持します。これによって,サーバアプリケーションが異常終了した場合でも,すぐに ユーザにエラーは返されません。さらに,サーバアプリケーションが再起動するまでの 間,クライアントアプリケーションからのリクエストは受け付け続けます。リクエスト は,スケジュール用キューの最大リクエスト登録数分まで受け付けられます。このため,
サーバアプリケーションに障害が発生した場合でも,すぐに再起動すれば,クライアン トアプリケーションに障害を気づかせないで運用を続けられます。ただし,リクエスト がスケジュール用キューの最大リクエスト登録数を超えた場合は,クライアントアプリ ケーションにエラーが返されます。
サーバアプリケーション異常終了時のリクエスト保持は,tscstartコマンドの -TSCQueueDeleteWaitオプションで指定できます。
サーバアプリケーション異常終了時のリクエスト保持の概要を次の図に示します。