サーバがステートレスとは

Webを支える技術を読んでいてよくわからなかったところを整理。
ステートフル/ステートレスはハンバーガーのたとえが有名。



セッション(ステート)の保存先はいくつかある。Railsだと、

  • CookieStore(デフォルト)
  • CacheStore
  • ActiveRecordStore
  • FileStore
  • RedisStore
  • DalliStore


たとえば、DBをセッションストアにする。この時、クライアントからサーバにリクエストした際、サーバはリクエストに応じた状態データを返却する。

この時、サーバはステートフルな(状態を持ってる)んじゃないのって思うけど、そこはシステム単位で見るか個々のサーバ単位で見るか、スコープによって変わってくる。
雑に書くとこんな感じ。

f:id:igrc:20181006170450p:plain


アプリケーションサーバの役目はクライアントからのリクエストに応じた処理を行うことで、状態は保持していない。
保持しているのはDBサーバなので、

APサーバ:ステートレス
DBサーバ:ステートフル

サーバ単位で見たらステートレスなサーバとステートフルなサーバに分けられ、システム全体はステートフルな振る舞いになる。
システム全体でステートレスにしたいなら、クライアントにCookie等で状態データを全て保持させて、リクエストの度に必要な状態データを送ればいい・・・と思う。(ステートレスにする必要があるかはともかく)
ここのコメントも参照


もしくはElastiCache等の外部サービスにセッションを持たせるとか。