4.3.2 システムの安定稼働の実現
業務システムには,安定して稼働し続けることが求められます。業務の内容によっては,一定時間にアクセスが急増したり,特定の処理に要求が集中したりする場合があります。急激な状況の変化に即応して,システムを安定稼働させるためには,次の制御が有効です。
-
クライアントからのアクセス要求や処理要求などのリクエストに対して,処理の同時実行数を制御することで,リクエスト増加時のパフォーマンス低下を防いでシステムを安定稼働させる方法です。
-
クライアントからのリクエスト増加時に,特定の処理要求を優先して処理することで,処理の緊急度や優先度に応じたリクエスト処理を実現する方法です。
-
リクエストを処理するサーバを1か所に集中させないで,複数の実行環境で分散させることで,パフォーマンスの低下を防いでシステムを安定稼働させる方法です。
アプリケーションサーバでは,J2EEアプリケーションに対して,きめ細やかな流量制御,優先制御を実現できます。これによって,システムの安定稼働に加えて,システムリソースの有効活用も実現できます。
ここでは,Webアプリケーションの流量制御,およびOLTP技術を適用したEnterprise Beanの流量制御と負荷分散について説明します。なお,それぞれの機能の詳細については,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(Webコンテナ)」の「2.15 同時実行スレッド数の制御の概要」およびマニュアル「アプリケーションサーバ 機能解説 拡張編」の「3. CTMによるリクエストのスケジューリングと負荷分散」を参照してください。
(1) Webアプリケーションの流量制御
アプリケーションサーバでは,サーブレットやJSPによって構成されるWebアプリケーションを,J2EEサーバのWebアプリケーション実行基盤であるWebコンテナで実行します。
アプリケーションサーバのWebコンテナでは,Webコンテナ単位,Webアプリケーション単位およびWebアプリケーション内のURLグループ(業務ロジック)単位に同時に処理できるリクエスト数を設定したり,リクエストをキュー(待ち行列)の概念で管理したりできます。これによって,Webアプリケーションで同時に実行する処理数を,処理内容に応じて細かく制御できます。送信されたリクエスト数が突発的に急増した場合でも,処理するリクエスト数を一定の数に制御できるので,システムを安定した状態で稼働させることができます。
また,リクエストの重要度に応じたリクエストの実行が可能になります。例えば,緊急度の高い重要な処理は確実に処理できるようにすることで,負荷の高い業務処理がほかの業務に影響を与えることを防げます。
Webアプリケーションの流量制御の概要を次の図に示します。
Webコンテナ単位,Webアプリケーション単位およびURLグループ(業務ロジック)単位で流量制御を実施することによって,システムの安定稼働を実現しながら,負荷の高い処理があっても優先度の高い処理を確実に実行できるシステムを構築できます。
(2) OLTP技術のEnterprise Beanへの適用
OLTP技術は,大規模な業務システムには不可欠な技術です。アプリケーションサーバでは,J2EEアプリケーション内の業務処理プログラム(Enterprise Bean)に対して,高度なOLTP技術を適用できます。これによって,次のような処理を実現できます。なお,対象となるEnterprise Beanは,Stateless Session Beanです。
-
リクエストのスケジューリングを利用した流量制御と負荷分散
業務処理プログラムに対するリクエストをスケジューリングすることで,特定のJ2EEアプリケーションに大量のリクエストが集中した場合に,リクエストを複数のサーバに振り分けて処理させたり,一度に処理させるリクエストの数(流量)を制御したりできます。また,リクエストの送信元であるクライアントに優先順位を設定して,そのクライアントから送信されたリクエストを優先的に処理するようにできます。さらに,特定の業務処理プログラムに対する処理を適切に分散させて負荷の集中を防ぐことで,システム全体としての処理性能の向上と,システムの安定稼働を図れます。
Enterprise Beanの優先制御,流量制御および負荷分散の概要を次の図に示します。
図4‒5 Enterprise Beanの優先制御,流量制御および負荷分散の概要 J2EEアプリケーション内の業務処理プログラムへのリクエストを,スケジュールキューを経由させて実行することで,一度に大量のリクエストが送信された場合も同時に実行する数を制御したり,負荷分散したりできます。また,優先制御によって,重要なリクエストを速やかに確実に実行できます。
-
J2EEアプリケーションの稼働中に特定の業務処理プログラムを入れ替えたい場合に,対象の業務処理プログラムに対応するリクエストを制御して,関連するサービスだけを安全に閉塞できます。特定の業務処理プログラムに障害が発生した場合などに,該当個所を局所化し,縮退運転と回復によって,システム全体を止めないで業務処理プログラムの入れ替えができます。