REL05-BP06 可能な限りサービスをステートレスにする - AWS Well-Architected Framework

REL05-BP06 可能な限りサービスをステートレスにする

サービスは、ステートを必要としないか、またはステートをオフロードして、異なるクライアントのリクエスト間で、ディスクやメモリのローカルに保存されたデータに依存しないようにする必要があります。これにより、可用性に影響を与えずにサーバーをいつでも交換できます。Amazon ElastiCache または Amazon DynamoDB は、オフロード状態の送信先として適しています。

このステートレスウェブアプリケーションでは、セッション状態は Amazon ElastiCache にオフロードされます。

図 7: このステートレスウェブアプリケーションでは、セッション状態は Amazon ElastiCache にオフロードされます。

ユーザーまたはサービスがアプリケーションと対話するとき、セッションを形成する一連のやりとりを頻繁に実行します。セッションは、ユーザーがアプリケーションを使用している間、リクエスト間で持続するユーザー固有のデータです。ステートレスアプリケーションは、以前のやりとりの知識を必要とせず、セッション情報を保存しません。

ステートレスな設計にすれば、あとは AWS Lambda や AWS Fargate などのサーバーレスコンピューティングサービスを利用できます。

サーバーの置き換えに加えて、ステートレスアプリケーションのもう 1 つの利点は、利用可能なコンピューティングリソース (EC2 インスタンスや AWS Lambda 関数など) がどのようなリクエストにも対応できるため、水平方向にスケーリングできることです。

このベストプラクティスが確立されていない場合のリスクレベル: ミディアム

実装のガイダンス

  • アプリケーションをステートレスにします。ステートレスアプリケーションは、水平方向へのスケーリングが可能であり、個別ノードのエラーに耐性があります。

    • リクエストパラメータに実際に格納できるステートを削除する

    • ステートが必要かどうかを調べてから、あらゆるステート追跡を Amazon ElastiCache、Amazon RDS、Amazon DynamoDB などの回復力のあるマルチゾーンキャッシュやデータストア、またはサードパーティの分散データソリューションに移動します。移動できないステートをエラーに強いデータストアに格納します。

      • 一部のデータ (Cookie など) は、ヘッダーまたはクエリパラメータで渡すことができます。

      • リクエストですばやく渡すことができるステートを削除するためにリファクタリングします。

      • 実際には毎回のリクエストで必要のないデータはオンデマンドで取得できます。

      • 非同期で取得できるデータを削除します。

      • 必要なステートの条件を満たしているデータストアを決めます。

      • リレーショナル型ではないデータには NoSQL データベースを検討します。

リソース

関連するドキュメント: