0

HAProxy + NodeJS + Rails セットアップがあり、ファイルのアップロードには NodeJS サーバーを使用します。

私が直面している問題は、haproxy を介して nodejs にアップロードしているときに、パケットが失われたために「TCP (高速) 再送信」が発生した場合、クライアントの TX レートが約 5 ~ 10 秒間ゼロに低下し、フラッディングされることです。 TCP 再送信あり。

NodeJS に直接アップロードした場合、これは発生しません (TCP 再送信も発生しますが、数十回の再送信試行でスタックすることはありません)。

私のテスト設定は、単一のファイル入力フィールドを持つ単純な HTML4 FORM (メソッド POST) です。NodeJS サーバーは受信データを読み取るだけで、他には何もしません。

これを複数のマシン、ネットワーク、ブラウザでテストしましたが、常に同じ問題です。

ファイルのアップロード中のクライアントからの TCP トラフィック ダンプを次に示します。

.....
TCP 1506    [TCP segment of a reassembled PDU]
>> everything is uploading fine until:
TCP 1506    [TCP Fast Retransmission] [TCP segment of a reassembled PDU]
TCP 66      [TCP Dup ACK 7392#1] 63265 > http [ACK] Seq=4844161 Ack=1 Win=524280 Len=0 TSval=657047088 TSecr=79373730
TCP 1506    [TCP Retransmission] [TCP segment of a reassembled PDU]
>> the last message is repeated about 50 times for >>5-10 secs<< (TX drops to 0 on client, RX drops to 0 on server)
TCP 1506    [TCP segment of a reassembled PDU]
>> upload continues until the next TCP Fast Retransmission and the same thing happens again

haproxy.conf (haproxy v1.4.18 安定版) は次のとおりです。

global
    log 127.0.0.1   local1 debug
    maxconn     4096 # Total Max Connections. This is dependent on ulimit
    nbproc      2

defaults
    log global
    mode        http
    option      httplog
    option      tcplog

frontend http-in
    bind *:80

    timeout client 6000

    acl is_websocket   path_beg /node/

    use_backend node_backend  if is_websocket

    default_backend app_backend

# Rails Server (via nginx+passenger)
backend app_backend
    option httpclose
    option forwardfor

    timeout server 30000
    timeout connect 4000
    server app1 127.0.0.1:3000

# node.js
backend node_backend
    reqrep ^([^\ ]*)\ /node/(.*)     \1\ /\2
    option httpclose
    option forwardfor
    timeout queue 5000
    timeout server 6000
    timeout connect 5000
    server node1 127.0.0.1:3200 weight 1 maxconn 4096

読んでくれてありがとう!:)

サイモン

4

2 に答える 2

0

「timeout http-request」をグローバルに 6 秒に設定してみてください。通常、再送信を拾うには低すぎる可能性があり、原因は説明されませんが、問題が解決する可能性があります.

于 2011-11-30T07:06:44.427 に答える
0

https://github.com/nodejitsu/node-http-proxyを使用してみてください。全体的なアーキテクチャ要件に適合するかどうかはわかりませんが、試してみる価値はあります。

于 2011-11-30T09:08:13.847 に答える