2017-08-17 234 views
0

我已經開始使用HAProxy限制我的API,但是我最大的問題不在於請求率,而是在多線程請求重疊時。如何執行單線程請求?

即使在我的合法每秒限制內,當客戶在發出另一個請求之前不等待響應時,也會出現嚴重問題。

是否有可能(例如,按IP地址)對請求進行排隊並將它們一次一個地傳遞到後端進行順序處理?

+0

那麼爲什麼不設置限制的併發連接,而​​不是請求率。這樣,無論客戶如何表現,建立的連接數量將受到限制。 – MoEmEn

+0

maxconn已經生效。全線連接數量不會有問題。我只需要限制同一客戶端的重疊請求。 – Tim

+0

我想這裏的「重疊請求」是指保持活動模式下的http。如果是這種情況,您可以使用[選項httpclose](http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#option%20httpclose),這應該告訴客戶端一次發送一個請求。 – MoEmEn

回答

0

以下是一個可能的解決方案,以每次src 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。