0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ステートレスとは

Last updated at Posted at 2024-09-30

httpはステートレスであるらしいがステートレスの意味を理解していない

ステートレスとは

「サーバがクライアントのアプリケーション状態を保存しない」制約のことです。

アプリケーション状態とは

ステートレスなやり取りではクライアント(客)は毎回同じ注文内容を繰り返さなければならなかったのに対し、ステートフルなやりとりでは注文の差分だけを追加で説明すれば良かったからです。
 ステートフルなやりとりは、サーバ(店員)がクライアントのそれまでの注文を、やりとりの間ずっと覚えていることを前提にしています。
...
この「ハンバーガーセットをポテトで注文している」という情報のことを、クライアントのアプリケーション状態と呼びます。
 アプケーション状態は別名「セッション状態」とも言います。システムにログインしてからログアウトするまでの一連の操作をまとめて「セッション」と呼ぶのですが、この一連の操作の間の状態はアプリケーション状態のことですので、アプリケーション状態とセッション状態はほぼ同じ意味になります。

ログインしてからログアウトするまでの操作の情報を記憶しておいてくれるのがステートフルなのか。そしてその情報をアプリケーション状態というのか。
ステートフルの方が便利そうだな。

ステートフルの欠点

サーバがクライアントのアプリケーション状態を覚えることは、クライアントの数が増えるにしたがって難しくなっていきます。
...
複数のサーバ間でアプリケーション状態を同期して、どのサーバでも同じアプリケーション状態を扱えるようにしなければなりません
...
データを同期するオーバヘッドが無視できなくなります。
 このようにステートフルなアーキテクチャでは、クライアントの数が増えた場合にスケールアウトさせにくくなります

複数のサーバあると同期しなければならずスケールアウトもしにくいのか。

ステートレスの利点

クライアントがリクエストメッセージに必要な情報を全て含めます
...
リクエストの処理に必要な情報をすべて含まれているメッセージのことを「自己記述的メッセージ」と言います。ステートレスなアーキテクチャでは、サーバがクライアントのアプリケーション状態を覚える代わりに、クライアントが自らのアプリケーション状態を覚え、すべてのリクエストを自己記述的メッセージで送信します。
...
サーバはそれまでのことは全て忘れて、新しく来るリクエストの処理に集中すれば良いのです。この性質を利用すると、ステートレスなシステムをスケールさせることは簡単になります。

クライアント自身が必要な情報を送ることでサーバに負担がかからないからスケールアウトしやすいのか。

ステートレスの欠点

送信するとデータ量が多くなる

ステートレスでは全ての情報を送りなおす必要があります。これは、データ量によってネットワークの帯域を消費することを意味します。

認証など、サーバに負担がかかる処理を繰り返す

データベースへのアクセスは重い処理ですので、これを毎回繰り返すとパフォーマンスが落ちます

毎回送らないといけないからサーバに負担がかかるのか。
どちらにしてもサーバに負担がかかるのか。どっちを取るかなのか。

感想

ステートレスは良い面もあれば悪い面があるのか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?