プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • プログラミング全般
  • 【プログラミング全般】「ステートレス」と「ステートフル」の違い
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【プログラミング全般】「ステートレス」と「ステートフル」の違い

12.11

  • miyabisan2
  • 5件のコメント

この記事は2分で読めます

主にWebの分野で出てくる言葉ですが、「ステートレス」と「ステートフル」と言う単語があります。どちらか一方が優れた概念というわけではなくどちらの長所短所を覚えておいて使い分けをすることが求められます。

ちなみに、昨今のマイクロサービス化の流れの中でステートフルよりもステートレスで作る動きが盛んになっています。

ステートレス

状態を持たないこと(以前のやりとりを覚えていないこと)。Webで言えばリクエストとレスポンスの1回のやり取りで完結します。

メリット

  • サーバー資源をすぐに解放できる。
  • 覚えておく必要がないのでサーバー負荷がかからないのでスケールもしやすいです。

デメリット

  • 認証などのサーバに負荷がかかる処理も実行されるのでパフォーマンスが低下します。
  • サーバー側でデータを保持しない分、ステートフルに比べたらクライアントからもらうデータ量は増えやすくなり通信量が増えやすくなります。

ステートレスな設計思想や、サービス

トークン認証

クライアントサイドにセッションを保持しサーバーで状態を保持しないのでステートレスなやりとりになります。トークン認証だとセッションを用いた普通の認証に比べてストレートレスな方式と言えます。

Lambda

AWSのサーバーレスな実行環境を提供するマネージドサービスです。セッション状態を保持できません。

ステートフル

サーバーはクライアントの状態(セッション情報)を持つこと。(以前のやりとりを覚えていること)、クライアント側はCookieにセッションIDを保持するのが一般的です。

メリット

すでに認証したことをサーバーが覚えているためやりとりする通信量が減ります。

デメリット

  • 1つのサーバーに1人のユーザーの場合は負荷はないが、1つのサーバーに対して複数のユーザーがいる場合に負荷が大きくなる。(HTTPのセッション状態であればサーバーのメモリを使用して記憶しているのでメモリ消費量を食います。)
  • サーバーが一つのリクエストに対してつきっきりになってしまうのでその情報を他のサーバーに引き継ぐことができずサーバーをスケールすることが難しくなります。

ステートフルな設計思想の概念、サービス

FTP、TCP、SSH

FTPはファイル転送プロトコル、TCPはサイトの閲覧やメール、SSHはサーバーへの接続手段として使われるプロトコルです。

ECS on Fargate

Fargateを使う場合は、RailsのPumaのようにアプリケーションサーバーでセッションの状態を持たせます。

近年の動向

マイクロサービスなどのアプリケーション設計思想がトレンドになってきておりアプリケーション間を疎結合にすることが求められる時代になってきています。

なので、どちらかといえばステートフルよりもステートレスな疎結合なアプリケーション設計が求められる時代になりつつあります。

もちろん、いまだにステートフルな実装をしたアプリケーションはたくさんあるのでどちらも使えるようにしておくことが重要です。

スポンサーリンク
  • 2021 12.11
  • miyabisan2
  • 5件のコメント
  • プログラミング全般
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2021 10.10

    【プログラミング】「日時」に関する知識

  2. 2018 03.25

    【プログラミング】バージョンの付け方

  3. 2021 08.29

    【プログラミング】「副作用」、フロントエンド開発でイミュータブルが要求される背景など

  4. 2021 12.08

    【プログラミング全般】「ランタイムライブラリ」と「スタティックライブラリ」の違い、ライブラリの時代変革など

  5. 2021 12.12

    【プログラミング全般】プログラミングの歴史

  6. 2018 07.23

    【プログラミング全般】「ローカライズ」、「ローカライゼーション」(L10n)、「i18n(アイエイティーンエヌ)」とは?

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【マイクロサービス】「コンテナオーケストレーション」と…

【プログラミング全般】プログラミングの歴史

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー