web-dev-qa-db-ja.com

スティッキーセッションとノンスティッキーセッション

スティッキーセッションとノンスティッキーセッションの違いを知りたい。私がインターネットから読んだ後に私が理解したこと:

スティッキー:単一のセッションオブジェクトだけが存在します。

非スティッキーセッション:各サーバーノードのセッションオブジェクト

212
Sunny Gupta

Webサイトが1つのWebサーバーによってのみ提供されている場合は、クライアントとサーバーのペアごとにセッションオブジェクトが作成され、Webサーバーのメモリに残ります。クライアントからのすべての要求はこのWebサーバに行き、このセッションオブジェクトを更新します。対話期間中にデータをセッションオブジェクトに格納する必要がある場合、そのデータはこのセッションオブジェクトに格納され、セッションが存在する限りそこに残ります。

ただし、ロードバランサーの背後にある複数のWebサーバーによってWebサイトが提供されている場合、ロードバランサーはどの実際の(物理的な)Webサーバーがそれぞれの要求に進むべきかを決定します。たとえば、ロードバランサーの背後に3つのWebサーバーA、B、Cがある場合、www.mywebsite.com/index.jspはサーバーAから提供され、www.mywebsite.com/login.jspは次のサイトから提供される可能性があります。サーバーBとwww.mywebsite.com/accoutdetails.phpはサーバーCから提供されます。

ここで、要求が(物理的に)3つの異なるサーバーから処理されている場合、各サーバーはセッションオブジェクトを作成しています。これらのセッションオブジェクトは3つの独立したボックスに配置されています。他の。これらのサーバーセッションを同期させるためには、セッションデータを全員共通のレイヤー(DBなど)に書き込み/読み取りする必要があります。このユースケースでは、データベースとの間でデータの読み書きを行うことはお勧めできません。さて、ここにスティッキーセッションの役割があります。

ロードバランサーがスティッキーセッションを使用するように指示されている場合、他のサーバーが存在していても、すべての対話は同じ物理サーバーで行われます。したがって、あなたのセッションオブジェクトは、このWebサイトとの対話全体を通して同じになります。

要約すると、スティッキーセッションの場合、すべての要求は同じ物理Webサーバーに送信されますが、非スティッキーロードバランサーの場合は、要求を処理するWebサーバーを選択できます。

例として、あなたはここでAmazonのElastic Load Balancerとスティッキーセッションについて読むかもしれません: http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions .html

546
TJ-

私はここでもう少し詳細に答えをしました: https://stackoverflow.com/a/11045462/592477

それとも読むことができます==>

負荷分散を使用するとき、それはあなたがTomcatのいくつかのインスタンスを持っていて、あなたが負荷を分割する必要があることを意味します。

  • スティッキーセッションを使用せずにセッションレプリケーションを使用している場合:Webアプリケーションを使用しているユーザーが1人だけで、Tomcatインスタンスが3つあるとします。このユーザーはあなたのアプリにいくつかのリクエストを送ります、そしてロードバランサはこれらのリクエストのいくつかを最初のTomcatインスタンスに送り、そしてこれらのリクエストのいくつかを2番目のインスタンスに、そして3番目のインスタンスに送ります。
  • レプリケーションなしでスティッキーセッションを使用している場合:Webアプリケーションを使用しているユーザーが1人だけで、Tomcatインスタンスが3つあるとします。このユーザーはあなたのアプリにいくつかのリクエストを送ります、そしてロードバランサーは3つのTomcatインスタンスの1つに最初のユーザーリクエストを送ります、そして彼のセッションの間にこのユーザーによって送られる他のすべてのリクエストは同じTomcatインスタンスに送られます。これらの要求の間に、このTomcatインスタンス(使用されているTomcatインスタンス)をシャットダウンまたは再起動すると、ロードバランサは残りの要求をまだ実行中の他のTomcatインスタンスに送信します。残りのリクエストにはユーザーセッションのコピーがないため、このTomcatのユーザーはセッションを開始します。ユーザーはセッションを失い、Webアプリはまだ実行されていますがWebアプリから切断されます。
  • セッションレプリケーションでスティッキーセッションを使用している場合:Webアプリケーションを使用しているユーザーが1人だけで、Tomcatインスタンスが3つあるとします。このユーザーはあなたのアプリにいくつかのリクエストを送ります、そしてロードバランサーは3つのTomcatインスタンスの1つに最初のユーザーリクエストを送ります、そして彼のセッションの間にこのユーザーによって送られる他のすべてのリクエストは同じTomcatインスタンスに送られます。これらの要求の間に、このTomcatインスタンス(使用されているTomcatインスタンス)をシャットダウンまたは再起動すると、セッションレプリケーションを使用しているため、ロードバランサはまだ実行中の他のTomcatインスタンスに残りの要求を送信します。ユーザーセッションのコピーを作成しても、ユーザーは自分のセッションを継続できます。ユーザーは切断されずにWebアプリケーションを参照し続け、Tomcatインスタンスをシャットダウンしてもユーザーのナビゲーションに影響はありません。
88
Nico