web-dev-qa-db-ja.com

コイのインターフェースよりもループバックの待ち時間が短いのはなぜですか?

Stack Overflow Careers は次のように提供されます:

user -> internet -> our fw -> nginx -> haproxy -> web farm
  • FreeBSDは使用中のオペレーティングシステムです
  • このボックスにはファイアウォールやQoSはありません
  • nginxはSSLターミネーションを処理します
  • haproxyは負荷分散を処理します
  • nginx/haproxyは片道約15Mbpsをプッシュしています

通常の操作中に、nginxはHTTPリクエストを受信して​​処理を行い、同じボックスのループバックアドレス(127.0.0.1)にバインドされているhaproxyインスタンスにリクエストを渡します。

先日、トラブルシューティングを行うために、haproxyインスタンスをnginxが実行されていたのと同じインターフェイスに移動しました。これにより、すべてのリクエストに100ミリ秒のレイテンシがすぐに追加されました。このインターフェースは真の物理インターフェースではありませんが、 コイインターフェース です。

なぜそうなったのか誰かが私に説明できますか?多分パケットキューとの競合?または、「ソフト」であるため、ループバックは常に高速ですか?私がここで見逃している基本的なことがあります。誰かが親切に私を教えてくれることを願っています。

8
Michael Gorsuch

一定の100msの遅延は奇妙に見えます。パケットがバッファリングされ、すぐには配信されないようです。または、それらの一部がドロップされて再送信される可能性があります。このインターフェイスでtcpdumpを実行して、問題を表示できますか? FreeBSDでIPスタックがどのように機能するのか、CARPがどのように実装されるのかはわかりませんが、たとえば、スレーブが定期的に無償のARPでMACアドレスをアドバタイズし、マスターが交互にパケットを両側に送信する可能性はありますか?

また、実際のインターフェイスでtcpdumpを実行して、何も出力されないようにすることはできますか?

システムがCARPデバイスのARPエントリのキャッシュを控え、セッションの各パケットに対してARP要求が発行され、CARPデーモンが応答する必要がある可能性はありますか?

それらのほとんどはいくつかの愚かな考えですが、それはあなたが正しい方向に検索するのを助けるためです。

2
Willy Tarreau

わかりやすくするために、アクセス方法を127アドレスからローカルIPに変更しただけです。正しい?

それが事実であり、それが違いを生んだ場合、何かが正しくありません。 netstat -rnを使用してルーティングテーブルを確認し、ローカルIPのルーティング先を確認します。これは、lo0インターフェイス(127と同様)にルーティングする必要があります。

netstat -rnの出力は、漠然と次のようになります。

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            1.2.3.1            UGS       131  2655014   nge1
1.2.3.0/23         link#2             U           0       88   nge1
1.2.3.4            link#2             UHS         0    34848    lo0
127.0.0.1          link#5             UH          0    64678    lo0
192.168.0.0/26     link#1             U           2 41703537   nge0
192.168.0.1        link#1             UHS         0    70088    lo0
1
Chris S

トラフィックがボックスの外に出ないように、ループバックが割り込みレベルのソフトウェアi/fとして実装されているのを見てきました。これは、ループバックを実行していたときのケースでしたか?免責事項:一般的な質問です。 FreeBSDについては何も知りません。

-ピート

0
Pete Wilson