3.4.1 リクエストの流量制御の概要
CTMを使用した流量制御について説明します。
流量制御は,J2EEサーバで一度に実行される処理数の最大値を設定して,リクエストの同時実行数を制限する機能です。これによって,J2EEサーバの負荷を一定に抑え,安定した高いスループットを実現します。CPUや排他資源の競合も抑止できます。
CTMによる流量制御は,CTMデーモンおよびCTMデーモンが管理しているスケジュールキューを使用して実現します。
CTMによる流量制御の概要を,次の図に示します。この図は,J2EEアプリケーション単位でスケジュールキューを共有している場合の例です。
CTMデーモンでは,クライアントから受け付けたリクエストをスケジュールキューに登録して,スケジュールキュー単位に設定された同時実行スレッド数分ずつ実行します。クライアントからのリクエストが瞬間的に増加した場合でも,CTMデーモンによって流量が制御されるため,J2EEサーバで実行されるリクエストは同時実行スレッド数以上には増加しません。また,複数のJ2EEサーバのJ2EEアプリケーションで同じスケジュールキューを共有している場合は,そのJ2EEアプリケーション数および各J2EEアプリケーションの同時実行スレッド数の設定で,一度に処理できる業務処理プログラムを多重化できます。リクエストは,スケジュールキューの最大リクエスト登録数分まで受け付けられます。最大リクエスト登録数は,スケジュールキュー単位で設定できます。なお,スケジュールキュー単位での設定がない場合は,CTMデーモン単位の設定がデフォルトとなります。これを超えると,エラーが返却されます。
なお,J2EEアプリケーションの同時実行数の制御は,EJBコンテナでも実行できます。EJBコンテナの同時実行数制御とCTMの流量制御の組み合わせによる効果は次のとおりです。
-
あるJ2EEサーバ上のEJBコンテナで同時実行数が上限に達した場合に,ほかのJ2EE サーバにリクエストを転送できます。また,同時実行数が上限に達していなくても,該当するEJBコンテナの負荷が高い場合はほかのJ2EEサーバにリクエストを転送できます。
-
CTMのキューによって実行待ちのリクエスト数を一定に保てるので,それ以上のリクエストがEJBコンテナに送信された場合は,エラーを通知できます。
-
EJBコンテナのインスタンスのプーリングと併用できます。
CTMが制御するスレッドの最大値およびキューごとのリクエストの登録数は,CTMデーモンを起動するときに,ctmstartコマンドの引数-CTMDispatchParallelCountおよび-CTMMaxRequestCountに指定します。また,運用管理ポータルで構築したシステムを運用している場合は,あらかじめ論理CTMに設定しておくことができます。ctmstartコマンドについては,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「ctmstart(CTMデーモンの開始)」を参照してください。運用管理ポータルの設定の詳細については,マニュアル「アプリケーションサーバ 運用管理ポータル操作ガイド」の「10.7.2 スケジューリングの設定」を参照してください。
- 注意事項
-
-
CTMによる流量制御では,スケジュールキューごとに同時実行スレッド数(Parallel Count)を設定します。また,CTMに呼び出されるStateless Session Bean単位に,プールしておくインスタンス数の最大値(Pooled InstancesのMaximum)を指定できます。プールしておくインスタンス数の最大値がスケジュールキューの同時実行スレッド数よりも少ないと,CTMから呼び出された時にインスタンスが不足するおそれがあるのでご注意ください。
-
CTMを使用する場合,グローバルCORBAネーミングサービスのほかにそれぞれのホストのCORBAネーミングサービス(ローカルCORBAネーミングサービス)にもEJBオブジェクトリファレンスが登録されます。このため,アプリケーションの構成によっては,CTMを使用しないで直接ローカルCORBAネーミングサービスに対してlookupを実行してEnterprise Beanを呼び出すこともできます。ただし,この場合,CTMからの同時実行スレッド数指定が保証されなくなります。このような使用方法はしないでください。
-