ミッションクリティカルな業務システムには,システムが提供するサービスをできるだけ停止することなく,安定して提供し続けられる仕組みが求められます。
例えば,提供するサービスの内容によっては,24時間連続稼働が求められるサービスや,障害が発生して業務システムが止まることで大きな損失が発生するサービスもあります。
このため,業務システムの基盤であるアプリケーションサーバには,まず,障害を未然に防ぐこと,そして,もし障害が発生しても,障害の影響範囲を局所的に抑え,業務システムを止めることなく運用し続けられることが求められます。また,障害が発生した個所は迅速に回復できることが必要です。
ここでは,アプリケーションサーバで実現できる,可用性と耐障害性の高いシステムの特長について説明します。
フルガーベージコレクションの発生を抑止することによって,システムが停止する回数を低減します。
フルガーベージコレクションは,JavaヒープのTenured領域のオブジェクトが増加することで発生します。Tenured領域には,長寿命なオブジェクト(利用期間が長いオブジェクト)が配置されます。アプリケーションサーバでは,フルガーベージコレクション発生の要因になる長寿命なオブジェクトのうち,利用期間が明確なオブジェクトを独自のメモリ空間に配置します。このメモリ空間をExplicitヒープといいます。Explicitヒープはフルガーベージコレクションの対象にはならないため,これらのオブジェクトによるフルガーベージコレクション発生を抑止できます。
アプリケーションサーバでは,HTTPセッションに関するオブジェクトと,リダイレクタとの通信用オブジェクトをExplicitヒープに配置します。
HTTPセッションに関するオブジェクトの場合のExplicitヒープを使用したフルガーベージコレクションの発生抑止の概要を次の図に示します。
図4-3 Explicitヒープを使用したフルガーベージコレクションの発生抑止の概要
New領域からTenured領域に昇格するオブジェクトの一部をExplicitヒープに移動します。これによって,Tenured領域のメモリサイズ増加を抑え,フルガーベージコレクション発生を抑止します。
このほか,ユーザアプリケーションの修正によって,アプリケーション内でフルガーベージコレクションの要因になっているオブジェクトを直接Explicitヒープに生成する実装もできます。
アプリケーションやリソースの稼働状態を監視して,障害の予兆を検知し,障害発生を予防できます。また,しきい値を設定して監視することで,しきい値を超えた場合に自動的に対処するためのアクションも定義できます。
例えば,リクエストの集中によってJavaVMでフルガーベージコレクションが多発する場合に,一定時間内に発生するフルガーベージコレクションの回数にしきい値を設定して監視できます。しきい値を超えた場合にリクエストの同時実行数を動的に減らすなどの処理を自動実行することで,システムのスローダウンを予防できます。
障害発生時の可用性を高めるためには,次の機能を使用できます。