カオスエンジニアリング

掲載:2024年12月25日

用語集

「カオスエンジニアリング」とは、本番稼働中のシステムで意図的に障害を発生させて挙動を観察し、耐障害性を検証・改善する手法のことです。近年、クラウドを利用したマイクロサービスや分散システムの採用が一般的になりました。カオスエンジニアリングは、分散化された複雑なシステムのサービス停止を未然に防ぐアプローチとして注目されています。

         

カオスエンジニアリングとは

カオスエンジニアリングは、世界的な動画配信サービス企業であるNetflixが最初に提唱・実践しました。背景には、多数のマイクロサービスで構成された大規模な分散システムの複雑さがあります。

従来のモノリシック(一枚岩)なシステムは、障害時の挙動や影響範囲を把握しやすい構造でした。一方、マイクロサービスなどの高度に分散化されたシステムは、その複雑さゆえ、障害時の予期せぬ挙動や波及のリスクが高まります。これに対して、意図的に障害を発生させてシステムの挙動や影響範囲を事前に把握し対策を打つのが、カオスエンジニアリングのアプローチです。

カオスエンジニアリングの最大の特徴は、稼働中の本番環境で障害を起こす点にあります。これはBCP(事業継続計画)やDR(災害復旧)と密接な関係があり、システムの障害耐性を高めることで、対外的にも組織の信頼性をアピールできるといったメリットがあります。実際にユーザーに利用されている環境で検証することで、現実に起こりうる問題や自動復旧能力を確認し、大規模なサービス停止のリスクを未然に防ぐことが可能です。

日本でも、クックパッドやヤフーなどがカオスエンジニアリングを取り入れて成果をあげています。

カオスエンジニアリングの5つの原則

Netflixでカオスエンジニアリングを推進したメンバーらが記した「Principles of chaos engineering(カオスエンジニアリングの原則)」では、カオスエンジニアリングの5つの原則として、以下が示されています。

1.定常状態における振る舞いの仮説を立てる
スループットやエラーレート、レイテンシーなど測定可能な出力を定常状態の指標とし、障害注入前後の変化を観察してシステムの挙動を評価する
2.実世界の事象は多様である
サーバーダウンやソフトウェア障害、トラフィック急増など、現実に想定される多様なシナリオを立て、潜在的な影響や発生頻度に基づいて優先順位付けする
3.本番環境で検証を実行する
実際のトラフィックパターンや利用状況下で起こりうる障害時の挙動を把握するため、稼働中の本番環境での検証が推奨される
4.継続的に実行する検証の自動化
手作業での検証は非効率なため、自動化ツールを活用して継続的に実施する
5.影響範囲を局所化する
本番環境での検証は顧客サービスに影響を与える可能性があるため、影響範囲(Blast radius:爆発半径)を局所化して被害を最小限に抑える

カオスエンジニアリングを計画的に実行するためのツールに、Netflixが開発した「Chaos Monkey」や、AWSのマネージドサービスである「AWS Fault Injection Simulator」などがあります。

カオスエンジニアリング実践のポイント

5つの原則からもわかるように、カオスエンジニアリングは、決して本番環境でランダムに障害を発生させるわけではありません。一歩間違えると顧客サービスに大きな影響を与えかねないため、システムを十分に理解し、影響範囲を適切に管理したうえで計画的に実施することが重要です。

また、カオスエンジニアリングは、どのようなシステムに対しても適用できる万能な手法ではありません。障害時の挙動や影響の特定が難しい、大規模かつ複雑な分散システムに対して特に効果の高い手法です。それ以外のシステムで実施すると、リスクがメリットを上回る可能性が高いため、慎重な判断が求められます。