Grundlagen der Ratenbegrenzung – von Alex Xu

Ratenbegrenzung ist ein beliebtes verteiltes Systemmuster. Es ist ein integraler Bestandteil aller modernen Großanwendungen. Es steuert die Geschwindigkeit, mit der Benutzer oder Dienste auf eine Ressource wie eine API, einen Dienst oder ein Netzwerk zugreifen können. Es spielt eine entscheidende Rolle beim Schutz der Systemressourcen und der Gewährleistung einer fairen Nutzung durch alle Benutzer.

In dieser Serie befassen wir uns eingehend mit der Ratenbegrenzung. Wir diskutieren, wie die Ratenbegrenzung in modernen Anwendungen eingesetzt wird, und untersuchen die gängigen Algorithmen zur Ratenbegrenzung. Wir befassen uns mit wichtigen Designüberlegungen und Implementierungsstrategien für produktionstaugliche Geschwindigkeitsbegrenzer. Wir schließen mit einigen Fallstudien und Best Practices aus der Praxis.

Hinweis: Während wir bestimmte Themen aus dem Kapitel „Entwerfen eines Ratenbegrenzers“ im System Design Interview Book – Band 1 besprochen haben, konzentriert sich diese Newsletter-Reihe hauptsächlich auf die praktischen Aspekte des Entwurfs und der Implementierung von Ratenbegrenzern in realen Szenarien.

Durch die Ratenbegrenzung wird die Rate gesteuert, mit der Benutzer oder Dienste auf eine Ressource zugreifen können. Wenn die Anzahl der Anfragen den durch den Ratenbegrenzer definierten Schwellenwert überschreitet, werden die Anfragen gedrosselt oder blockiert. Hier sind einige Beispiele:

  • Ein Benutzer kann maximal 2 Nachrichten pro Sekunde senden

  • Man kann maximal 10 Konten pro Tag mit derselben IP-Adresse erstellen

  • Prämien können höchstens fünfmal pro Woche über dasselbe Gerät eingelöst werden

Ratenbegrenzung ist ein integraler Bestandteil moderner Großanwendungen. Werfen wir einen Blick auf einige der Vorteile eines Ratenbegrenzers. Während wir uns hier auf API-Ratenbegrenzer konzentrieren, gelten die Vorteile im Allgemeinen auch für Ratenbegrenzer, die für andere Anwendungsfälle eingesetzt werden.

Die Ratenbegrenzung trägt dazu bei, Ressourcenknappheit durch Denial-of-Service-Angriffe (DoS) zu verhindern. Fast alle von großen Technologieunternehmen veröffentlichten APIs erzwingen irgendeine Form der Ratenbegrenzung. Twitter begrenzt beispielsweise die Anzahl der Tweets auf 300 pro 3 Stunden. Google Docs-APIs beschränken Leseanfragen auf 300 pro Benutzer pro 60 Sekunden. Ein Ratenbegrenzer verhindert absichtliche oder unbeabsichtigte DoS-Angriffe, indem er überschüssige Anrufe zurückweist.

Lesen Sie auch  Troyes-PSG: "Eine Willensgeschichte", warum dieses Team niemanden mehr erschreckt

Eine Ratenbegrenzung kann dazu beitragen, Kostenüberschreitungen zu begrenzen, indem sie die Überbeanspruchung einer Ressource verhindert. Wenn eine Ressource durch eine große Menge an Anfragen überlastet ist, sind möglicherweise zusätzliche Ressourcen oder Kapazitäten erforderlich, um die Last zu bewältigen, was zusätzliche Kosten verursachen kann.

Die Ratenbegrenzung ist auch für Dienste, die ausgehende Anfragen stellen, von entscheidender Bedeutung, insbesondere für solche, die kostenpflichtige APIs von Drittanbietern verwenden. Viele Drittanbieterdienste berechnen für ihre externen APIs eine Gebühr pro Aufruf. Einige Beispiele sind Dienste zur Bonitätsprüfung, zum Vornehmen einer Zahlung, zum Abrufen von Gesundheitsakten usw. Die Begrenzung der Anzahl der Anrufe ist zur Kostenkontrolle unerlässlich.

Während die Ratenbegrenzung für die Verhinderung von DoS-Angriffen von entscheidender Bedeutung ist, spielt sie auch eine entscheidende Rolle beim allgemeinen Lastausgleich und bei der Aufrechterhaltung der Servicequalität. Hohe Mengen an Anfragen, nicht nur von böswilligen Quellen, sondern auch durch starke Nutzung, können Server überlasten.

Um die Serverlast zu reduzieren, wird ein Ratenbegrenzer verwendet, um überschüssige Anfragen zu Beginn des Anfragelebenszyklus abzulehnen, die von böswilligen Bots oder Benutzern mit hoher Auslastung gestellt werden.

Ratenbegrenzung kann in verschiedenen Situationen eingesetzt werden, um Ressourcen effizient zu verwalten. Wenn es richtig gemacht wird, verhindert es Missbrauch und sorgt für eine faire Nutzung.

Die Ratenbegrenzung wird üblicherweise auf Benutzerebene angewendet. Stellen Sie sich eine beliebte Social-Media-Plattform vor, auf der Benutzer häufig Inhalte und Kommentare veröffentlichen. Um Spam oder böswillige Bot-Aktivitäten zu verhindern, erzwingt die Plattform möglicherweise eine Ratenbegrenzung auf Benutzerebene. Es begrenzt die Anzahl der Beiträge oder Kommentare, die ein Benutzer in einer bestimmten Stunde verfassen kann.

