読者です 読者をやめる 読者になる 読者になる

aws memo

AWS関連の備忘録 (※本ブログの内容は個人的見解であり、所属組織及び企業の意見を代弁するものではありません。1年以上古いエントリは疑ってかかってください)

訳:NetflixのChaos Monkyに続くサル軍団

The Netflix Tech Blog: The Netflix Simian Army

http://techblog.netflix.com/2011/07/netflix-simian-army.html

このスライドも参考になります

http://www.slideshare.net/adrianco/netflix-in-the-cloud-at-sv-forum

GitHub : https://github.com/simonmunro/ChaosMonkey

The second of the two winning designs for the Chaos Monkey T-Shirt #aws

===

以前、クラウドへの移行についてちょっと述べて、我々がそこから学んだことのいくつかをJohnが以前のポストでシェアした。最近、Netflixは可用性と信頼性を向上させることに注力しているので、我々の進捗と考えをシェアしたい。

クラウドとは、つまりは冗長性と耐障害性である。非単一コンポーネントで100%のアップタイムを保証できる(さらに、最も高価なハードウェアが時には故障する)ので、あるコンポーネントが故障してもシステム全体の可用性に影響を及ぼさないようなクラウドアーキテクチャを設計しなければならない。実際、弱いリンクよりも強くなる必要がある。依存した障害(ノード、ラック、データセンター、アベイラビリティゾーン、リージョンの冗長デプロイメント等)による緩やかなデグレードのようなテクニックを使うことができる。しかしただ耐障害性アーキテクチャを設計することでは十分ではない。「極めて稀な(once in a blue moon)」障害にも実際に耐えられる可用性を常にテストする必要がある。

タイヤのパンクを想像してみてほしい。トランクにスペアタイヤを積んでいたとしても、タイヤに空気は入っているだろうか?交換する工具を持っているだろうか?そして、最も重要なのは、正しく交換する方法を覚えているだろうか?フリーウェイで、雨の中、深夜に、確実にパンクに対処するただひとつの方法は、毎週日曜の午後にドライブ中にタイヤに穴を開けて、交換の訓練を積むことだ。現実世界でこれをすると、高価で時間を要するが、クラウドではほとんど無料で自動的に行える。

これが、我々がChaos Monkeyという、本番インスタンスをランダムに無効化しても顧客に影響を与えずに一般的な障害を克服できるか確認するためのツールを作った時の哲学である。武器を持った野生の猿がデータセンター(かクラウドリージョン)に放たれて、ランダムにインスタンスを撃ち落としてケーブルを噛んでも、割り込みなしに顧客にサービスを提供し続けられる、というアイディアに由来する。エンジニアがそばにいて慎重に監視している環境で、平日の半ばにChaos Monkeyを動かすことで、自分たちのシステムの弱点を学び続けることができ、弱点を克服するために自動復旧の仕組みを作る。そうすることで、次の日曜午前3:00にインスタンス障害が発生しても、注意する必要がない。

Chaos Monkeyの成功に触発されて、様々な種類の障害を誘発したり滅多に起きない状況を検出する新しいサル(simians)を作り始め、それらを克服するテストを行なっている。仮想サル軍団(Simian Army)が我々のクラウドを安全、高可用性を維持している。

Latency Monkey は、サービスがデグレしている状況を作るためにRESTfulクライアント・サーバ通信のレイヤにおける人工的な遅延を誘発し、上流のサービスが適切に応答するかを計測する。さらに、大きな遅延を作ることで、物理的なインスタンスダウンを伴わずに、ノードやサービス全体のダウンタイムをシミュレートできる(そして耐障害性をテストできる)。新サービスの耐障害性をテストする際に特に有用である。

Conformity Monkey は、ベストプラクティスから外れているインスタンスを検出し、そのインスタンスをシャットダウンする。例えば、オートスケールグループに属していないインスタンスを見つけたら、トラブルが発生するのを待っていると知っている。正しく再起動するための機会をサービスオーナーに与えるために我々はそのインスタンスをシャットダウンする。

Doctor Monkey は、異常になっているインスタンスを検出するために、CPU負荷等のヘルスサインを監視するように各インスタンス上に潜入している。異常のインスタンスを検出すると、サービスからそのインスタンスを除去し、問題の根本原因を調べる時間を与え、最終的に終了させる。

Janitor Monkey は、クラウド環境が乱雑だったり無駄だったりしないことを保証する。未使用のリソースを探して、それを捨てる。

Security Monkey は、Conformity Monkeyの拡張版になる。不適切なAWS セキュリティグループの設定等のセキュリティの脅威や弱みを検出すると、その弱っている(offending)インスタンスを終了させる。SSLDRM 認証のすべてが正しく、更新時期ではないことも保証する。

10-18 Monkey (現地化国際化 もしくはL10n-i18nの省略型)は、複数の地理的に離れた地域の顧客や、異なった言語や文字コードセットを使っている顧客にサービス提供しているインスタンスの設定や実行時障害を検出する。

Chaos Gorilla は、Chaos Monkeyと似ているが、アベイラビリティゾーン全体の障害をシミュレートする。ユーザに見えるような障害や手動の干渉無しに、サービスが自動的に機能しているアベイラビリティゾーンにリバランスするかを確認したい。

成長中のNetflix 猿軍団で定常的にすべての種類の障害について我々の弾力性をテストすることで、本番環境で遭遇するであろう障害の対応可能性と、顧客へのインパクトを最小化・極小化することについてより確信を感じている。クラウドモデルは、我々とこの業界にとって極めて新しい。耐障害性は進歩中であり、その利益を実現化している途中である。サル軍団の一部はすでに構築が完了しているが、まだ情熱が残っている。腕利きのエンジニがこの努力に参加して実現してくれるのを待っている。