ステートとは、ある特定の時点のアプリケーション (実際には、それに限られないさまざまなもの) の調子や品質、つまり、その状態のことです。あるものがステートフルかステートレスかは、別の何かとの通信の状態が記録される期間と、その情報をどのように保存する必要があるかによって決まります。
ステートレス
ステートレスのプロセスまたはアプリケーションは、分離性で理解できます。過去のトランザクションに関する情報や参照は保存されません。トランザクションは、常に初めて発生するかのようにゼロから作られます。ステートレス・アプリケーションは 1 つのサービスあるいは機能を提供するもので、コンテンツ配信ネットワーク (CDN)、Web、またはプリントサーバーを使用して、これらの短期的なリクエストを処理します。
思い浮かんだ疑問の答えを探すために行うオンライン検索は、ステートレス・トランザクションの一例です。検索するときは、検索エンジンに質問を入力して Enter キーを押します。トランザクションが誤って中断されたり、クローズしたりした場合は、新しいトランザクションを開始するだけです。ステートレス・トランザクションは自動販売機のようなものです。つまり、単一の要求に対する単一の応答です。
ステートフル
一方、ステートフルなアプリケーションおよびプロセスは、オンラインバンキングや電子メールのように、何度でも繰り返し利用するものです。以前のトランザクションのコンテキストに基づいて実行され、現在のトランザクションは、以前のトランザクション中に生じたことに影響を受ける可能性があります。そのため、ステートフル・アプリケーションは、毎回同じサーバーを使用してユーザーの要求を処理します。
ステートフル・トランザクションが中断された場合は、コンテキストと履歴が保存されているため、おおよそ中断したところから再開できます。ステートフル・アプリケーションは、ウィンドウの場所、ユーザー設定、最近のアクティビティなどを追跡します。ステートフル・トランザクションは、同じ人物と定期的に行われる継続的な会話と考えることができます。
私たちが日常的に使用するアプリケーションの大部分はステートフルですが、テクノロジーの進歩に伴い、マイクロサービスとコンテナによって、クラウドでのアプリケーション構築とデプロイが容易になりました。
コンテナとステート
クラウド・コンピューティングとマイクロサービスの人気が高まるにつれ、ステートフルかステートレスかに関係なく、アプリケーションのコンテナ化も同様に増加しています。コンテナは、ライブラリや依存関係とともにパッケージ化されたアプリケーションのコードの単位であり、移動が容易で、デスクトップ、従来の IT インフラストラクチャ、クラウドのいずれの環境でも実行できます。
コンテナには元々ポータブルで柔軟という性質があるため、ステートレスなものとして構築されました。しかし、コンテナの使用が広がると、既存のステートフル・アプリケーションのコンテナ化 (コンテナから実行することを目的とした再設計と再パッケージ化) が始まりました。これにより、ステートフル・アプリケーションはコンテナのメリットである柔軟性とスピード、さらには、ステートフル性に伴うストレージとコンテキストを備えるようになりました。
このため、ステートフル・アプリケーションはステートレス・アプリケーションにとてもよく似ており、逆も然りです。たとえば、ステートレスで長期のストレージを必要としないが、Cookie を使用して同じクライアントによる要求をサーバーが追跡できるアプリケーションを作ることもできます。
ステートレスおよびステートフルなコンテナの管理
コンテナの人気が高まるにつれ、さまざまな企業がデータストレージ、Kubernetes、StatefulSets を使用してステートレスコンテナとステートフルコンテナの両方を管理する方法を提供するようになりました。ステートフル性は今やコンテナストレージの主要部分であり、ステートフルコンテナは使用するかどうかではなく、いつ使用するかの問題となっています。
ステートフルコンテナを使用するか、ステートレスコンテナを使用するかは、どのような種類のアプリケーションを構築していて、それにどのような機能が必要かによって決まります。一時的かつ迅速に情報が必要な場合であれば、ステートレスがよいでしょう。しかし、アプリケーションがセッションをまたいで情報を保存しておく必要がある場合は、おそらくステートフルを利用するのが適切です。