ネットワークパーティションやインスタンスの終了などのハード障害の下で分散システムをテストすることは重要ですが、これが最も頻繁に発生することであるため、壊滅的でない条件下で分散システムをテストすることも重要です。Comcastは、遅延、帯域幅の制限、パケットのドロップ/並べ替え/破損などの一般的なネットワークの問題をシミュレートするように設計されたツールです。
これは、いくつかのシステムツールをポータブル(っぽい)方法でラップすることによって機能します。OSXなどのBSD派生システムでは、やなどのツールを使用
ipfwし
pfctlて障害を注入します。Linuxでは、とを使用
iptablesし
tcます。Comcastは、これらのコントロールの単なる薄いラッパーです。Windowsのサポートは
wipfw、ネイティブネットワークスタックまたはネイティブネットワークスタックで可能になる場合がありますが、これはComcastでまだ実装されておらず、後日導入される可能性があります。
$ go install github.com/tylertreat/comcast@latest
Linuxでは、Comcastは、デバイス、遅延、ターゲット/デフォルト帯域幅、パケット損失、プロトコル、ポート番号など、いくつかのオプションをサポートしています。
$ comcast --device=eth0 --latency=250 --target-bw=1000 --default-bw=1000000 --packet-loss=10% --target-addr=8.8.8.8,10.0.0.0/24 --target-proto=tcp,udp,icmp --target-port=80,22,1000:2000
OSXでは、Comcastは
pfctl(Yosemite以降の)サポートをチェックします。これは上記と同じオプションをサポートします。
pfctlが利用できない場合は、
ipfw代わりにを使用します。これは、デバイス、遅延、ターゲット帯域幅、およびパケット損失オプションをサポートします。
BSD(with
ipfw)では、Comcastは現在、デバイス、遅延、ターゲット帯域幅、およびパケット損失のみをサポートしています。
$ comcast --device=eth0 --latency=250 --target-bw=1000 --packet-loss=10%
これにより、250ミリ秒の遅延が追加され、帯域幅が1Mbpsに制限され、指定されたポート番号(低速レーン)で指定されたプロトコルを使用して、ターゲット(Linuxの場合)の宛先アドレスにパケットの10%がドロップされます。指定されたデフォルトの帯域幅は、すべての出力トラフィック(高速レーン)に適用されます。これをオフにするには、次のコマンドを実行します。
$ comcast --stop
デフォルトでは、comcastは実行するシステムコマンドを決定し、それらをstdoutに記録して、実行します。
--dry-runフラグは実行をスキップします。
シェルコマンドを実行するコードを実行したくない場合(オープンソースであるにもかかわらず、コードを読み取って変更できる)、またはよりきめ細かい制御が必要な場合は、代わりに直接実行できます。詳細については、これらのマニュアルページをお読みください。
Linuxでは、を使用
iptablesして着信パケットと発信パケットをドロップできます。
$ iptables -A INPUT -m statistic --mode random --probability 0.1 -j DROP $ iptables -A OUTPUT -m statistic --mode random --probability 0.1 -j DROP
tcまたは、いくつかの追加オプションをサポートするを使用することもできます。
$ tc qdisc add dev eth0 root netem delay 50ms 20ms distribution normal $ tc qdisc change dev eth0 root netem reorder 0.02 duplicate 0.05 corrupt 0.01
リセットするには:
$ tc qdisc del dev eth0 root netem
BSD派生システムでトラフィックを形成するには、
ipfwパイプを作成して構成します。特定のホストまたはネットワークに対して、着信トラフィックと発信トラフィックを個別に制御できます。
$ ipfw add 1 pipe 1 ip from me to any $ ipfw add 2 pipe 1 ip from any to me $ ipfw pipe 1 config delay 500ms bw 1Mbit/s plr 0.1
リセットするには:
$ ipfw delete 1
注:ipfw
OSXYosemiteでは削除されましたpfctl
。
これは、Comcastにプラグインできる値を持つネットワーク条件のリストです。出くわす可能性のあるものをさらに追加してください。
名前 | レイテンシー | 帯域幅 | パケットロス |
---|---|---|---|
GPRS(良い) | 500 | 50 | 2 |
エッジ(良い) | 300 | 250 | 1.5 |
3G / HSDPA(良い) | 250 | 750 | 1.5 |
ダイヤルアップ(良い) | 185 | 40 | 2 |
DSL(悪い) | 70 | 2000 | 2 |
DSL(良い) | 40 | 8000 | 0.5 |
WIFI(良い) | 40 | 30000 | 0.2 |
スターリンク | 20 | - | 2.5 |