2017-08-17 6 views
0

私はHAProxyを使用してAPIのレートを制限し始めましたが、私の最大の問題はリクエストの割合ではなく、マルチスレッドのリクエストが重なったときです。シングルスレッドリクエストを実施するにはどうすればよいですか?

法的な1秒あたりの制限内であっても、クライアントが別のリクエストを発行する前に応答を待たなければ大きな問題が発生しています。

要求をキューに入れて、順次処理のためにバックエンドに要求を渡すことは可能ですか(たとえば、IPアドレスごとに)。

+0

次に、要求レートではなく同時接続数に制限を設定しないでください。この方法では、クライアントの動作に関係なく、確立された接続の数が制限されます。 – MoEmEn

+0

maxconnはすでに有効です。ボード全体の接続数が多い場合は問題ありません。私は、同じクライアントによる重複要求を制限する必要があります。 – Tim

+0

「重複要求」とは、キープアライブモードのhttpを意味します。その場合、[オプションhttpclose](http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#option%20httpclose)を使用することができます。これは、一度に1つの要求を送信するようにクライアントに指示する必要があります。 – MoEmEn

答えて

0

ここでは、1接続につき1回の接続でIPアドレスを実行することができます。
あなたは、対応するフロントエンドに以下のHAProxyのconfを配置する必要があります。

frontend fe_main 
    mode http 
    stick-table type ip size 1m store conn_cur 
    tcp-request connection track-sc0 src 
    tcp-request connection reject if { src_conn_cur gt 1 } 

これは、店舗同時接続は、ソースIPあたりをカウントすることをスティックテーブルを作成します。同じsrc IPからすでに確立されている接続があれば、新しい接続を拒否します。

APIまたはNATの背後にあるクライアントへの複数の接続を模倣するブラウザでは、APIを効率的に使用することができません。

関連する問題