この記事では、共有に日6月の教師を賞賛しています。
ムーアの法則の終わりでは、スタンドアローンのコンピューティング性能が限界に達している、しかし、私たちのソフトウェアシステムのサイズと複雑さに成長している両方のため、ソフトウェアシステムは、常に、分散方向に動いています。近年では、クラウドサービス、コンテナの出現により、一部はマイクロのサービスに簡単にシステムを配布しました。
分散システムは、障害またはクラスタの単一のポイントがあっても、高可用性を必要とするだけでなく、システムが自己復元弾力や優雅な劣化する能力を持つようにしたい:分散技術のこれらの種類にもかかわらず、我々は同じである、システムの信頼性要件にしました、フォールトトレランス。
伸縮性、システムで可能な弱点を探るために、多くの大規模なソフトウェア、我々は合理的な構造、高品質なコードなどのテスト、多くの労力を改善をしましたが、多くは、最大分散システムの高可用性にはまだありません企業は、このような外国グーグル、ネットフリックス、国内のJingdongなどというように混沌としたプロジェクトを、導入されています。以下のようなシステムの弱点、何を呼び出すことができます
-
牛に起因する7種類の内部サービスの障害があったので、外部のシステム障害は、システム内の障害をカスケードにつながる、それは私たちのせいです
-
サービスが利用できない、不適切なダウングレード
-
無限リトライ要求エラーにつながる不適切なタイムアウトメカニズム、
カオスプロジェクト定義:
システムの制御の障害注入テスト発掘の弱点でシステム変更の挙動を観察することによって、分散、およびシステムの信頼性、信頼のシステム構築回復力暴走状態を改善するための改善を目標と。だから、混沌としたプロジェクトは新しい概念ではない、一般的な災害復旧テストの適用も混沌としたプロジェクトです。
一般的なカオスプロジェクトの実装手順
-
「定常状態」のベンチマークとして、通常の動作条件の下で、いくつかのメートル法を探して
-
実験群と対照群には、この「定常状態」を維持し続けることができると仮定すると、
-
など、サーバのクラッシュ、ディスク障害、ネットワークの切断、などの実験グループの噴射イベント、
-
上記の仮定の実験群および対照群「定常状態」との間の比較転覆物品2
「定常状態」の両方ダウンプロジェクトの混沌とした実装が一貫している場合は、この断層系に対処するために考えることができるシステムでより多くの信頼を確立するように、柔軟です。両方の定常状態が矛盾している場合は、それを修正するシステムの信頼性を向上させることができるように逆に、我々は、システムの弱点を発見しました。
カオスの理想的な原理は動作します:
1)「システムの定常特性は、」仮定を作ります
次の単一の電力供給は、例えば、システムは、単一の商品やサービス、トランザクション・サービス、支払いサービスを含むことができる各「ネジ」サービスの特定の状況に焦点を当てていない「と仮定」、むしろ通常の動作の下で全体の注文入力システムに焦点を当てます外部の状態、単一のボリューム、売上高、システムのスループット、遅延、エラー率、などとして、これらの指標は、一般的に広範な市場監視を持ち、そして時にプロモーション活動を除き、これらの指標は、一般的に曲線の浮き沈みをしないで、その傾向がありますそれは期待していました。(例えばキャッシュミス、CDNのノードの障害など)より広範な市場データに影響を与える問題のいくつかが、我々はまだするために、(例えばCPU、IO、など)各ノードのシステム・マイクロ指標を監視する必要がどのようにしていないがしかし、一つ注意点があり、このような問題は、(キャッシュ無効化は、圧力が増加するにつれて増加圧力MySQLクラスタ、CPU / IOをもたらし得る)ことを見出しました。
2)イベントは本当に現実の世界で発生する可能性があります
任意の状態のような、それが一般的であり、システムの安定性がイベントとして使用することができる影響を及ぼし得ます
-
ネットオフサーバーのダウンタイムなどのハードウェア障害、ソフトウェア障害七頭の牛や他の外部サービスを利用できないように:カテゴリフォールト
-
非障害イベント:トラフィック急増のような
また、タイプを分析することができ、周波数はシステム障害のイベント、目標と優先順位付けを引き起こした、と再びこの断層系を回避するために、これらのイベントを実装します。
3)運用環境で実行します
記事1、一般的にのみ生産割当環境によると、このような新しいユーザー登録毎日ユーザー日下部シングルボリュームとして、予測可能です。テスト環境と本番環境がまったく同じにすることはできませんので、真のシステムの信頼性を反映させるためには、通常、本番環境でカオスプロジェクトの実施をお勧めします。
4)継続的インテグレーション
混沌とした実装プロジェクトは、実用的な意義を持っているとして、継続的な統合を実行するように、インターネット・ソフトウェアは、毎日更新されます。
5)範囲を最小化
第3条によると、プロジェクトはカオス関数につながる可能性は、深刻な問題がある場合、故障の範囲を最小限にし、する必要性を迅速に復元することができますので、前提の目的のためのシステムの弱点を識別するために、オンラインで入手できない、あるいはキャピタル・ロスにつながりますその失敗は、制御可能です。そこで、時にはそれがA / Bテスト、影響の最小化に導入することができます。
上記の最も理想的な状況下でのカオス作品は、現実には、我々は既存のソフトウェアの成熟度に基づいてカオスの実装フェーズを持っている必要があります:
フェーズワン:一般の分散システム弾力
Jingdongは、例えば、彼らはデュアルXIを促進するために、運動前に失敗し、チームは二つのグループ、メーカーの障害として1つのグループに分け、障害ソルバーと応答など、他のグループは、失敗を調べるために、障害検出のチーム、応答は、回復力だけでなく、処理するとき。小さな介入に到達するために人々を必要としない障害は、大規模な障害が急速に人間の介入の目的に対処することができます。カオスプロジェクトは、大規模障害のチームの寛容性を改善するために、大きなプロモーションの前に集中的な2ヶ月の期間を経て実施しました。
我々はばかりだけプロジェクト混沌としたテスト環境の実装では最初に、統制リスクのために、始めているので、それはを参照していない、例えば、正確な市場データを持っていると、それは適切なベンチマークである「定常状態。」しかし、不可能ではない、微視的観点からマクロ経済指標を反映するように考えることができる市場データシステムを観察するために、我々は直接影響し、コアインターフェイスの数を除外することができ、及びペア(例えば登録、受注数量など)の市場データ導入後のシナリオこれらのインタフェースの混沌としたシステム統合テスト、これによりシステムの弱点を見つけるために、テスト結果を観察することによって、システムの信頼性を評価するために、それはテスト環境で可能です。
層を脇に置くされている場合、さらに、カオスは、対応する異常回復手段によって補わ手動注入一つ以上の特定の異常にターゲット・マシンのために、不確実異常な自動化の特定のタイプの汎用エンジニアリング異常可変タイミングと考えることができますその後、我々は一般的な異常のテストに適用することができます。
フェーズII:成熟の分散システムの弾力性
Netflixは、例えば、それらは、上記の手順とカオス工学の原理の理想的な実装に応じて、基本的に、作業を続け、自動実装カオス工学、弾性伸縮信頼性の高いシステム。
カオスは、プロジェクトを賞賛達成しています:
そのため混沌とした主要なプロジェクトのそれは「悪」であるため、私たちは「メガトロン」(トランスフォーマーボスの悪役)にそれを命名して、特定のイベントと原因のシステム障害を注入することです。注射障害が人為的に制御されているので、我々は、最初の段階にとどまっているため、障害の種類が実装されています:
-
高いCPU負荷
-
高負荷のディスク:頻繁にディスクの読み取りと書き込み
-
低ディスクスペース
-
エレガントオフラインアプリケーション:スムーズなアプリケーションを停止するには、アプリケーションの停止スクリプトを使用して
-
一貫性のないデータをもたらすことができるプロセスを殺す直接アプリケーションを停止
-
ネットワーク悪化:ランダム変更、いくつかのパケットデータは、データの内容が正しくありません
-
遅延:特定の範囲のパケットの遅延時間
-
ネットワークパケットロス:TCPパケットロス率の建設は完全な失敗ではありません
-
インターネットブラックホール:特定のIPからパッケージを無視します
-
到達不能外部サービス:廃棄されたパケットの外部サービスの出力ポートのローカルループバックアドレスへのアクセスや外部のドメインネームサービスポイント
参考
CHAOS工学の原則(http://principlesofchaos.org/)