2012-12-17 10 views
5

Ich habe mehrere Server/Arbeiter durch eine Task-Warteschlange API-Anfragen zu tun. (Django mit Memcached und Sellerie für die Warteschlange) Die API-Anfragen sind auf 10 Anfragen pro Sekunde begrenzt. Wie kann ich die Rate begrenzen, so dass die Gesamtzahl der Anfragen (alle Server) nicht das Limit überschreitet?Distributed rate limiting

Ich habe einige der verwandten Rate-Limit-Fragen durchgesehen, die ich vermute, dass sie sich auf ein lineareres, nicht gleichzeitiges Szenario konzentrieren. Welche Art von Ansatz sollte ich wählen?

Antwort

0

Haben Sie in Rate Limiter von Guava Projekt gesucht? Sie haben diese Klasse in einer der neuesten Versionen eingeführt und es scheint teilweise Ihre Bedürfnisse zu befriedigen.

Sicherlich wird es keine Ratenbegrenzung über mehrere Knoten in verteilter Umgebung berechnen, aber was Sie tun könnten, ist Rate Limit dynamisch konfiguriert basierend auf der Anzahl der Knoten, die laufen (dh für 5 Knoten haben Sie Rate Limit haben von 2 API Anfragen eine Sekunde)

0

Ich habe an einem Open Source-Projekt gearbeitet, um genau dieses Problem zu lösen, genannt Limitd. Obwohl ich noch keine Clients für andere Technologien als Knoten habe, sind das Protokoll und die Idee einfach.

Ihr Feedback ist sehr willkommen.

0

löste ich das Problem leider nicht für die Technologie: bandwidth-throttle/token-bucket

Wenn Sie es umsetzen wollen, hier ist die Idee der Umsetzung:

Es ist ein token bucket algorithm, die die enthalten Token in einen Zeitstempel konvertiert seit wann es war zuletzt komplett leer. Jeder Verbrauch aktualisiert diesen Zeitstempel (gesperrt), so dass jeder Prozess den gleichen Status hat.