2017-01-01 27 views
1

假設我有一個API getName(String id)的restful服務X.我的代碼被部署到位於負載平衡器後面的5臺機器。相同的客戶端代碼在這些機器上運行,並在某處調用getName(String)api的服務X.該服務已經設置了一個限制,即每秒最多可處理3個呼叫。假設請求的週轉時間爲200毫秒,我如何確保我的客戶端不超過服務器的3 TPS限制?我沒有任何機制讓我的客戶相互溝通。如何避免服務器端的限制。如果我將車隊規模從5增加到10或15,該怎麼辦?有什麼我可以做的嗎?如何確保客戶端代碼在多臺計算機上運行時的服務調用上限?

會像截斷的指數退避對我有用嗎?

+0

指數退避是真正的客戶端重新嘗試打你的服務....並防止頻繁重試壓倒你的服務...在你的情況下,你需要禁止超過每秒調用總數正確....從任何ip每秒不超過3個電話? – prashant

+0

我照顧客戶端。我如何確保每秒不超過3次電話是我的問題,爲什麼你要求回大聲笑。我不知道如何確保這就是我要求的 –

+0

如果你每秒撥打3次以上的電話會發生什麼?您是否遇到識別問題的錯誤,以後可以重試請求嗎?請求失敗的次數是否爲每秒3次? –

回答

0

您只需保存會話中最後3個請求的請求到達時間。然後檢查第四個請求是否在1秒窗口內。

假設t0爲在該時間軸(時間以毫秒爲單位)的第四請求,

...-- T3 ----- ----- T2 T1 T0 ---- ----

if ((t0 - 1000) > t3) { 
    //4th req within 1 sec, so process the request 
} else { 
    //return HTTP status code 502(service temporarily overloaded) 
} 

如果要在負載平衡器節流:一種解決方案是使用一些共同的API /存儲的所有API實例。

相關問題