java强制执行方法_java – 在多台机器上强制执行单一速率限制的好方法是什么?...
你說的兩件事是:
1)"I would like to rate limit so that only 10,000 requests get processed/day"
2)"while still load balancing those 10,000 requests."
首先,您似乎正在使用分而治之的方法,其中來自最終用戶的每個(gè)請求都被映射到n臺機(jī)器中的一臺.因此,為確保在給定時(shí)間范圍內(nèi)僅處理10,000個(gè)請求,有兩個(gè)選項(xiàng):
1)實(shí)現(xiàn)一個(gè)組合器,它將來自所有n臺機(jī)器的結(jié)果路由到
然后外部API能夠訪問的另一個(gè)端點(diǎn).這個(gè)端點(diǎn)能夠
保持正在處理的工作量的計(jì)數(shù),如果它超過了你的門檻,
然后拒絕這份工作.
2)另一種方法是將當(dāng)天處理的作業(yè)數(shù)量存儲為變量
在你的數(shù)據(jù)庫里面.然后,通常的做法是檢查您的閾值
在初始請求作業(yè)時(shí),數(shù)據(jù)庫中的值已達(dá)到
(甚至在你把它傳遞給你的一臺機(jī)器之前).如果閾值已經(jīng)過了
到了,然后在開始時(shí)拒絕工作.這與適當(dāng)?shù)南⑾嘟Y(jié)合,具有為最終用戶提供更好體驗(yàn)的優(yōu)點(diǎn).
為了確保所有這10,000個(gè)請求仍然是負(fù)載平衡的,以便沒有1個(gè)CPU處理比任何其他CPU更多的作業(yè),您應(yīng)該使用簡單的循環(huán)方法在m CPU上分配作業(yè).使用循環(huán)法,與bin /分類方法相同,您將確保作業(yè)請求盡可能均勻地分布在您的n CPU上.循環(huán)的一個(gè)缺點(diǎn)是,根據(jù)您正在處理的作業(yè)類型,您可能會在開始擴(kuò)展時(shí)復(fù)制大量數(shù)據(jù).如果這是您關(guān)注的問題,您應(yīng)該考慮實(shí)現(xiàn)一種局部敏感的哈希(LSH)函數(shù).雖然良好的散列函數(shù)盡可能均勻地分布數(shù)據(jù),但如果您選擇散列的屬性中的偏差很可能發(fā)生,則LSH會讓您使CPU處理的作業(yè)多于其他CPU.與往常一樣,這兩者都有權(quán)衡,所以你最了解你的用例.
總結(jié)
以上是生活随笔為你收集整理的java强制执行方法_java – 在多台机器上强制执行单一速率限制的好方法是什么?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 搜索长度未知的有序数组java_java
- 下一篇: 类的继承和派生java_类的继承和派生