# グレースフルデグレーデーション ## 定義 グレースフルデグレーデーション(graceful degradation)とは、システムの一部が障害を起こした際に、完全にサービスを停止するのではなく、限定的な形で機能を継続する設計原則である。「障害を防ぐ」という目標に並立する「よりよく失敗する(fail better)」という哲学として位置づけられる。 データ完全性を部分可視性より優先する設計は通常運用では適切だが、大規模な部分障害(例: ノードの 50〜60% が停止)において、残存するリソースがあるにもかかわらずサービスが 100% 停止しているように見える「スクエアウェーブ障害パターン」を生む。グレースフルデグレーデーションはこのパターンを避け、完全なデータセットが揃わないときも不完全な結果を提供し続けることを目指す。(Source: [[@2025__Datadog Engineering Blog__Failure is inevitable - Learning from a large outage and building for reliability in depth at Datadog]]) ## 対比:フェイルファスト vs. グレースフルデグレーデーション - **フェイルファスト**([[ソフトウェア耐障害性]]、Jim Gray 1985): エラーを早期に検知して処理を停止し、不正確な状態の伝播を防ぐ。単一コンポーネント・単一ノード文脈での障害隔離に有効。 - **グレースフルデグレーデーション**: 分散システムの**部分障害**文脈で、フェイルファストによる完全停止の代わりに、限定的な正確性を受け入れてでも継続運用を選ぶ。ユーザー向けの「ゼロか百か」を避ける。 二者は対立ではなく**スコープが異なる**。コンポーネント内ではフェイルファストを維持しつつ、システム全体ではグレースフルデグレーデーションを実現するという組み合わせが一般的。 ## 設計パターン(Datadog の実践から) Datadog が 2023 年の大規模障害後に導入した 8 原則: 1. **エンドユーザーニーズの最優先** — 内部の完全性よりも顧客への価値提供を最上位に置く 2. **早期永続化** — パイプライン入口でのディスクベース永続化で、障害中のデータ損失を防ぐ 3. **グローバル制御システムの回避** — 単一障害点となるグローバルな制御機構を避ける 4. **シンプルなデータ優先順位付け** — 複雑なインフラなしにライブデータを優先配信する 5. **リトライ・キャッシュの注意深い設計** — 指数バックオフとデッドレターキューでカスケード障害を防ぐ 6. **技術的負債の削減** — ボトルネック依存(共有 Cassandra キャッシュ等)を除去する 7. **リカバリツールへの投資** — Kubernetes PriorityClass や高速オートスケーリングで復旧を加速する 8. **ブレークグラスによるオペレータ制御** — 循環依存など通常手順では解決できない状況のための手動オーバーライドを用意する ## 横断的知見 - **スクエアウェーブ障害パターン**: 50〜60% のリソースが失われてもシステムが 100% 停止に見える現象は、「データ完全性か否か」という二値的な設計判断が生む。部分結果を受け入れる設計判断が、部分障害時の可用性を不連続ではなく連続的にする。(Source: [[@2025__Datadog Engineering Blog__Failure is inevitable - Learning from a large outage and building for reliability in depth at Datadog]]) ## 未解決の問い - データ完全性とグレースフルデグレーデーションのトレードオフをどのように定量的に測定するか。ユーザーが「不完全な結果」をどの程度まで許容できるかの閾値は製品ドメインによってどう異なるか。 - グレースフルデグレーデーションの実装が、通常運用時のシステム複雑性(優先順位付けロジック、ブレークグラス機構の保守)に与えるコストをどう評価するか。 - [[メタ安定障害]](リカバリ試行が障害を悪化させる循環)との関係:ブレークグラスはメタ安定状態からの脱出手段としてどう機能するか。 ## 関連 - 概念: [[ソフトウェア耐障害性]] / [[障害緩和]] / [[インシデント管理]] / [[メタ安定障害]] / [[クラッシュリカバリ]] - エンティティ: [[Datadog]] - ソース: [[@2025__Datadog Engineering Blog__Failure is inevitable - Learning from a large outage and building for reliability in depth at Datadog]] - 関連 MOC: [[structures/SRE - MOC]] ## 出典 - [[@2025__Datadog Engineering Blog__Failure is inevitable - Learning from a large outage and building for reliability in depth at Datadog]]