| 5. Webアプリケーション/Webサーバの負荷分散 |
Webアプリケーション/Webサーバの負荷分散を行うには、負荷分散装置(サーバスイッチ)等を利用し、複数のWebサーバで処理を分散させて実行させる方法が一般的です。
この章ではサーバスイッチを利用したWebアプリケーション/Webサーバの負荷分散について説明します。
| 5.1 サーバスイッチとは |
クライアントからの要求を一元的に管理し、同等の機能を持つ複数のサーバ(Webサーバ)に要求を転送する装置です。各サーバに要求を分散して送信し、各サーバが快適な応答速度を保つことを目的としています。単純なWebアプリケーションなら、各Webサーバに要求を均等に配分できれば十分ですが、サーバの能力にばらつきがある場合や、Webアプリケーションの処理が複雑で要求毎に処理時間が違うような場合には、各サーバの反応速度に応じて要求を転送するような機能を持つ負荷分散装置が必要になります。また、Webアプリケーションで、クライアント毎に情報を保持して一連のトランザクションを行う場合には、同じクライアントからの通信を常に同じサーバに転送するという機能も必要となります。
サーバスイッチとして、NECからはSS8000シリーズなどが提供されています。
| 5.2 Webアプリケーション作成時の留意事項 |
Webアプリケーションでクライアントとの間で会話的な処理をする場合には、次のように2つの方法があります。
- WebアプリケーションでWebコンテナから提供されるセションオブジェクトに情報を保持する。
- クライアント毎の情報をWebアプリケーションでデータベースに格納して保持する。Webアプリケーション上では情報は保持しない。
Webアプリケーションでセションオブジェクトに情報を保持する場合、サーバスイッチの設定で、同じクライアントからの要求は一定時間常に同じWebサーバへ転送するか、Webコンテナの提供するクラスタ対応の機能を利用します。
Webコンテナのクラスタ対応の機能では、JNDIを利用していますので、Webコンテナが動作する各マシンにJNDIをインストールする必要があります。クラスタ化したWebコンテナ上で動作させるWebアプリケーションの配備記述子(web.xml)には、<distributable>の指定が必要です。また、セションオブジェクトに保持できる情報は、シリアライズ可能な情報に限られます。
その他の方法として、クライアント毎の情報をデータベースに保持する方法もあります。この場合、データベース上の情報とクライアントとの関連づけをおこなう必要があります。その方法としては、Cookieを使う方法とURLRewritingを使う方法、hiddenタグを使う方法などがあります。
| 5.3 サーバスイッチの設定 |
「5.2.Webアプリケーション作成時の留意事項」にあるように、Webアプリケーションでセションオブジェクトを利用して、情報を保持する場合にはサーバスイッチに設定が必要になります。
サーバスイッチは、同じクライアントからの要求を一定時間同じサーバへ転送するよう設定する必要があります。その時間は、Webアプリケーションのセションタイムアウト時間より長くする必要があります。
サーバスイッチの詳細については、導入されるサーバスイッチのマニュアルを参照してください。