🦭

ELBのスティッキーセッションをオフにして弾力性を高める?

2022/08/27に公開

AWS のセッション管理について整理する。とくに ALB,ElastiCache について。
そもそもセッションとは、みたいなところを中心とする。

  • 任意の Key Value をリクエストごとに送信できる

セッションのおさらい

  • セッションとは通信において始まりから終わりまでのこと
  • セッションは概念なので、実現方法はそれぞれ。
    • セッション管理に cookie を使うという一つの方式
  • ログインして買い物をするとき、サーバーはだれからのリクエストかを覚えたいので、セッションを用いる

シーケンス例

セッションストア

  • EC サイトでクライアント間共有のカート機能をつくりたいとき、カートの中身を保存する必要がある
  • cookie はサイズが限られているし、改ざん可能なので適していない
  • サーバー側で session_id をキーとして保存する
    • php ではデフォルトでローカルファイルに保存している
      • リクエストごとに LB の接続先サーバーが変わるとデータが取得できない
      • スケーリングに課題がある

ALB のスティッキーセッション

  • 通常はルールに従ってリクエストごとにルーティングするが、ユーザーとターゲットを紐付ける機能
  • リクエストごとに有効期限をリセットされる
  • WebSocket では cookie ベースではなく固定される

アプリケーションベース

  • ALB の設定で使用する cookie 名を決める
  • 当該 cookie の値を見て ALB がルーティングを行う

期間ベース

  • ALB がAWSALBという key の cookie を生成する。
  • クライアントは当該 cookie を用いる
  • その値を ALB が判断し、指定された 1 秒から 7 日の期間同じターゲットにルーティングする

ElastiCache でのセッション管理

  • サーバー内にセッションデータを保存せず、ElastiCache に保存する
  • ElastiCache はある程度スケーリングできるので、スケーリング課題を解決できる
  • このとき、どのサーバーにアクセスされてもよいので、スティッキーセッションは必要ない

参考

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/sticky-sessions.html
https://qiita.com/hththt/items/07136ad74127999df271
https://ja.wikipedia.org/wiki/セッション_(コンピュータ)

Discussion