”カオスエンジニアリング”について簡潔にまとめてみた
昨今、システムのレジリエンスを高めるための手法として、カオスエンジニアリングが注目を集めています。この記事では、カオスエンジニアリングについて、簡潔にまとめました。
■ サマリー
・カオスエンジニアリングは、システムに意図的に障害を発生させ、複雑なシステムの挙動を知ることで、耐障害性を高める開発手法である。
・サイバー攻撃が増加の一途をたどる中、攻撃を受けダウンしてもすぐに復旧するレジリエントなシステム作りが可能となる。
・システムの定常状態を定義し、現実世界で起こりうる障害を注入することで、システムの問題点を洗い出し、改善を実施する。
目次
- カオスエンジニアリングとは
- サイバーセキュリティとの関連性
- 基本手順
- 親和性の高い業界・システム
- 事例紹介
- まとめ
1. カオスエンジニアリングとは
「本番稼働中のサービスにあえて擬似的な障害を起こすことで、実際の障害にもきちんと耐えられるようにしよう」という概念です。障害が発生した場合、複雑なシステムほど、原因がどこにあるのかつきとめにくくなります。そこで、障害を早期に見つけ、被害を最小限に抑える取り組みであるカオスエンジニアリングが重要となります。
2. サイバーセキュリティとの関連性
米国国立標準研究所(NIST)はサイバーセキュリティフレームワーク(CSF)の中で、防御だけではなく、「検知」「対応」「復旧」について、言及しています。これは、「侵入を完全に予防するのは不可能。攻撃は受ける前提で、攻撃からいかに早く復旧するかが鍵」という昨今のサイバーレジリエンスの考えを踏まえたものです。サイバー攻撃を受けた際に、障害の範囲を特定し、早急に復旧するために、カオスエンジニアリングが有効です。
3. 基本手順
カオスエンジニアリングを実行するには、以下の5つの手順が必要です。
3.1 定常状態の定義
システムが通常動作をしていることを示す指標を定義する。このとき、「システム全体としてサービスを正しく提供できているか」を計測できる定量的な指標を定義する。
3.2 仮説の構築
障害時でも定常状態を維持する仮説を構築する。
3.3 変数の注入による実験
サービスを構成するシステムを対照群と実験群にわけ、実験群にのみ、現実世界で起こりうる変数(障害)を注入する。
3.4 検証
実験結果に対して、対照群と実験群の間で定常状態に差異があるかを確認する。
3.5 改善
構築した仮説が正しかったのか、もし正しくないのなら、どこに問題があったのか実験結果から学び、それをシステム改善に活かす。
4. 親和性の高い業界・システム
アマゾン ウェブ サービス ジャパン株式会社主催の「ChaosConf2019 recap」で、カオスエンジニアリングは、以下の業界やシステムと相性が良いと発表があったようです。
【業界】
・ECや金融業界など、可用性が事業の収益に直接的に影響する業界
【システム】
・マイクロサービス
※マイクロサービス:従来のモノリシックサービスとは異なり、DockerやKubernetesを活用し、個々のアプリケーションをなるべく疎結合にする開発手法。これにより、障害からいち早く復旧したり、デリバリの速度を速めることが可能。弊害として、原因がどこにあるのかつきとめにくく、リカバリーの影響範囲がわかりづらくなる。
5. 事例紹介
最後にカオスエンジニアリングを適用している企業を紹介します。
・Netflix
動画配信サービスで有名なNetflix社は、様々なシステム、ゾーン、さらにはリージョン全体がダウンした時に、サービスがどのように振る舞うのかテストしています。AWSのus-east-1リージョン全体で大規模障害が発生した際に、カオスエンジニアリングを実施していたことで、うまく対処できたようです。
・クックパッド
クックパッド社では、マイクロサービス化を進めていました。しかし、マイクロサービス化に伴ってサービス全体の可用性が落ちていました。なぜなら、サービス間の通信回数が増えるに伴って、通信が失敗するおそれのある箇所も増加してしまうからです。この問題に対して、カオスエンジニアリングを適用することにより、対障害性を高めることに成功しています。
・ユーザベース
ユーザーベース社では、自分たちの考えている冗長化が正しく動き続けるかどうか、継続的にチェックするために、カオスエンジニアリングを適用しています。ユーザーベース社では、組織に対して、カオスエンジニアリングを応用し、組織のキーパーソンが抜けたときに、どのような問題が生じるか調査し、レジリエントな組織を目指しているようです。
6. まとめ
カオスエンジニアリングについて、基本概念から事例まで紹介しました。Netflix社の名言として、「障害(failure)を避ける最も良い方法は、継続的に障害を起こ(fail)させること」があるようです。まさしくカオスエンジニアリングを表す言葉ですね。この記事でカオスエンジニアリングについて、少しでも理解を深めて頂けたなら幸いです。
参考文献
・カオスエンジニアリングと聞いてカオスになった人必見 - Qiita?
・カオスエンジニアリングを組織にも適用。アンチフラジャイルなシステムを目指してユーザベースが発見した問題とは? - はてなニュース
・【AWS グラレコ解説】カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説 - 変化を求めるデベロッパーを応援するウェブマガジン | AWS
・AWS大規模障害を乗り越えたNetflixが語る「障害発生ツールは変化に対応できる勇気を与えてくれる」 | さくらのナレッジ
・NIST Releases Version 1.1 of its Popular Cybersecurity Framework | NIST
・【レポート】Chaos Engineering が合うもの/合わないもの – ChaosConf2019 recap – | DevelopersIO
・カオスエンジニアリングを導入したクックパッドの挑戦 マイクロサービス化に伴う可用性の低下に対応 - エンジニアHub|Webエンジニアのキャリアを考える!