我一直在寫a Google Chrome extension for Stack Exchange。這是一個簡單的擴展,使您能夠跟蹤自己的聲譽並獲得Stack Exchange站點上的評論通知。基於Stack Exchange API的Google App Engine雲基礎架構上的請求限制實施
目前我遇到了一些我無法自己處理的問題。 我的擴展使用Google App Engine作爲後端向Stack Exchange API發出外部請求。每個單個客戶端請求擴展以獲取單個站點上的新評論可能會導致大量請求,以便api端點準備響應,即使對於非善用用戶也是如此。平均用戶至少有3個站點來自Stack Exchange網絡,有些用戶超過10個!
堆棧交換API具有請求限制:
單個IP地址每天只能發出一定數量的API請求(10,000)。
如果我在單個IP地址超過5秒的時間內發出超過30個請求,那麼API將切斷我的請求。
很明顯,所有的請求應該收縮爲每5 30秒,基於與memcached的分佈式鎖我目前已經實現的請求扼制邏輯。我使用memcached作爲一個簡單的鎖管理器來協調GAE實例的活動並節制UrlFetch請求。
但我認爲限制這種強大的基礎設施每5秒發出不超過30次請求是一個很大的失敗。這樣的api請求率不允許我繼續開發新的有趣和有用的功能,並且有一天它會停止正常工作。
現在我的應用程序有90個用戶,並且不斷增長,我需要解決如何最大化請求率的解決方案。
由於已知的App Engine通過不同IP的相同池來創建外部UrlFetch請求。 我的目標是編寫請求限制功能以確保符合api的使用條款並利用GAE分佈式功能。
所以我的問題是如何對提供最大實際API吞吐量,同時隨着使用的API條款相符並利用GAE分佈式功能。
建議使用其他平臺/主機/代理是在我的腦海只是沒用。
所以您的Chrome擴展發送請求到服務器,然後你的服務器發送請求到堆棧API?是否有可能直接從Chrome調用堆棧API? – serg 2010-10-16 17:03:42
@serg,是的,這是可能的,但這將意味着擴展將不斷向api端點提供大量針對每個用戶帳戶的請求。乘以用戶帳號的數量。 此外,它需要額外的權限才能從擴展訪問api端點。 但是,是的,我現在正在考慮這個解決方案 – 2010-10-16 17:15:13
如果他們允許從一個單一的API萬項要求,那麼我認爲他們能夠處理它。 – serg 2010-10-16 17:19:38