メインコンテンツへスキップ
見出し画像

セッションとは?仕組みをわかりやすく解説|作業中に突然ログアウトする理由| vol.20

    この記事では、操作中に意図せずログアウトされる原因となる
    セッション管理と、ロードバランサーの振り分け問題について解説します。

    同じサーバーへ案内するスティッキーセッションの仕組みや、
    外部ストレージを活用したステートレス設計のアプローチを整理します。


    お疲れ様です。花冷です🌸

    前回(vol.19)は、`https` の s の正体——
    TLSによる暗号化のお話をしました。

    受付は無事に荷物を振り分けました。
    でも、ここで困ったことが起きます。


    📍 今回のパケット旅の現在地

    画像

    【現在地】:4つ目のマス「LOAD BALANCER」。
    受付にいますが、案内された先で「どちら様?」と言われかけています📍


    ❓ 作業中に突然ログアウト。あれ、何が起きてるの?

    入力途中でいきなりログイン画面に戻される。

    ……あの絶望感、伝わりますよね(笑)

    この現象、原因が2種類あります。

    ひとつは、時間切れ。 
    セッションには有効期限があって、しばらく操作しないと自動的に切られます。これは設計どおりの正常な動きです。

    もうひとつが厄介です。 
    さっきまで普通に操作していたのに落ちる。時間は経っていない。

    こちらの犯人は、前回まで見てきた受付かもしれません。


    🧠 セッションは、サーバ側の「記憶」

    ログイン状態って、どこに保存されているのでしょうか。
    多くの場合、サーバ側の記憶です。

    「この人はさっきログインした花冷さんですね。
    カートには3つ入ってます」

    こういうメモを、サーバが持っている。
    これをセッションと呼びます。

    ここで、vol.18を思い出してください。
    ロードバランサーは、通信を複数のサーバへ順番に配っていました。 

    ……もうお分かりですね。

    1回目は1号機、2回目は2号機に案内されたら、
    2号機は花冷さんを知りません。「どちら様ですか?」となって、
    ログイン画面に戻されるわけです。


    🍪 「同じ人は、同じサーバへ」

    対策はシンプルで、同じ人を毎回同じサーバに案内すること。
    これをスティッキーセッションと呼びます。

    やり方は主に2つあります。

    • Cookieを使う:受付が目印を配り、次からそれを見て同じ号機へ

    • 送信元IPを使う:IPアドレスから機械的に行き先を決める

    後者は手軽ですが、あまり使われません。 
    理由は、この連載を読んできた方なら分かるはずです。

    vol.16のNATです。 

    NAT(Network Address Translation)とは、
    ネットワークの境界にあるルーターなどで、
    IPアドレスを別のIPアドレスに変換する技術

    家じゅうの機器が同じIPに見えましたよね。
    会社ならもっと大規模に、何百人が同じIPに見える。 
    その全員が同じサーバに集中してしまいます。

    しかもスマホは移動でIPが変わるので、その瞬間に別人扱いです。


    🌟 そもそも記憶を、外に出す

    最近の設計では、もっと根本的な手が取られています。

    セッションをサーバの外に置く。 

    Redisのような専用の置き場所に記憶をまとめれば、
    どのサーバに案内されても同じ記憶を見に行けます。
    そもそも固定する必要がなくなるんですね。

    サーバが記憶を持たない状態をステートレスと呼びます。
    1台落ちても、増やしても、記憶は無事。
    受付も自由に配れるというわけです✨


    🌸 余談:時間切れだと思っていた

    私は、セッションに有効期限があることは知っていました。

    でも今回学んで、ログアウトの原因は時間切れだけではないと知りました。

    「さっきまで動いてたのに」という理不尽なログアウトの裏に、
    受付の振り分けというまったく別のレイヤーの事情があったなんて。

    見える現象はひとつでも、裏には複数の原因が並んでいる。 


    🌸 おわりに

    🔴セッション:サーバが持っている「この人は誰か」の記憶
    🔴スティッキーセッション:同じ人を同じサーバへ固定する仕組み
    🔴ステートレス化:記憶を外に出して、固定そのものを不要にする

    さて、受付を抜けたパケットちゃんは、いよいよ奥のデータベースへ。
    でもその手前に、もう一つ抑えておきたい要素があるんです。

    次回は、コネクションプールを覗いていきます!

    今日もお疲れ様でした✨
    また次回の記事でお会いしましょう〜!


    ⭐次回の記事はこちら!

    ⭐マガジンはこちら!

    📩質問はこちらまでどうぞ!

     
     

    花冷

     
     
    花冷(はなびえ)といいます。システムエンジニアです。 ”やりたいこと”の過程を赤裸々に記録しています。 ・開発ログ/学習ログ/メンターログ いつでも質問・依頼待ってます📩 ⭐現在、メンター経験を積みたいため、モニター募集中です!

    あなたへのおすすめ