cookie stickiness

sticky session

[10] sticky session は、 複数のアプリケーションサーバーで構成される Webサービス逆プロキシサーバーにおいて、 特定のクライアントからの要求を常に特定のアプリケーションサーバー転送するための技法です。

[11] Webアプリケーションの設計技法として、 クライアントに直接相対する逆プロキシの背後に多数のアプリケーションサーバーを配置し、 適宜分散させて処理させる手法が極めて一般的です。 この「適宜分散」が、候補となるアプリケーションサーバーからの無作為の選択だとすると、 同じクライアントからの連続した要求が、 同じアプリケーションサーバー転送されることは保証されません。 そのため、 前回の要求の結果が次回の要求の結果に影響するような処理に不都合が生じます。 そこで各アプリケーションサーバーから共通してアクセスするデータベースサーバーを他に設けて、 後から参照するデータはそこに保存します。 これがいわゆる三層構造アーキテクチャーです。

[12] 通常は3層アーキテクチャーで構わないのですが、 性能向上や単純化、 古いシステムとの互換性などの理由で、 個々のアプリケーションサーバー内またはそれに近しい場所に後から参照するデータを置きたいこともあります。 その場合、 逆プロキシは同じクライアントからの要求を毎回同じアプリケーションサーバー転送しなければなりません。 そのための技法が sticky session です。 こうした設計は HTTP の想定外の利用であって標準的な手段が提供されていないため、 やや強引な方法が編み出されています。

[13] 素朴な手法として、 クライアントIPアドレスのような下位層プロトコルから提供される識別情報を使ってアクセス元クライアントを区別し、 前回記録しておいたアプリケーションサーバーへと転送する方法が考えられます。 ただこの方法は同じ IPアドレスを持つクライアントは相互に区別できないため複数アプリケーションサーバー間の分散に難があることや、 クライアントIPアドレスの変化に耐えられないという問題があります。 >>9 そのため現在ではあまり使わないか、 他の方法が利用できないときのフォールバックとして扱われています。

[14] アプリケーションサーバーが保存するデータ (状態) を識別するセッションIDクライアントごとに発行する場合、 逆プロキシもこのIDでクライアントを識別し、 適切なアプリケーションサーバーへと振り分けることができます。 セッションIDの転送方法としてクッキーを使う方法と、 URLpathquery を使う方法があります。

[15] 逆プロキシが独自にクッキーを発行しクライアントを区別する方法もあります。 この方法はアプリケーションサーバーの設計に依存せず逆プロキシだけで完結できるため、 柔軟に利用できます。そのため現在ではこの方法が主流となっているようです。

[16] URL を使う方法は、 URLが汚くなり、 特定のクライアントの専用で他の人に共有できなくなるため、 嫌われています。 平成時代にはそうしたシステムもよくみられました。

[17] クッキーを使う方法は、 クッキーに対応していないクライアントには通用しないという欠点があります。 通常の Webブラウザーを使う一般の利用者には影響はほとんどありませんが、 プログラムからのアクセスの場合は対応したライブラリーを使うなど配慮が必要になります。 クッキー利用者追跡につながるためプライバシーの観点から風当たりが強く、 利用の許諾を得るなど法令に基づく措置が必要となる場合があるのも難点です。

[3] Classic Load Balancer のスティッキーセッションの設定 - Elastic Load Balancing, , https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/classic/elb-sticky-sessions.html

[1] Application Load Balancer のターゲットグループ - Elastic Load Balancing, , https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer-target-groups.html#sticky-sessions

[2] スティッキーセッションを使っていなければApplication Load Balancer障害に耐えれたかも??? Amazon EC2をステートレスにする為にやるべきこと | Developers.IO, Yuki Suwa, https://dev.classmethod.jp/articles/stateless_ec2/

[4] 【基礎から学ぶ】ELBのスティッキーセッションについてまとめてみた - サーバーワークスエンジニアブログ, https://blog.serverworks.co.jp/tech/2017/01/05/elb-sticky/

[5] ロードバランサの設定, , https://docs.oracle.com/cd/E19199-01/817-4727-10/a_loadbalancer.html#wp89491

[6] スティッキーセッション用のロードバランサの設定 (Sun Java System Access Manager 7 2005Q4 配備計画ガイド), https://docs.oracle.com/cd/E19461-01/819-4121/auto51/index.html

[7] 9.4. スティッキーセッション 7.4 | Red Hat Customer Portal, https://access.redhat.com/documentation/ja-jp/red_hat_single_sign-on/7.4/html/server_installation_and_configuration_guide/sticky-sessions

[8] [ThinkIT] 第1回:Tomcatによるクラスタリングの実現 (2/4), https://thinkit.co.jp/cert/compare/14/1/2.htm

[9] mod_proxy_balancer - Apache HTTP Server Version 2.4, , https://httpd.apache.org/docs/current/en/mod/mod_proxy_balancer.html#stickyness