2012-12-17 147 views
5

我有多個服務器/工作人員通過執行API請求的任務隊列。 (使用Memcached和Celery作爲隊列的Django)API請求每秒限制爲10個請求。我如何評價限制它,以便請求總數(所有服務器)不超過限制?分佈式速率限制

我查看了一些相關的速率限制問題,我猜他們關注的是更線性的非併發情況。我應該採取什麼樣的方式?

回答

0

您從Guava項目中看過Rate Limiter嗎?他們在最新版本中引入了這個類,它似乎部分滿足您的需求。

當然,它不會計算分佈式環境中多個節點的速率限制,但是你做的是根據正在運行的節點的數量動態地配置速率限制(即,對於5個節點,你將有速率限制的2個API請求一秒)

0

我一直在開發一個開源項目來解決這個確切的問題Limitd。雖然我沒有其他技術的客戶端,但協議和想法很簡單。

您的反饋非常歡迎。

0

可惜我解決了這個問題不是你的技術:bandwidth-throttle/token-bucket

如果你想實現它,這裏的執行理念:

這是一個token bucket algorithm其中包括代用幣轉換成時間戳,因爲當它最後完全是空的。每次消耗更新此時間戳(鎖定),以便每個進程共享相同的狀態。