Ich habe geschrieben a Google Chrome extension for Stack Exchange. Es ist eine einfache Erweiterung, mit der Sie Ihren Ruf verfolgen und Kommentare zu Stack Exchange-Sites erhalten können.Stack Exchange API-kompatible Anfrage Drosselklappen-Implementierung in Google App Engine Cloud-Infrastruktur
Derzeit habe ich mit einigen Problemen konfrontiert, die ich selbst nicht bewältigen kann. Meine Erweiterung verwendet Google App Engine als Back-End, um externe Anforderungen an die Stack Exchange-API zu stellen. Jede einzelne Clientanforderung von der Erweiterung für neue Kommentare an einem einzelnen Standort kann viele Anforderungen an einen API-Endpunkt zur Vorbereitung der Antwort selbst für nicht skeetische Benutzer verursachen. Der durchschnittliche Benutzer hat mindestens Konten auf 3 Sites von Stack Exchange Network, einige haben> 10!
Die Stack Exchange-API verfügt über Anforderungsbeschränkungen:
Eine einzelne IP-Adresse kann nur eine bestimmte Anzahl von API-Anfragen pro Tag (10.000) erstellen.
Die API wird meine Anfragen abschneiden, wenn ich mehr als 30 Anfragen über 5 Sekunden von einer einzelnen IP-Adresse aus mache.
Es ist klar, dass alle Anfragen auf 30 pro 5 Sekunden gedrosselt werden sollen und derzeit habe ich Anfrage Drosselungslogik basierend auf einer verteilten Sperre mit Memcached implementiert. Ich benutze memcached als einen einfachen Lock-Manager, um die Aktivität von GAE-Instanzen zu koordinieren und UrlFetch-Anfragen zu drosseln.
Aber ich denke, es ist ein großer Fehler, eine solche leistungsfähige Infrastruktur zu begrenzen, um nicht mehr als 30 Anfragen pro 5 Sekunden auszugeben. Eine solche Anforderungsrate erlaubt es mir nicht, die Entwicklung neuer interessanter und nützlicher Funktionen fortzusetzen, und eines Tages wird es überhaupt nicht mehr funktionieren.
Jetzt hat meine App 90 Benutzer und wächst und ich brauche eine Lösung, um die Anfragerate zu maximieren.
Wie bekannt macht App Engine externe UrlFetch-Anfragen über denselben Pool von verschiedenen IPs. Mein Ziel ist es, Request-Throttle-Funktionalität zu schreiben, um die Einhaltung der API-Nutzungsbedingungen zu gewährleisten und verteilte GAE-Funktionen zu nutzen.
Also meine Frage ist, wie - maximale praktische API-Durchsatz bei gleichzeitiger Einhaltung der API-Nutzungsbedingungen und die Nutzung GAE verteilte Fähigkeiten.
Beratung, eine andere Plattform/Host/Proxy zu verwenden, ist einfach nutzlos in meinem Kopf.
Ihre Chrome-Erweiterung sendet also Anfragen an Ihren Server, und dann sendet Ihr Server Anfragen an die Stack-API? Wäre es möglich, stack api direkt aus Chrome aufzurufen? – serg
@serg, Ja, es wäre möglich, aber dies bedeutet, dass die Erweiterung ständig viele Anfragen an den api-Endpunkt für jedes Benutzerkonto stellt. Multiplizieren Sie dies mit der Anzahl der Benutzerkonten. Außerdem wird eine zusätzliche Berechtigung für den Zugriff auf API-Endpunkte von der Erweiterung benötigt. Aber ja, jetzt denke ich über diese Lösung –
Wenn sie 10k Anfragen von einer einzigen API erlauben, dann denke ich, dass sie damit umgehen können. – serg