Eine Ratenbegrenzung kann auch auf Anwendungsebene angewendet werden. Ein Beispiel ist eine Online-Ticketing-Plattform. Am Tag eines großen Konzertverkaufs kann die Plattform mit einem deutlichen Anstieg des Traffics rechnen. Eine Ratenbegrenzung auf Anwendungsebene kann in diesem Fall sehr nützlich sein. Es begrenzt die Gesamtzahl der Ticketkäufe pro Minute. Diese Vorgehensweise schützt das System vor einer Überlastung und sorgt dafür, dass jeder eine faire Chance hat, sich ein Ticket zu sichern.

Lesen Sie auch  Skyroot ist zum Vorbild geworden: Unionsminister Jitendra Singh

Auch eine Ratenbegrenzung auf API-Ebene ist üblich. Ziehen Sie einen Cloud-Speicherdienst in Betracht, der eine API zum Hoch- und Herunterladen von Dateien bereitstellt. Um eine faire Nutzung zu gewährleisten und das System vor Missbrauch zu schützen, kann der Dienst Beschränkungen für die Anzahl der API-Aufrufe erzwingen, die jeder Benutzer pro Minute durchführen kann.

Eine Ratenbegrenzung kann auch basierend auf Benutzerkontoebenen angewendet werden. Eine SaaS-Plattform, die mehrere Serviceebenen bietet, kann für jede Ebene unterschiedliche Nutzungsbeschränkungen haben. Für Benutzer des Free-Tarifs gilt möglicherweise ein niedrigeres Tariflimit als für Premium-Tarif-Nutzer. Dadurch wird die Ressourcennutzung effektiv verwaltet und Benutzer werden gleichzeitig dazu ermutigt, auf höhere Grenzwerte zu aktualisieren.

Dies sind nur einige Beispiele. Sie zeigen, wie Ratenbegrenzungsstrategien in verschiedenen Szenarien und Diensten eingesetzt werden können.

Die meisten Implementierungen zur Ratenbegrenzung teilen drei Kernkonzepte. Sie sind die Grenze, das Fenster und die Kennung.

Das Limit definiert die Obergrenze für zulässige Anfragen oder Aktionen innerhalb eines bestimmten Zeitraums. Beispielsweise könnten wir einem Benutzer erlauben, nicht mehr als 100 Nachrichten pro Stunde zu senden.

Das Fenster ist der Zeitraum, in dem das Limit ins Spiel kommt. Der Zeitraum kann beliebig sein, sei es eine Stunde, ein Tag oder eine Woche. Längere Laufzeiten haben ihre eigenen Implementierungsherausforderungen, wie z. B. die Speicherhaltbarkeit, die wir später besprechen werden.

Der Identifier ist ein eindeutiges Attribut, das einzelne Anrufer unterscheidet. Ein häufiges Beispiel ist eine Benutzer-ID oder IP-Adresse.

Ein weiteres Kernkonzept, das es zu verstehen gilt, sind die verschiedenen Arten von geschwindigkeitsbegrenzenden Reaktionen. Sie lassen sich im Allgemeinen in drei Kategorien einteilen: Blockieren, Drosseln und Formen.

Lesen Sie auch  was der Gesetzentwurf enthält, der gerade in erster Lesung in der Versammlung angenommen wurde

Eine Blockierung erfolgt, wenn Anfragen, die das Limit überschreiten, der Zugriff auf die Ressource verweigert wird. Dies wird üblicherweise als Fehlermeldung wie HTTP-Statuscode 429 (Too Many Requests) ausgedrückt.

Im Vergleich dazu bedeutet Drosselung, dass Anfragen, die über das Limit hinausgehen, verlangsamt oder verzögert werden. Ein Beispiel wäre ein Video-Streaming-Dienst, der die Qualität des Streams für Benutzer reduziert, die ihr Datenlimit überschritten haben.

Shaping hingegen ermöglicht Anfragen, die über das Limit hinausgehen. Diesen Anfragen wird jedoch eine niedrigere Priorität zugewiesen. Dadurch wird sichergestellt, dass Benutzer, die sich an die Grenzwerte halten, einen qualitativ hochwertigen Service erhalten. Beispielsweise können in einem Content-Delivery-Netzwerk Anfragen von Benutzern, die ihre Grenzen überschritten haben, zuletzt verarbeitet werden, während Anfragen von normalen Benutzern Vorrang haben.

Diese grundlegenden Kernkonzepte bilden die Grundlage für das Eintauchen in die verschiedenen gängigen Algorithmen zur Ratenbegrenzung.

Die Ratenbegrenzung kann mithilfe verschiedener Algorithmen implementiert werden. Jeder von ihnen hat unterschiedliche Vor- und Nachteile. In diesem Abschnitt gehen wir näher auf einige der gängigen Ratenbegrenzungsalgorithmen ein. Wir behandeln:

  • Fensterzähler behoben

  • Schiebefensterprotokoll

  • Schiebefenstertheke

  • Token-Eimer

  • Undichter Kübel

Der Fixed Window Counter-Algorithmus unterteilt die Zeitleiste in Zeitfenster fester Größe und weist jedem Fenster einen Zähler zu. Jede Anfrage erhöht den Zähler um einen Wert, basierend auf den relativen Kosten der Anfrage. Sobald der Zähler den Schwellenwert erreicht, werden nachfolgende Anfragen blockiert, bis das neue Zeitfenster beginnt.

Lassen Sie uns anhand eines konkreten Beispiels sehen, wie es funktioniert. In diesem Beispiel beträgt die Zeiteinheit 1 Sekunde und das System erlaubt maximal 3 Anfragen pro Sekunde. Wenn in jedem 1-Sekunden-Zeitfenster mehr als drei Anfragen eingehen, werden nachfolgende Anfragen, die innerhalb desselben Zeitfensters eingehen, verworfen.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.