Rate limiting-Algorithmus für die Drosselung Anfrage
Ich brauche zur Gestaltung einer rate limiter service für die Drosselung Anfragen.
Für jede ankommende Anfrage eine Methode soll überprüfen, ob die Anforderungen pro Sekunde das limit überschritten hat oder nicht. Wenn es überschritten hat, dann wird es wieder die Zeit, die man warten muss behandelt werden.
Suche nach einer einfachen Lösung, die nur das system-tick count und rps(Anfragen pro Sekunde). Sollten Sie nicht verwenden die Warteschlange oder Komplex rate limiting algorithmen und Datenstrukturen.
Edit: ich werde die Umsetzung in c++. Beachten Sie auch, ich will nicht beliebige Daten verwenden, die Strukturen, die zum speichern der Antrag derzeit immer ausgeführt.
API wäre wie:
if (!RateLimiter.Limit())
{
arbeiten
RateLimiter.Done();
}
sonst
ablehnen Antrag
- wie planen Sie zur Messung die Last, die jeder Anforderung bringt das system?
- Ich will nicht zu Messen Sie den laden. System ist ein low-latency system. So einfach wollen für die Begrenzung der rate.
- was ist die Art der rate-Spezifikation, die Sie sprechen? Anfragen/Sekunde, Anfragen/Minuten?
- Ja, einschränken möchten, RPS system. Wenn ich z.B. 50 rps, nicht mehr als 50 Anfrage bekommen sollten, Ihnen jeden zweiten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die häufigsten verwendete Algorithmus für diese ist token bucket. Es gibt keine Notwendigkeit, zu erfinden, zu einer neuen Sache, nur Suche für eine Implementierung auf die Technik/Sprache".
Wenn Sie Ihre app hoch ist avalaible /Lastenausgleich möchten Sie vielleicht halten Sie den Eimer Informationen auf irgendeine Art von persistent-storage. Redis ist ein guter Kandidat für diese.
Schrieb ich Limitd ist ein anderer Ansatz, ist ein daemon für Grenzen. Die Anwendung fragt der Dämon mit einer limitd-client, wenn der Verkehr ist konform. Die Grenze konfiguriert ist, auf die limitd server und die app ist agnostisch an den Algorithmus.
da Sie geben keinen Hinweis auf die Sprache oder Plattform werde ich nur geben, einige pseudo-code..
Dinge, die Sie sind gonna brauchen
ist und der code kann so einfach sein wie
aber im Hinterkopf behalten, dass es gibt einige Probleme mit dieser
also die ideale Lösung sollte eine tatsächliche Ausführung der Warteschlange, aber da wollen Sie nicht ein.. ich denke, das ist die nächste beste Sache.
nach, um Ihre Kommentare, was ein einfaches (nicht sehr präzise) Anfragen pro Sekunde Flagge. in diesem Fall kann der code so etwas wie dieses
scheint nicht, wie eine sehr zuverlässige Methode, um zu Steuern, was auch immer.. aber.. ich glaube, es ist das, was Sie gefragt..