Windowsでのネットワークカオステスト
カオステストとは、自分が見ている前でわざと何かを壊し、ソフトウェアがどう対処するかを調べることです。ネットワーク層では、このツールがまさにそれで、1つのアプリケーションに障害を注入し、耐えられるかを確かめる手段です。
注入できる障害
| 障害 | 何を模すか |
|---|---|
| パケットロス、破損、重複 | 劣化した経路。パケットが消える、壊れて届く、2回届く。 |
| 遅延、ジッター、スパイク | 遅い、または不安定な経路。タイムアウトを破る数秒間の停止も含みます。 |
| 接続のリセット | ファイアウォールやロードバランサーが転送の途中で接続を切ること。 |
| 回線の断 | 経路が周期的に消えては戻ること。 |
| ブロックされたアドレスやポート | ほかはすべて動いているのに、依存先が1つだけ到達不能。 |
| インターネットは不通、LANは生存 | キャプティブポータルの形:ローカルは動き、外の世界は使えない。 |
カオスとノイズを分けるもの:再現性
再生できないランダムな障害から生まれるのは、バグ報告ではなく思い出話です。ここでのランダムな判断はすべてシードから生まれるため、同じコマンドで同じ実行が再現されます。失われるパケットも、ジッターも、順序も同じです:
BeanNetworkTester.exe --loss 15 --rst-prob 5 --seed 42 --target myapp.exe --duration 120
これが「先週の火曜に一度だけ落ちた」と、他の人が実行できる失敗するテストとの違いです。
パイプラインで
コマンドラインは終了コードで結果を報告するため、ビルドは「アプリが失敗した」と「ツールが起動できなかった」を区別でき、セッションも自動で終わります。忘れてはいけない後片付けのステップはありません:
BeanNetworkTester.exe --loss 10 --rst-prob 5 --target myapp.exe --duration 90 --format json > chaos.ndjson
1つではなく一連の障害を並べたものがシナリオファイルで、これも再現できます。終了コードと必要なランナーについては、時間で変わるシナリオとCIでのネットワークテストを参照してください。
影響範囲が止まるところ
限界は2つで、どちらも意図的です。狙いを定めると、影響は1つのプロセス、PID、アドレス、ポートに届くので、作業中のマシンは動き続けます。そして対象は1台のマシンです。これはクライアントとその接続のための障害注入であって、クラスターのためのものではありません。サービスやノードをまたぐカオスを探しているなら、それは別の種類のツールで、これは1つのWindowsアプリケーションの足元でネットワークを壊す部品です。
すべてその場で元に戻せます。STOPでネットワークは復元され、時間制限でも同じです。ツール自体が落ちた場合は内部のウォッチドッグがキャプチャを止めます。注入した障害が、それを注入した実行より長く生き残ってはなりません。