8

我一直在寫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分佈式功能。

建議使用其他平臺/主機/代理是在我的腦海只是沒用。

+0

所以您的Chrome擴展發送請求到服務器,然後你的服務器發送請求到堆棧API?是否有可能直接從Chrome調用堆棧API? – serg 2010-10-16 17:03:42

+0

@serg,是的,這是可能的,但這將意味着擴展將不斷向api端點提供大量針對每個用戶帳戶的請求。乘以用戶帳號的數量。 此外,它需要額外的權限才能從擴展訪問api端點。 但是,是的,我現在正在考慮這個解決方案 – 2010-10-16 17:15:13

+0

如果他們允許從一個單一的API萬項要求,那麼我認爲他們能夠處理它。 – serg 2010-10-16 17:19:38

回答

2

第一關:我使用的是分機號,它的岩石!

你有沒有考慮使用memcached和緩存的結果?
不是直接從API中獲取結果,而是嘗試首先在緩存中找到它們,如果它們使用它並且它們不是這樣:檢索它們並緩存它們並讓它們在X分鐘後過期。

其次,儘量一批上網用戶的請求,而不是問單個用戶的名譽問幾個用戶的口碑在一起。

+0

感謝您使用它。是的,我大量使用memcached來緩存API響應,但即使這樣也無法幫助我大幅減少api請求的數量。批量處理請求的想法似乎對我有幫助,謝謝。 – 2010-10-16 19:25:27

+1

@Vlasislav這是一種有趣的,我,吉文和你的相同配額的競爭,因爲我們所有的人都在GAE上運行的Web應用程序。立即發現! http://stackapps.com/questions/1708/stackprinter-this-ip-has-exceeded-the-request-per-day-limit – systempuntoout 2010-10-19 21:38:58

+0

@Vlasislav http://stackapps.com/questions/1713/google-app-引擎應用程序爲什麼你做油門只是檢查的IP – systempuntoout 2010-10-20 08:51:10

4

如果你正在尋找一種方法以編程方式管理谷歌App Engine的共享IP地址池,我堅信,你的運氣了。

不管怎樣,引用這個忠告是faq的一部分, 我覺得你比機會更多,以保持上運行你真棒應用

,我應該怎麼做,如果我需要更多的 每天請求?

某些類型的應用程序 - 服務和網站名稱的兩個 - 可以合法擁有比 典型應用更高 每一天的請求的要求。如果您可以 表明需要更高的 請求配額,請與我們聯繫。

編輯:
我錯了,其實你沒有任何機會。
Google App Engine [app]是doomed

+0

謝謝@systempuntoout,我知道這種可能性。我能以某種方式解決辦法10,000個IP請求限制,但實際上,我大多需要延長的請求「速度」,每秒以上說30,但無論如何,他們說:「請只請求增加的配額時,您的應用程序是活的,具有非 - 三位用戶「。我不確定100甚至1000是不是一個不重要的用戶數量。 – 2010-10-16 21:07:58

+0

以編程方式管理App Engine的IP引擎池,我也開始認爲這是不可能的。可能我會在GAE問題跟蹤器中填寫一個問題。 – 2010-10-16 21:12:16

+1

@Vladislav正如你所說,你應該將業務邏輯移至採用像SOAPI.js例如一個成熟的JS庫瀏覽器(其中IP是不是一個問題)。 – systempuntoout 2010-10-16 21:17:47