Webシステムの基本を理解するための 訪問カウンターの謎? 二つの訪問カウンターがあります。 (正常に動いています) しかし、ロードバランサ―をかましてみると、 一つは正常に動くけど、一つは動かない。 両者とも、20行程度のPHPなのに、何が違うのか? 裏の仕組みはどうなっているのか? その謎解き、いや、 Webシステムの基本を理解しましょう。 リリース不具合続出!(涙) Webサーバを2台導入し、 ロードバランサ―の負荷分散も確認した。 「やったー!」と リリースしたら、不具合が続出(涙)。 よくある話です(苦笑)。 セッション管理 答えから言うと、その原因は、 セッション管理にあります。 例えば、Webでログインした時、 「〇〇さんのページ」って出てきますよね。 で、次にアクセスした時も、 「〇〇さんのページ」って出てくる。 つまり、それは、サーバ側で、 データを持っていて、アクセスがある度に、 そのデータを表示しているのです。 これを、「データを持ちまわる」と言い、 専門用語では、セッション管理とも言います。 データを持ちまわる 例えば、こちらの 訪問回数のプログラム、動かしてみましょう。 http://52.193.228.146/index1.php (WebServer1) 「Reload」する度に、訪問回数が増えますね。 「Clear」すれば、1に戻りますね。 これは、WebServer1で、 訪問回数というデータをもちまわっているのです。 イメージは、こんな感じです。 つまり、セッションで訪問回数のデータが保持され、 アクセスがある度に、 1回、2回、3回とカウントが足されていく。 ログイン情報でも、ショッピングカートでも、 これが、通常のWebプログラムです。 ロードバランサ―で、どうなる? そう。上記のように、Webサーバが1つの場合、 セッション管理は非常に単純です(笑)。 問題はありません。 しかし、 ロードバランサ―が入ると、どうなるのでしょうか? つまり、ロードバランサ―を入れると、 負荷分散してくれるのはいいのですが、 セッションは、きちんと管理されるのでしょうか? では、実際に試してみましょう。 (ロードバランサ―のURLは以下です) http://13.230.126.0/index1.php そこで、「Reload」「Clear」「ブラウザの再読み込み」 適当にクリックしてみてください。 明らかに、まともに動きませんね(苦笑)。 ↓例えば、こんなふうに。 これが、ロードバランサ―を入れたことによる不具合です。 不具合の考察 上記を整理すると、 Webサーバ1台なら、うまくいく。 ロードバランサ―を入れると、うまくいかない・・・と。 となると、おそらく、 原因はロードバランサ―ですよね。 だって、ブラウザからのアクセスは、 ある時は、WebServer1に ある時は、WebServer2に行くので、 「Reload」や「Clear」の処理がされると、 訪問回数がおかしな動きになるのは、当然。 そんな考察ができますね。 今回は、訪問回数ですが、 これが、ショッピングカートだとしたら、 ショッピングカートの中身が入れ替わったり、 本当に恐ろしいことになります。 意地悪なクイズ さて、そんな考察ができますが、 理解を深めるために、意地悪な質問をしておきましょう。 ロードバランサ―以下、今度は、 index2.php でアクセスしてみてください。 (前回は1ですが、今回は2ですよ)URLは以下です) http://13.230.126.0/index2.php Reload」する度に、訪問回数が増えますね。 「Clear」すれば、1に戻りますね。 今度は、まともに動きますよね?(笑) ロードバランサ―を経由しているのに、 何故、まともに動くのか? さっきの考察は間違っていたのか!? 訪問カウンター1 http://13.230.126.0/index1.php 正常に動きません。 訪問カンター2 http://13.230.126.0/index2.php 正常に動きます。 何故、2は動き、1は動かない?の理由 訪問カウンター1も、訪問カウンター2も、 単独のWebサーバでは動きます。 しかし、ロードバランサ―をかますと、 何故、2は動き、1は動かないのか? じつは、その裏では、 「絶対にやってはいけない」方法を使っています。 もし、その方法を使えば、 たぶん、先輩から、 「お前、それはダメだ」 って言われます。 Webシステムの非常識な方法になります。 以上、アナタがWebを扱うなら、 絶対に知っておく話です。 ちなみに、今、 そんな話も体感する講習を実施しています。 (最後、宣伝ぽくて恐縮ですが) よかったら、一緒に勉強しましょう。 |