0
我已經開始使用HAProxy限制我的API,但是我最大的問題不在於請求率,而是在多線程請求重疊時。如何執行單線程請求?
即使在我的合法每秒限制內,當客戶在發出另一個請求之前不等待響應時,也會出現嚴重問題。
是否有可能(例如,按IP地址)對請求進行排隊並將它們一次一個地傳遞到後端進行順序處理?
我已經開始使用HAProxy限制我的API,但是我最大的問題不在於請求率,而是在多線程請求重疊時。如何執行單線程請求?
即使在我的合法每秒限制內,當客戶在發出另一個請求之前不等待響應時,也會出現嚴重問題。
是否有可能(例如,按IP地址)對請求進行排隊並將它們一次一個地傳遞到後端進行順序處理?
以下是一個可能的解決方案,以每次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。
那麼爲什麼不設置限制的併發連接,而不是請求率。這樣,無論客戶如何表現,建立的連接數量將受到限制。 – MoEmEn
maxconn已經生效。全線連接數量不會有問題。我只需要限制同一客戶端的重疊請求。 – Tim
我想這裏的「重疊請求」是指保持活動模式下的http。如果是這種情況,您可以使用[選項httpclose](http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#option%20httpclose),這應該告訴客戶端一次發送一個請求。 – MoEmEn