2012-05-08 12 views
135

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

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

非スティッキーセッション:あなたのウェブサイトは、各ペアのために、唯一1 web serverによって提供されている各サーバーノード

答えて

411

のためのセッションオブジェクトは、セッションオブジェクトが作成され、Webサーバのメモリに残っています。クライアントからのすべての要求は、このWebサーバーに移動し、このセッションオブジェクトを更新します。一部のデータは、インタラクションの期間に渡ってセッションオブジェクトに格納する必要がある場合、このセッションオブジェクトに格納され、セッションが存在する限りそこにとどまります。

multiple web serversのウェブサイトがload balancerの背後にある場合、ロードバランサは、実際に(物理的な)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にデータを書き込んだり読み込んだりするのは良い考えではないかもしれません。ここでは、というスティッキーセッションの役割があります。 load balancerにスティッキセッションを使用するように指示された場合、他のサーバーが存在していても、すべての対話はthe same physical serverで行われます。したがって、セッションオブジェクトは、このWebサイトとのやりとり全体を通して同じになります。

要約すると、スティッキーセッションの場合、すべてのリクエストは同じ物理Webサーバーに向けられますが、非スティッキーなロードバランサの場合はリクエストを処理するWebサーバーを選択できます。

例として、あなたはここでアマゾンのElastic Load Balancerのとスティッキーセッションについて読むことができる:http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html

+0

@TJ- 1つのノードが利用できない場合はどうなりますか? – gstackoverflow

+8

ほとんどの場合、セッションは失われます。 [AWS ESB](http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html)の場合_インスタンスが失敗したり正常に動作しなくなった場合、ロードバランサはそのインスタンスへのルーティング要求を停止します代わりに、既存のロードバランシングアルゴリズムに基づいて新しい健全なインスタンスを選択します。ロードバランサは、新しい正常インスタンスにセッションが「スタック」したものとして扱い、失敗したインスタンスが戻ってきてもそのインスタンスにリクエストをルーティングし続けます。 –

+1

LoadBalancerはどの情報に基づいてHTTPセッションをスティッキーにしますか?特にHTTPS接続ではこの問題が面白くなります。 LBにWebサーバーの秘密鍵を渡して、SSL接続を切断してHTTPセッションを取得できるようにしますか?あるいは、LBは単にクライアントのIPアドレスを利用するだけですか?この場合、複数のクライアントが同じIPアドレスを使用するプロキシサーバーはどうでしょうか?それとも、IPアドレスが頻繁に変わるモバイルクライアント?それとももっと良いテクニックがありますか?ありがとう – g000ze

32

私はここにいくつかの詳細と答え作った: https://stackoverflow.com/a/11045462/592477

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

loadbalancingを使用する場合は、複数のtomcatインスタンスがあり、負荷を分割する必要があることを意味します。

  • あなたはスティッキーセッションなしでセッションレプリケーションを使用している場合:あなたのWebアプリを使って一つだけのユーザーを持っている、とあなたは3つの Tomcatのインスタンスを持っている想像してみてください。このユーザーがアプリに複数のリクエストを送信すると、 ロードバランサはこれらのリクエストの一部を最初のtomcat インスタンスに送信し、これらのリクエストのいくつかを2番目の インスタンスに、3番目のリクエストを別のリクエストに送信します。
  • レプリケーションなしでスティッキセッションを使用している場合: Webアプリケーションを使用しているユーザーが1人で、tomcat インスタンスが3つあるとします。このユーザーがアプリに複数のリクエストを送信すると、 ロードバランサは最初のユーザーリクエストを tomcatインスタンスの1つに送信し、この ユーザーがセッション中に送信したその他のリクエストはすべて同じTomcatに送信されますインスタンス。 これらの要求の間に、このTomcat インスタンス(使用されているtomcatインスタンス)をシャットダウンまたは再起動すると、ロードバランサは の残りの要求を実行中の の1つの他のTomcatインスタンスに送信します。インスタンス 残りのリクエストを受け取るtomcatには、 のコピーがありません。ユーザーがセッションを開始すると、 ユーザーはセッションを終了し、Webアプリケーションから切断されますが、 Webアプリケーションはまだ実行中です。
  • スティッキセッションWITHセッションレプリケーションを使用している場合:ウェブアプリケーションを使用しているユーザーが1人で、3つのtomcat インスタンスがあるとします。このユーザーがアプリに複数のリクエストを送信すると、 ロードバランサは最初のユーザーリクエストを tomcatインスタンスの1つに送信し、この ユーザーがセッション中に送信したその他のリクエストはすべて同じTomcatに送信されますインスタンス。 これらの要求の間に、このTomcat インスタンス(使用されているTomcatインスタンス)をシャットダウンまたは再起動すると、ロードバランサは残りの要求を の実行中の他の1つのTomcatインスタンスに、 の残りの要求を送信します。ユーザーセッションのコピーを持っている残りの要求を受け取ります。 ユーザーは彼のセッションを続けます。ユーザーはあなたのWeb アプリを引き続きブラウズし続けますが、切断されずにtomcatインスタンス のシャットダウンはユーザーナビゲーションに影響しません。
関連する問題