カオスエンジニアリングとは?わざと障害を起こして復旧対処する、システムの”筋トレ”

カオスエンジニアリング

あなたはカオスエンジニアリングという言葉を聞いたことがありますか?

「カオスなエンジニアリングってどういうこと?」と不思議に思う方がいるかもしれませんが、これは近年注目されている、システムのトラブル処理や運用保守に役立つ考え方のひとつです。動画配信サービスNetflixが『Failure Injection Testing』というカオスエンジニアリングの手法を導入してから注目が集まっています。

今回は「カオスエンジニアリング」の概要と手順、Netflix社が定めた5つの原則、おすすめのカオスエンジニアリングのツールをご紹介します。

カオスエンジニアリングの概要

まずはカオスエンジニアリングとはどのようなものか、簡単にご紹介します。

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

Principles of Chaos Engineering』(Netflixによるカオスエンジニアリングに関する資料)によると、カオスエンジニアリングとは、”分散システムが本番環境の過酷な状況に耐えられるか確認するための一連の実験”です。

わかりやすく言い換えると、「正常稼働中の分散システム(サーバー)であえて小さな障害を起こすことで、大きな障害にもちゃんと耐えられるようにしよう!」という考え方です。

まず、小規模の障害を意図的に発生させ、特定のサーバーが一時的に使用できなくなったときにシステムがどう対応するかを把握します。このようなトラブル対処の知見を蓄積していき、サービスを大規模化したときの安定的な運用につなげます。

カオスエンジニアリング、何がカオスなの?

カオスエンジニアリングの「カオス」は、日本語でよく訳される「混沌」という意味ではなく、「カオス理論・力学、あるいは複雑系という意味です。

分散システムは複雑で、小規模な障害や事象を加えるとカオス的な振るまいをする(=何がどうなるかわからない)のでカオスと呼ばれます。

※カオスなのは「分散システムの振るまい」であり、意図的に起こされる障害はコントロールされたものです。

カオスエンジニアリングの利点

カオスエンジニアリングの利点は、「分散システムを有効活用しつつ、その欠点をカバーしていること」にあります。近年のトレンドも踏まえ、順にご説明します。

2018年のトレンド「分散システム」

サービスのシステムは、大きく「分散システム」と「集中システム」のふたつに分けられます。

「分散システム」は、多数のPCをネットワークで接続し、それぞれが役割分担をして稼働するシステムです。複数のPCが必要なので導入コストが高く、システム管理は複雑です。一方で、各コンピューターの負荷が軽減されるので、障害が発生した際は当該システムのみを停止すれば良く、トラブル時にサーバー全体を落とす必要がないというメリットがあります。

「集中システム」は、多数の役割をひとつのPCで引き受けるシステムです。集中システムのメリットは、管理運用が簡単であることと、セキュリティ管理がしやすいことです。一方で、メインのコンピューターへの負荷が大きいので、障害が発生したときにシステムを停止しなければいけない、復旧に時間がかかる、導入コストが高いなどのデメリットがあります。

2018年現在、システムのトレンドは「集中システム」から「分散システム」に移行しています。

分散システムの問題点をカバー

サーバー上で問題が起こったとき、「分散システム」では原因がどこにあるのかつきとめにくい、リカバリーの影響範囲がわかりづらいなどのデメリットがあります。

そこで登場するのが、障害を早期に見つけ被害を最小限に抑える仕組みであるカオスエンジニアリングです。わざと「小さな障害が発生している」状態にし、障害への耐性を高めるのです。

面倒なことを後回しにしてますます面倒くさくなるということは、みなさんも経験があるでしょう。障害も同じで、対策が後になればなるほどコストと手間がかかります。早い段階で障害を見つけることで、被害・コストを最小限に抑えることが可能になるのです。

カオスエンジニアリングの手順と5原則

続いてカオスエンジニアリングの手順と、Netflix社が定めた5つの原則をみていきましょう。

カオスエンジニアリングの手順

  1. 自動復旧システムが動作していることを確認する
  2. 小規模な障害(カオスエクスペリメント)を意図的に起こす
    (ツール使用してランダムにサーバーを落とす、手動でサーバーをダウンさせるなど)
  3. システムのトラブル対処を確認する

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

Netflix社は『Failure Injection Testing』で、カオスエンジニアリングについての5つの原則を定義しています。

1. 定常状態の振る舞いについて仮説を立てる:Hypothesize about steady state:

システムの「定常状態」とはなにか、どのような値をどのような早さで「どうアウトプットするのか」に注目しましょう。

2. 実世界の事象は多様である:Vary real-world events

カオスとして定義されるものはさまざまなので、潜在的影響や想定される発生頻度を考慮して、優先順位をつけて実験をしましょう。

3. プロダクション環境で実験を実行する:Run experiments in production:

「実験」といはいえ、実際にカオスエンジニアリングをおこなうのは本番環境です。より質の高いデータを手に入れるために、本番環境で実験をおこないましょう。

4. 実験を自動化して継続的に実行する:Automate experiments to run continuously

実験は継続的にしなければデータが集まらず、おこなう意味がありません。自動化して継続的に実行する仕組みを作ることを目指しましょう。

5. 爆発半径を最小化する:Minimize blast radius

本番環境で実験をおこなえば、想像以上の悪影響がおこる可能性があります。ユーザーに被害を受けさせないよう、緊急停止を可能にするなど被害を最小限に抑える工夫が必要です。いつでもトラブルへの対処ができるよう、実験は深夜ではなくオフィスに人がいる日中におこないましょう。

カオスエンジニアリングのおすすめツール

  • Chaos MonkeyNetflix社がオープンソースで公開する、意図的に障害を発生させるツール。Amazonクラウド上のインスランスをランダムで落とします。(Chaos GorillaChaos KongといったChaos Monkeyの機能をより強度にしたサービスもあります。)
  • PumbaDockerのコンテナをダウンさせるサービスです。

まとめ

いかがでしたか?

カオスエンジニアリングは日本でも認知を広めており、たとえばクックパッド社は2014年ごろからカオスエンジニアリングを導入しています。その経緯は「Chaos Engineering やっていく宣言」に書かれています。今後は日本でもカオスエンジニアリングを導入する企業が増えていくことが予想されます。

また、カオスエンジニアリングにおいて興味深い考え方が「Antifragile(アンチフラジャイル)」です。「Anti(アンチ)=反」と「Fragile(フラジャイル)=壊れにくい」という言葉の組み合わせで、壊れることを好意的に受け止める言葉です。人の筋肉が、負荷をかけて筋繊維を傷つけ、回復することでより強い筋肉になるように、システムも障害に対処すればするほど障害に強いシステムへと成長します。

カオスエンジニアリングは、これから主流になっていく障害対策のひとつです。この機会に、システム担当者の方はぜひ導入を検討してみてください。

SHARE

  • 広告主募集
  • ライター・編集者募集
  • WorkshipSPACE
週2日20万円以上のお仕事多数
Workship