2016-10-03 61 views
0

我們正計劃爲我們的基於休息的框架實施速率限制器。但是我對於實現哪一個以及哪一個在併發性和速率限制之間更重要有些困惑。我發現在大多數地方,例如apache駱駝人已經實現了速率限制而不是併發。 但對我來說,似乎速率限制實際上沒有什麼意義,相反,併發是我們總是需要面向多個併發請求的服務? 請讓我知道你的想法。併發與速率限制

+0

您的意思是併發性和單個客戶端的速率限制? – starikoff

+0

我的意思是要爲服務外部請求服務的併發性和速率限制 –

+0

因此,您是否想限制一個客戶端或整個服務請求的請求率?如果一個客戶的請求影響另一個客戶的請求? – starikoff

回答

0

您當然希望儘可能多地默認爲併發請求服務。但是,高於某些請求率,您的服務性能可能會大幅下降。如果發生這種情況,每個客戶都會受到影響,而且您不再提供更多請求,而是越來越少,直到您的服務對任何人都無法使用。速率限制允許您不要讓新請求以超過某個速率進入系統,因此不會降低性能。您看起來對某些客戶而言,但至少有一些客戶得到了服務,而且您仍然可以在開始時對您的系統進行操作。過度的交換或垃圾收集,甚至無法連接到SSH時,可以有效地將整個服務器與它連接起來。

特定客戶端的速率限制(基於IP例如)可以減輕每個時間單元發出太多請求的「壞」客戶端的影響,或嘗試拒絕您。

請記住,通過將您的服務置於某種逆向代理(如nginx)後可以調整請求率; it can保持請求等待並且不會進入系統一段時間(並且nginx可以容納很多這些等待沒有性能下降),它可以完全放棄它們,它可以限制基於IP的請求等。

+0

好吧,我會舉一個例子,讓我們說java spring框架。現在在這個框架中,在框架級別,請求速率限制或併發功能會更有利嗎?與請求速率限制一樣,它可能會再次發生,之前的請求沒有提供,或者仍在進行處理,並且允許新的請求,從而導致服務整體失效所以,您不認爲單獨的速率限制不會真的沒有幫助達到目的?相反,保持一些併發值可以說100,並不提供進一步的請求,這不是更好的服務目的? –

+0

「不提供更多請求」是什麼意思?他們會被拒絕嗎?那麼它只是限速。處理線程是否會等待它們被處理?那麼你將浪費內存和上下文切換,並且會有很多客戶端斷開連接。只有當你正在異步處理請求時,你的模型纔會起作用。在這種情況下,它似乎工作正常。 – starikoff