状態管理の手法
複数マシン・スケーリング手法は、アプリケーション・サーバーの複数コピーの使用に依存します。 さまざまなクライアントからの複数の連続した要求は、別々のサーバーで処理を行うことができます。 各クライアント要求が、互いに他のクライアント要求から完全に独立している場合、 連続した要求が同じサーバー上で処理されるかどうかは、重要ではありません。 しかし、現実には、クライアント要求は独立していません。 クライアントは、たびたび要求を出し、その結果を待ち、 先に出した要求に対して受け取った結果次第で、1 つまたは複数のその後の要求を出します。
クライアントに代わるこの一連のオペレーションは、以下の 2 つのカテゴリーに分けられます。
- ステートレス
- サーバーは、各要求に提供された情報のみに基づいて要求を処理し、 先に出された要求からの情報には依存しません。 サーバーは、要求の間で状態情報を維持する必要はありません。
- ステートフル
- サーバーは、各要求から提供された情報、および先に出された要求から保管された情報の両方に基づいて、 要求を処理します。 サーバーは、先に出された要求の処理時に生成された状態情報にアクセスし、それを維持する必要があります。
ステートレス対話の場合、異なる要求が、異なるサーバーによって処理されるかどうかは重要ではありません。 しかし、ステートフル対話の場合、要求を処理するサーバーは、 その要求にサービスを提供するのに必要な状態情報へのアクセスを必要とします。 同じサーバーが同じ状態情報に関連付けられているすべての要求を処理できるか、または、 状態情報が状態情報を必要とするすべてのサーバーによって共有されることができるかのいずれかです。 後者の場合、同じサーバーからの共有の状態情報にアクセスすると、 複数のサーバーからの共有の状態情報へのアクセスに関連した処理オーバーヘッドが最小限に抑えられます。
製品における負荷分散機能は、以下のいくつかの手法を利用して、クライアント要求間の状態情報を保持します。
- セッション・アフィニティー。負荷分散機能は、クライアント・セッションの存在を認識し、 そのセッション内のすべての要求を同じサーバーに送信しようとします。
- トランザクション・アフィニティー。負荷分散機能は、トランザクションの存在を認識し、 そのトランザクションの有効範囲内のすべての要求を同じサーバーに送信しようとします。
- サーバー・アフィニティー。 負荷分散機能は、複数のサーバーが指定のクライアント要求を受け入れ可能にもかかわらず、 その要求の処理には特定のサーバーが最も適していることを認識します。
各アプリケーション・サーバーの一部であるセッション・マネージャーは、クライアント要求をアプリケーション・サーバーのクラスター・メンバーに送信するとき、クライアント・セッション情報を保管し、 セッション・アフィニティーおよびサーバー・アフィニティーを考慮に入れます。 ワークロード管理サービスは、 クライアント要求をアプリケーション・サーバーのクラスター・メンバー間で送信するとき、 サーバー・アフィニティーおよびトランザクション・アフィニティーを考慮に入れます。