comcast - より良いシステムを構築できるように、くだらないネットワーク接続をシミュレートします。

(Simulating shitty network connections so you can build better systems.)

Created at: 2014-11-12 11:15:58
Language: Go
License: Apache-2.0

Comcast

ネットワークパーティションやインスタンスの終了などのハード障害の下で分散システムをテストすることは重要ですが、これが最も頻繁に発生することであるため、壊滅的でない条件下で分散システムをテストすることも重要です。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
フラグは実行をスキップします。

私はあなたを信用していません、このコードはひどいです、私はGoが嫌いです、など。

シェルコマンドを実行するコードを実行したくない場合(オープンソースであるにもかかわらず、コードを読み取って変更できる)、またはよりきめ細かい制御が必要な場合は、代わりに直接実行できます。詳細については、これらのマニュアルページをお読みください。

Linux

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 / OSX

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