インフラ信頼性設計

英語名 Infrastructure Reliability
読み方 インフラストラクチャー リライアビリティ
難易度
所要時間 1時間〜2時間
提唱者 SRE / クラウドアーキテクチャ
目次

ひとことで言うと
#

冗長性・フェイルオーバー・自動修復の3つの柱で、単一障害点を排除し、障害が起きても自動的にサービスを継続できるインフラを設計するフレームワーク。

押さえておきたい用語
#

押さえておきたい用語
Redundancy(リダンダンシー)
同じ機能を持つコンポーネントを複数用意する冗長構成のこと。1つが壊れても別が引き継ぐ。
Failover(フェイルオーバー)
障害が発生した際に待機系に自動で切り替わる仕組みを指す。
SPOF(Single Point of Failure)
システム全体を停止させうる単一障害点。信頼性設計で最初に排除すべき箇所である。
Self-Healing(セルフヒーリング)
障害を検知して人手を介さず自動的に復旧する仕組み。コンテナの自動再起動が典型例。
Availability(アベイラビリティ)
サービスが正常に稼働している時間の割合。99.9%なら年間約8.7時間のダウンタイムが許容される。

インフラ信頼性設計の全体像
#

インフラ信頼性の3つの柱:冗長性・フェイルオーバー・自動修復
冗長性複数AZ/リージョン配置DBレプリケーションロードバランサー配下に複数台CDN/キャッシュ層の追加SPOFを排除するフェイルオーバー自動切り替え機構DBのAuto FailoverDNSフェイルオーバーリージョン間切替障害時に自動で切替自動修復異常検知と自動復旧K8sのPod再起動Auto Scalingヘルスチェック + 自動交換人手なしで復旧可用性の目安99.9%年間8.7時間のダウンタイム99.99%年間52分のダウンタイム99.999%年間5.2分のダウンタイム9を1つ増やすごとにコストは約10倍
インフラ信頼性設計の進め方フロー
1
SPOF特定
アーキテクチャ図で単一障害点を洗い出す
2
冗長化設計
SPOFを冗長構成に置き換える
3
自動化の実装
フェイルオーバーとセルフヒーリングを設定
カオスエンジニアリング
意図的に障害を起こして信頼性を検証する

こんな悩みに効く
#

  • サーバー1台が落ちるとサービス全体が止まる
  • 障害復旧が手動で、深夜のオンコール対応が負担になっている
  • SLAで99.9%を約束しているが達成できていない

基本の使い方
#

アーキテクチャ図でSPOFを洗い出す
現在のインフラ構成図を書き起こし、「この1コンポーネントが落ちたらどうなるか」を各ノードでシミュレーションする。DB、ロードバランサー、DNSサーバー、外部API依存が典型的なSPOF候補。
冗長化とフェイルオーバーを実装する
SPOFを冗長構成に置き換える。DBならプライマリ+スタンバイのAuto Failover、アプリケーションサーバーならロードバランサー配下に複数台。マルチAZ配置でAZ障害にも耐えられる構成にする。
セルフヒーリングとカオスエンジニアリングを導入する
Kubernetesのliveness/readiness probeやAuto Scaling Groupでのヘルスチェック+自動交換を設定する。定期的にカオスエンジニアリング(意図的な障害注入)でフェイルオーバーが正しく動作するか検証する。

具体例
#

例1:EC企業がマルチAZ化でSPOFを排除する

月間売上10億円のEC。データベースが単一AZの単一インスタンスで稼働しており、AZ障害時に 6時間 のサービス停止が発生した。

マルチAZ構成に移行。

コンポーネントBeforeAfter
DB単一AZ, 1台マルチAZ, Auto Failover
App Server単一AZ, 3台2AZ分散, Auto Scaling
キャッシュなしElastiCache Multi-AZ

移行後にAZ障害が発生した際、DBのフェイルオーバーが 28秒 で完了。ユーザーが認識できるダウンタイムは実質ゼロだった。年間可用性は 99.5% → 99.97% に改善。

例2:SaaS企業がKubernetesでセルフヒーリングを実現する

エンジニア40名のBtoB SaaS。EC2インスタンス上で直接アプリケーションを動かしていたが、メモリリークで週に 2〜3回 プロセスが停止し、そのたびに手動で再起動していた。

Kubernetesに移行し、liveness probeとreadiness probeを設定。メモリリークでプロセスが応答しなくなると自動でPodが再起動される仕組みにした。

手動再起動が 週3回 → ゼロ に。Pod再起動は自動で行われるため、オンコール呼び出し回数が 月15回 → 月3回 に減少。エンジニアの深夜対応負担が大幅に軽減された。

例3:決済企業がカオスエンジニアリングでフェイルオーバーを検証する

月間1,000万トランザクションの決済企業。冗長構成を組んでいたが、フェイルオーバーが実際に動作するかテストしたことがなかった。年次の障害訓練でフェイルオーバーを試みたところ、設定ミスで切り替えに 12分 かかり、目標の30秒を大幅に超過。

Chaos Engineeringツール(Litmus)を導入し、月1回の定期障害注入テストを実施。DB・キャッシュ・メッセージキューそれぞれのフェイルオーバーを検証。3ヶ月で設定ミスを 7件 修正した結果、実際の障害時にフェイルオーバーが 15秒 で完了するようになった。

やりがちな失敗パターン
#

  1. 冗長構成を作ったがフェイルオーバーをテストしない — 設定ミスが見つかるのは本番障害時。カオスエンジニアリングで定期的に検証する
  2. 可用性目標を過剰に設定する — 99.999%は99.9%の100倍のコストがかかる。ビジネス要件に見合った目標を設定する
  3. アプリケーション層のSPOFを見落とす — インフラは冗長でも、アプリケーションのシングルトン処理やファイルロックがSPOFになることがある
  4. セルフヒーリングに頼りすぎる — 自動再起動で症状は消えるが根本原因(メモリリーク等)は残る。自動復旧のログを定期的に確認し、根本対応を行う

まとめ
#

インフラ信頼性設計は冗長性・フェイルオーバー・自動修復の3つの柱でSPOFを排除し、障害が起きても自動的にサービスを継続する構成を作るフレームワーク。可用性目標はビジネス要件とコストのバランスで決定し、カオスエンジニアリングでフェイルオーバーの動作を定期的に検証する。9を1つ増やすコストを理解したうえで、必要十分な信頼性を実現するのが正しいアプローチになる。