Jump to section

ステートフルとステートレス

URL をコピー

ステートとは、ある特定の時点の状態であり、アプリケーション (実際には、これに限られない) の調子や品質などの状態のことです。ステートフルとステートレスの違いは、通信の状態が記録される期間と、その情報が保存される方法の違いとも言えます。  

ステートレスのプロセスまたはアプリケーションには、分離性があります。つまり、過去のトランザクションに関する情報や参照は保存されません。トランザクションは、常に初めて発生するかのようにゼロから行われます。ステートレス・アプリケーションは 1 つのサービスあるいは機能を提供するもので、コンテンツ配信ネットワーク (CDN)、Web、またはプリントサーバーを使用して、これらの短期的なリクエストを処理します。 

思い浮かんだ疑問の答えを探すために行うオンライン検索は、ステートレス・トランザクションの一例です。検索するときは、検索エンジンに質問を入力して Enter キーを押します。トランザクションが誤って中断されたり、クローズしたりした場合は、新しいトランザクションを開始するだけです。ステートレス・トランザクションは自動販売機のようなものです。つまり、単一の要求に対する単一の応答です。 

一方、ステートフルなアプリケーションおよびプロセスは、オンラインバンキングや電子メールのように、何度でも繰り返し実行されます。以前のトランザクションのコンテキストに基づいて実行され、現在のトランザクションは、以前のトランザクション中に生じたことに影響を受ける可能性があります。そのため、ステートフル・アプリケーションは、毎回同じサーバーを使用してユーザーの要求を処理します。  

ステートフル・トランザクションが中断された場合は、コンテキストと履歴が保存されているため、おおよそ中断したところから再開できます。ステートフル・アプリケーションは、ウィンドウの場所、ユーザー設定、最近のアクティビティなどを追跡します。ステートフル・トランザクションは、同じ人と定期的かつ継続して行う会話と考えることができます。

私たちが日常的に使用するアプリケーションの大部分はステートフルです。現在、テクノロジーの進歩に伴い、マイクロサービスとコンテナによって、クラウドでのアプリケーション構築とデプロイが一層容易になっています。 

クラウド・コンピューティングマイクロサービスの人気が高まるにつれ、アプリケーションのコンテナ化も同様に増加しています (ステートフルかステートレスかにかかわらず)。コンテナは、ライブラリや依存関係とともにパッケージ化されたアプリケーションのコードの単位であり、移動が容易で、デスクトップ、従来の IT インフラストラクチャ、クラウドのいずれの環境でも実行できます。 

コンテナには元々ポータブルで柔軟という性質があるため、ステートレスなものとして構築されました。しかし、コンテナの使用が広がると、既存のステートフル・アプリケーションのコンテナ化 (コンテナから実行することを目的とした再設計と再パッケージ化) が始まりました。これにより、ステートフル・アプリケーションはコンテナのメリットである柔軟性とスピード、さらには、ステートフル性に伴うストレージとコンテキストを備えるようになりました。

このため、ステートフル・アプリケーションとステートレス・アプリケーションの類似点が見られることがあります。たとえば、ステートレスで長期のストレージを必要としないが、Cookie を使用して同じクライアントによる要求をサーバーが追跡できるアプリケーションを作ることもできます。 

コンテナの人気が高まるにつれ、さまざまな企業がデータストレージ、Kubernetes、StatefulSets を使用してステートレスコンテナとステートフルコンテナの両方を管理する方法を提供するようになりました。ステートフル性は今やコンテナストレージ主要部分であり、ステートフルコンテナを使うかどうかというよりも、いつ使うかがポイントとなっています。  

ステートフルコンテナを使用するか、ステートレスコンテナを使用するかは、構築しているアプリケーションの種類や、必要な機能によって異なります。一時的かつ迅速に情報が必要な場合であれば、ステートレスがよいでしょう。しかし、アプリケーションがセッションをまたいで情報を保存しておく必要がある場合は、おそらくステートフルを利用するのが適切です。

ステートフルかステートレスかのご相談は、ぜひ Red Hat にお任せください。エンタープライズ対応の Kubernetes プラットフォームや Red Hat OpenShift でのステートフルコンテナのオーケストレーション、Red Hat Integration によるアプリケーション開発用の統合環境の構築など、Red Hat の受賞歴のあるサポートと業界最大のパートナー・エコシステムが支援します。 

The Open Source Way (オープンソースウェイ) として、当社のあらゆる製品がどのようにソリューションを構築し、開発者の生産性を向上させ、イノベーションを促進しているかご覧ください。

関連資料

記事

ステートフルとステートレス

あるものがステートフルかステートレスかは、別の何かとの通信の状態が記録される期間と、その情報をどのように保存する必要があるかによって決まります。

記事

Quarkus とは

Quarkus は、Java 仮想マシン (JVM) およびネイティブコンパイルのために作成された Kubernetes ネイティブの Java スタックで、Java をコンテナに最適化します。

記事

サーバーレスとは

サーバーレスは、開発者がサーバーを管理する必要なくアプリケーションを構築および実行できるようにするクラウドネイティブ開発モデルです。

クラウドネイティブ・アプリケーションの詳細はこちら

製品

統合されたテスト済みのサービス一式を備えたエンタープライズ・アプリケーション・プラットフォームであり、ユーザーの選ぶインフラストラクチャを使ってアプリケーションを市場に投入するために活用できます。

リソース

トレーニング

無料のトレーニング

Developing Cloud-Native Applications with Microservices Architectures