フレームワークの概要
耐障害性分析フレームワークは、ワークロードの望ましい耐障害特性を特定することで作成されました。望ましい特性とは、対象となるシステムに必要とされる特性を意味します。耐障害性は通常、可用性によって測定されます。したがって、可用性の高い分散システムの特性は、冗長性、十分な容量、タイムリーな出力、正しい出力、障害分離の 5 つになります。以下の図に、これらの特性を示します。
-
冗長性 – 耐障害性は、単一障害点 (SPOF) を取り除く冗長性によって実現します。冗長性は、ワークロード内にある予備のコンポーネントからアプリケーションスタック全体のフルレプリカまで多岐にわたります。アプリケーションの冗長性を考慮するときは、使用するインフラストラクチャ、データストア、依存関係によって提供される冗長性のレベルを考慮することが重要です。例えば、Amazon DynamoDB と Amazon Simple Storage Service (Amazon S3) は、リージョン内の複数のアベイラビリティーゾーンにデータをレプリケートすることで冗長性を提供し、AWS Lambda は複数のアベイラビリティーゾーン内の複数のワーカーノードで各機能を実行します。使用するサービスごとに、そのサービスが提供する内容と設計する必要がある内容を考慮してください。
-
十分な容量 – ワークロードには、意図したとおり機能するために十分なリソースが必要です。リソースには、メモリ、CPU サイクル、スレッド、ストレージ、スループット、Service Quotas などが含まれます。
-
タイムリーな出力 – 顧客がワークロードを使用するときは、妥当な時間内に意図した機能を実行することが期待されます。サービスがレイテンシーに関するサービスレベルアグリーメント (SLA) を提供していない限り、その期待値は一般的に経験的証拠、つまり独自の経験が基になります。この平均的なカスタマーエクスペリエンスは通常、システム内のレイテンシー中央値 (P50) と見なされます。ワークロードが予想以上に時間がかかる場合、このレイテンシーはカスタマーエクスペリエンスに影響を与える可能性があります。
-
正しい出力 – 意図した機能を提供するためには、ワークロードのソフトウェアが正しく出力される必要があります。正しくないまたは不完全な結果は、応答がまったくない場合よりも悪くなる可能性があります。
-
障害分離 – 障害分離によって、障害が発生したときに意図した障害コンテナへの影響範囲が制限されます。これにより、ワークロードの特定のコンポーネントも一緒に失敗し、障害が他の意図しないコンポーネントにカスケードされるのを防ぐことができます。また、ワークロードの顧客への影響の範囲を制限することもできます。障害分離は、障害が既に発生していることを認めながらもそれを含める必要があることから、前の 4 つとは特性が若干異なります。障害分離は、インフラストラクチャ、依存関係、ソフトウェア機能で作成できます。
望ましい特性で違反が発生すると、ワークロードが使用できなくなるか、使用不可能と見なされる可能性があります。これらの望ましい耐障害性特性と多くの AWS お客様による操作体験に基づいて、単一障害点、過剰な負荷、過剰なレイテンシー、設定ミスとバグ、共有される運命という 5 つの一般的な障害カテゴリを特定しました。これらは SEEMS と略します。SEEMS は潜在的な障害モードを分類するための一貫した方法を提供しますが、その内容について次の表で説明します。
障害カテゴリ |
違反 |
定義 |
|---|---|---|
単一障害点 (SPOF) |
冗長性 |
1 つのコンポーネントで障害が発生すると、コンポーネントの冗長性がなくなり、システムが中断されます。 |
過剰な負荷 |
十分な容量 |
過剰な需要やトラフィックによるリソースの過剰消費により、リソースが期待される機能を実行できなくなります。これには、リクエストのスロットリングと拒否を引き起こす制限やクォータへの到達が含まれます。 |
過剰なレイテンシー |
タイムリーな出力 |
システム処理またはネットワークトラフィックのレイテンシーが、予想される時間、サービスレベル目標 (SLO)、またはサービスレベルアグリーメント (SLA) の範囲を超えています。 |
設定ミスとバグ |
正しい出力 |
ソフトウェアのバグやシステムの設定ミスにより、出力が不正確になります。 |
共有される運命 |
障害分離 |
以前の障害カテゴリのいずれかに起因する障害は、意図した障害分離境界を越え、システムの他の部分または他の顧客にカスケードされます。 |