高級レストランのパーソナルサービスで理解する状態保持Webアプリの負荷分散
状態保持WebアプリのALBスティッキーセッションを、お客様一人ひとりに専任ウェイターが付く高級レストランのサービスに例えると分かりやすくなります
Webユーザー
(ショッピングカート等の状態を持つ)
Application Load Balancer
(お客様を適切なウェイターに案内)
コンテナインスタンス
(状態を記憶してサービス提供)
セッション情報
(注文履歴、好み、アレルギー等)
スティッキーセッション
(同じウェイターが継続担当)
お好みやアレルギー情報をしっかり覚えていてほしい
「田中様、いつものウェイターの佐藤がお待ちしております」
各ウェイターが担当客の詳細情報を記憶
お客様の情報が共有されず、毎回一から説明が必要になる問題
ウェイターA:「アレルギーはありますか?」
お客様:「魚介アレルギーです」
ウェイターB:「アレルギーはありますか?」
お客様:「また聞くの?魚介アレルギーです」
ウェイターC:「アレルギーはありますか?」
お客様:「もう来ません!」
顧客満足度低下
ショッピングカート放棄
売上機会の損失
同じお客様は必ず同じウェイターが担当 する仕組みで完璧なサービスを実現
レストラン例: ウェイタースタッフのチーム編成
レストラン例: お客様カードによる担当者指定
レストラン例: フロントデスクの案内ルール
レストラン例: ウェイターの稼働状況確認
Webブラウザ
(Cookie保持)
負荷分散 + セッション管理
アプリケーション実行環境
レストラン例: 共有顧客データベース
Redis、DynamoDB等に状態を保存し、どのコンテナからでもアクセス可能
レストラン例: お客様が注文メモを持参
JWT等でクライアント側に状態を保存、サーバーは無状態
レストラン例: 毎回新しい注文として処理
アプリケーション自体を無状態に再設計、リクエスト単位で完結
課題: ショッピングカートの内容が負荷分散で消失
要件: 商品選択からチェックアウトまでの状態維持
解決策: ALBスティッキーセッションで同一コンテナに固定
課題: 取引途中でセッションが切れるセキュリティリスク
要件: ログイン状態と取引状態の継続保持
解決策: 短時間スティッキーセッション + Redis連携
課題: 学習進捗や回答状況の保持が必要
要件: 長時間の学習セッション中の状態維持
解決策: 24時間スティッキーセッション設定
課題: ゲーム進行状況やプレイヤー状態の維持
要件: リアルタイム性とセッション継続性
解決策: スティッキーセッション + WebSocket対応
実際の運用環境での測定データに基づく効果
ボタンを押して、ALBがどのようにセッションを管理するかを体験してみましょう
Created by SSuzuki1063
AWS SAP Learning Resources