ステートレス

プロセスが内部に状態を持たず、リクエストごとに独立して処理する設計原則

設計サーバーレス

ステートレスとは

ステートレスは、プロセスが内部に状態を持たず、リクエストごとに独立して処理する設計原則である。Twelve-Factor App の第 6 原則。Lambda は本質的にステートレスで、水平スケーリングと耐障害性の基盤。

ステートフル vs ステートレス

ステートフルとステートレスの違いを以下にまとめる。

観点ステートフルステートレス
状態の保持プロセス内外部ストレージ
スケーリング困難 (状態の同期が必要)容易 (インスタンスを追加するだけ)
障害復旧状態が失われる別のインスタンスで即座に復旧
テスト状態に依存して複雑入出力だけでテスト

状態の保存先

状態の保存先を以下にまとめる。

状態保存先
セッションDynamoDB
キャッシュElastiCache (Redis)
ファイルS3
一時データLambda /tmp (エフェメラル)
ジョブの進捗Step Functions

Lambda のステートレス性

Lambda のステートレス性を図で示す。

リクエスト 1 → Lambda インスタンス A → DynamoDB
リクエスト 2 → Lambda インスタンス B → DynamoDB
リクエスト 3 → Lambda インスタンス C → DynamoDB
→ どのインスタンスが処理しても同じ結果
→ インスタンスが破棄されてもデータは DynamoDB に残る

ステートレスのメリット

インスタンスが状態を持たないため、水平スケーリングでインスタンスを自由に増減できる。1 つのインスタンスが壊れても他に影響がなく、耐障害性が高い。テストも入出力だけで完結し、デプロイ時に新旧インスタンスが共存できるため安全にリリースできる。

全体像を把握するには関連書籍も有用。

この記事は役に立ちましたか?

関連用語

関連する記事