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