4 ポイント 投稿者 GN⁺ 2024-01-17 | 1件のコメント | WhatsAppで共有
  • Go言語で書かれたTCPプロキシで、さまざまな可変ネットワーク遅延時間をシミュレーション可能

基本的な使用例

  • ポート2000で待ち受ける新しいインスタンスを作成し、TCPトラフィックを localhost:80 にプロキシし、基本遅延時間は100ms、サイン波の振幅は100ms(追加遅延の最大値200ms、最小値0)、周期は1分:
    speedbump --latency=100ms --sine-amplitude=100ms --sine-period=1m --port=2000 localhost:80  
    
  • または、kffl/speedbump コンテナイメージを使って speedbump を実行する場合:
    docker run --net=host kffl/speedbump:latest --latency=100ms --sine-amplitude=100ms \  
      --sine-period=1m --port=2000 localhost:80  
    
  • 基本遅延時間が300msで、下のグラフに示されているように振幅200ms、周期2分ののこぎり波遅延時間を持つ新しいインスタンスを作成:
    speedbump --latency=300ms --saw-amplitude=200ms --saw-period=2m --port=2000 localhost:80  
    
  • 複数の遅延時間の加算を同時に実行することが可能。
  • Speedbump は lib パッケージを通じてGoライブラリとして使用可能。

GN⁺の意見:

  • Speedbump はネットワーク遅延時間のシミュレーションに役立つツールで、ネットワークベースのアプリケーションの性能をテストして最適化するのに役立つ可能性がある。
  • Go言語で書かれているためGo開発者にとって親しみやすく、さまざまな遅延時間パターンを簡単にシミュレーションできる機能を提供する。
  • オープンソースであり Apache 2.0 ライセンスに従うため、コミュニティの貢献を通じて継続的に改善される可能性がある。

1件のコメント

 
GN⁺ 2024-01-17
Hacker News のコメント
  • ActivityPub の実装をさまざまなネットワーク規模や条件でテストするため、似たような取り組みを調べた。tc コマンドを使って特定のインターフェースに遅延を追加する方法を学び、これは Docker コンテナでもうまく動作する。すでに多くのシステムにインストールされている可能性がある。
    • 例のコマンド: tc qdisc add dev eth0 root netem delay 100ms
  • Netflix では「latency monkey」と呼ぶツールを開発した。下流サービスが遅くなっていることを検知するのは、サービスが利用不能なときに検知するよりはるかに難しい。このツールは一定の割合でパケットを落として再送を誘発し、その結果としてパケットの遅延や順序の入れ替わりを起こす。ネットワークアクセス向けのエラーハンドリングコードで多くの問題を発見した。
  • インターネットアプリケーションに携わるすべてのソフトウェアエンジニアは、このようなツールを日常的に使うべきだ。QUIC と TCP の両方が必要で、DNS を含むすべての UDP を捕捉できる必要がある。開発者が高性能コンピューティング環境を使わなければ、Web アプリの 90% は消えるだろうと確信している。
  • 多くのアプリは断続的なネットワーク接続状態で性能が低下する。アプリ開発者は、シミュレートした断続的な接続性をテストすることで他の人を助けられる。多くのアプリには、メールクライアントのような「送信トレイ」機能が不足している。災害救援の状況で一般的な接続問題をシミュレートするための、参照用 toxiproxy「テストケース改変器」を誰かが開発できないか、という問いがある。
  • Mac では内蔵ツールを使って同様のことができる。ネットワーク接続速度をシミュレートするためのコマンド例も示されている。
  • Mac で低速ネットワークをシミュレートしたいときに Network Link Conditioner を見つけた。プロキシ設定やその他の設定なしで使え、Xcode の追加ツールからインストールする必要がある。
  • 長いこと活動していないが、「comcast」という名前が多くのことを物語っている。
  • Windows で使ったことのある類似ツールとして「clumsy」がある。
  • FreeBSD にも「dummynet」という機能があり、ipfw の一部として遅延、帯域幅制限、キューサイズ、パケット損失を注入できる。macOS と同様の機能だ。
  • 最初の職場で、マネージャーが FreeBSD の IPFW ファイアウォールを設定して ICMP 応答を遅くしていたことは忘れられない。誰かが ping を送るたびに、応答時間が常に最大に見えるようになっていた。そのマネージャーはいたずら好きだった。