Heim  >  Artikel  >  Technologie-Peripheriegeräte  >  Beherrschen Sie vier häufig verwendete Strombegrenzungsalgorithmen und Sie werden das Vorstellungsgespräch mit Sicherheit bestehen

Beherrschen Sie vier häufig verwendete Strombegrenzungsalgorithmen und Sie werden das Vorstellungsgespräch mit Sicherheit bestehen

王林
王林nach vorne
2023-11-15 11:22:11949Durchsuche

Beherrschen Sie vier häufig verwendete Strombegrenzungsalgorithmen und Sie werden das Vorstellungsgespräch mit Sicherheit bestehen

Bei hohem gleichzeitigen Zugriff, wie z. B. bei E-Commerce-Werbeaktionen, strömt weiterhin viel Verkehr ein und die Häufigkeit gegenseitiger Anrufe zwischen Diensten nimmt plötzlich zu, was zu einer zu hohen Systemlast führt Dienste, auf die das System angewiesen ist Die Auswirkungen auf das System sind sehr groß und es gibt viele unsichere Faktoren, die Lawinen verursachen, wie z. B. Unterbrechungen der Netzwerkverbindung, Dienstausfälle usw. Im Allgemeinen bieten fehlertolerante Microservice-Komponenten Strombegrenzung, Isolierung, Leistungsminderung, Leistungsschalter und andere Mittel, die unser Microservice-System wirksam schützen können. In diesem Artikel geht es hauptsächlich um die Strombegrenzung.

Strombegrenzung bedeutet, den maximalen Durchfluss zu begrenzen, um zu verhindern, dass die Betriebsfrequenz den definierten Grenzwert überschreitet. Die maximale Parallelität, die das System bereitstellen kann, ist begrenzt und es gibt zu viele Anfragen gleichzeitig, was eine Drosselung erfordert, wie z. B. Flash-Sales und große Werbeaktionen. Wenn eine große Anzahl von Anfragen sofort eingeht, kann der Server sie nicht bedienen. es muss also eine Drosselung sein. Die Ratenbegrenzung schützt Dienste vor versehentlicher oder böswilliger Überbeanspruchung, indem sie die Anzahl der Anfragen begrenzt, die die API in einem bestimmten Zeitraum erreichen können. Ohne Ratenbegrenzung kann jeder Benutzer Ihren Server mit Anfragen bombardieren, was dazu führt, dass andere Benutzer verhungern.

Warum Tempolimit?

  • Ressourcenmangel verhindern: Der häufigste Grund für die Ratenbegrenzung besteht darin, die Verfügbarkeit von API-basierten Diensten durch Vermeidung von Ressourcenmangel zu erhöhen. Wenn Sie eine Ratenbegrenzung anwenden, können Sie lastbasierte Denial-of-Service-Angriffe (DoS) verhindern. Selbst wenn ein Benutzer die API mit Unmengen von Anfragen bombardiert, werden andere Benutzer nicht verhungern.
  • Sicherheit: Ratenbegrenzung verhindert Brute-Force-Angriffe auf sicherheitsintensive Funktionen wie Anmeldungen, Aktionscodes und mehr. Die Anzahl der Anfragen für diese Funktionen ist auf Benutzerebene begrenzt, sodass Brute-Force-Algorithmen in diesen Szenarien nicht funktionieren.
  • Betriebskosten verhindern: Bei der automatischen Skalierung von Ressourcen in einem Pay-per-Use-Modell hilft die Ratenbegrenzung dabei, die Betriebskosten zu kontrollieren, indem eine virtuelle Obergrenze für die Ressourcenerweiterung festgelegt wird. Ohne Ratenbegrenzung können die Ressourcen überproportional skalieren, was zu exponentiellen Rechnungen führt.

Richtlinie zur Ratenbegrenzung Die Ratenbegrenzung kann auf die folgenden Parameter angewendet werden:

  • Benutzer: Begrenzen Sie die Anzahl der Anfragen, die einem Benutzer in einem bestimmten Zeitraum gestattet sind. Die benutzerbasierte Ratenbegrenzung ist eine der gebräuchlichsten und intuitivsten Formen der Ratenbegrenzung.
  • Parallelität: Dies begrenzt die Anzahl paralleler Sitzungen, die ein Benutzer in einem bestimmten Zeitraum zulassen kann. Die Begrenzung der Anzahl paralleler Verbindungen trägt auch zur Eindämmung von DDOS-Angriffen bei.
  • Standort/ID: Dies hilft bei der Durchführung standortbasierter oder demografisch ausgerichteter Kampagnen. Anfragen, die nicht von der Zielgruppe stammen, können gedrosselt werden, um die Verfügbarkeit im Zielgebiet zu erhöhen
  • Server: Serverbasierte Ratenbegrenzung ist eine Nischenstrategie. Dies wird normalerweise verwendet, wenn ein bestimmter Server die meisten Anforderungen benötigt, das heißt, der Server ist stark an eine bestimmte Funktion gekoppelt. Als Nächstes stellen wir vier gängige Strombegrenzungsalgorithmen vor Die Idee des Leaky-Bucket-Algorithmus ist ein einfacher und intuitiver Algorithmus, bei dem es sich um einen Leaky-Bucket mit fester Kapazität handelt, aus dem Wassertropfen mit einer konstanten festen Rate austreten. Wenn der Eimer leer ist, müssen keine Wassertropfen fließen. Es kann auf jeden Fall Wasser in den undichten Eimer fließen. Wenn der einströmende Wassertropfen das Fassungsvermögen des Eimers überschreitet, läuft der einströmende Wassertropfen über (wird verworfen), während das Fassungsvermögen des undichten Eimers unverändert bleibt.
Der Vorteil dieses Algorithmus besteht darin, dass er die Flut an Anfragen glättet und sie mit einer konstanten Geschwindigkeit verarbeitet. Es lässt sich außerdem einfach auf einem Load Balancer implementieren und ist für jeden Benutzer speichereffizient. Hält unabhängig von der Anzahl der Anfragen einen konstanten, nahezu gleichmäßigen Datenverkehr zum Server aufrecht.

Der Nachteil besteht darin, dass eine Flut von Anfragen den Eimer füllen kann, was zu einem Mangel an neuen Anfragen führt. Es kann auch nicht garantiert werden, dass die Anfrage innerhalb einer bestimmten Zeit bearbeitet wird.

Vorteile:

Reibungsloser Verkehr. Da der Leaky-Bucket-Algorithmus Anfragen mit einer festen Rate verarbeitet, kann er den Datenverkehr effektiv glätten und formen sowie Datenverkehrsspitzen und -schwankungen vermeiden (ähnlich dem Peak-Shaving- und Valley-Filling-Effekt von Nachrichtenwarteschlangen).

Beherrschen Sie vier häufig verwendete Strombegrenzungsalgorithmen und Sie werden das Vorstellungsgespräch mit Sicherheit bestehenÜberlastung verhindern.

Wenn die eingehenden Anfragen die Kapazität des Buckets überschreiten, können die Anfragen direkt verworfen werden, um eine Systemüberlastung zu verhindern.

    Nachteile:
    • Burst-Verkehr kann nicht verarbeitet werden: Da die Exportgeschwindigkeit des Leaky-Buckets festgelegt ist, kann er keinen Burst-Verkehr verarbeiten. Beispielsweise können Anfragen auch bei geringem Datenverkehr nicht schneller bearbeitet werden.
    • Möglicher Datenverlust: Wenn der Eingangsverkehr zu groß ist und die Kapazität des Buckets überschreitet, müssen einige Anfragen verworfen werden. Dies kann in einigen Szenarien ein Problem darstellen, in denen fehlende Anforderungen nicht toleriert werden können.

    2. Token-Bucket-Algorithmus

    Token-Bucket-Algorithmus: Angenommen, das Limit beträgt 2r/s, werden Token mit einer festen Rate von 500 Millisekunden zum Bucket hinzugefügt. Im Bucket können maximal b Token gespeichert werden. Wenn der Bucket voll ist, werden neu hinzugefügte Token verworfen oder abgelehnt. Wenn ein Paket mit einer Größe von n Bytes eintrifft, werden n Token aus dem Bucket entfernt und das Paket an das Netzwerk gesendet. Wenn sich weniger als n Token im Bucket befinden, wird das Token nicht gelöscht und das Paket wird flussbegrenzt (entweder verworfen oder gepuffert). Das Prinzip der Strombegrenzung des Token-Buckets ist in der Abbildung dargestellt.


    Beherrschen Sie vier häufig verwendete Strombegrenzungsalgorithmen und Sie werden das Vorstellungsgespräch mit Sicherheit bestehen

    Der Token-Bucket auf dem aktuell begrenzenden Server kann die Geschwindigkeit der Token-Generierung und die Kapazität des Buckets basierend auf der tatsächlichen Serviceleistung und dem Zeitraum anpassen. Wenn die Rate erhöht werden muss, kann die Rate der in den Bucket gelegten Token bei Bedarf erhöht werden

    Die Rate, mit der Token generiert werden, ist konstant, während die Rate, mit der Anfragen zum Erhalt von Token gestellt werden, nicht begrenzt ist. Dies bedeutet, dass der Algorithmus bei plötzlichem großem Datenverkehr in kurzer Zeit eine große Anzahl von Token erhalten kann und der Prozess des Erhaltens von Token nicht viele Ressourcen verbraucht.

    Wenn jede neue Anfrage beim Server eintrifft , es werden zwei Operationen ausgeführt:

    • Token abrufen: Aktuelle Anzahl der Token für diesen Benutzer abrufen. Wenn es größer als der definierte Grenzwert ist, wird die Anfrage verworfen.
    • Token aktualisieren: Wenn der erhaltene Token kürzer als die maximale Dauer d ist, akzeptieren Sie die Anfrage und hängen Sie den Token an.

    Der Algorithmus ist speichereffizient, da wir für unsere Anwendung weniger Daten pro Benutzer speichern. Das Problem hierbei ist, dass es in verteilten Umgebungen zu Race Conditions kommen kann. Dies geschieht, wenn zwei Anfragen von zwei verschiedenen Anwendungsservern gleichzeitig versuchen, das Token abzurufen.

    Vorteile:

    • kann Burst-Verkehr verarbeiten. : Der Token-Bucket-Algorithmus kann Burst-Verkehr verarbeiten. Wenn der Bucket voll ist, können Anfragen mit maximaler Geschwindigkeit bearbeitet werden. Dies ist sehr nützlich für Anwendungsszenarien, die mit stoßartigem Datenverkehr umgehen müssen.
    • Durchschnittsrate begrenzen: Langfristig wird die Datenübertragungsrate auf die vordefinierte Durchschnittsrate (d. h. die Rate, mit der Token generiert werden) begrenzt.
    • Flexibilität: Im Vergleich zum Leaky-Bucket-Algorithmus bietet der Token-Bucket-Algorithmus eine größere Flexibilität. Beispielsweise kann die Rate, mit der Token generiert werden, dynamisch angepasst werden.

    Nachteile:

    • Kann zu Überlastung führen : Wenn Token zu schnell generiert werden, kann es zu einer großen Menge an Burst-Verkehr kommen, der das Netzwerk oder den Dienst überlasten kann.
    • Benötigt Speicherplatz: Der Token-Bucket benötigt eine bestimmte Menge Speicherplatz, um Token zu speichern, was zu einer Verschwendung von Speicherressourcen führen kann.
    • Die Implementierung ist etwas kompliziert: Im Vergleich zum Zähleralgorithmus ist die Implementierung des Token-Bucket-Algorithmus etwas komplizierter.

    3. Der Algorithmus für feste Zeitfenster

    ermöglicht die Eingabe einer bestimmten Anzahl von Anfragen innerhalb eines festen Zeitfensters. Wenn die Menge überschritten wird, wird sie abgelehnt oder in die Warteschlange gestellt, um auf den nächsten Zeitraum zu warten. Diese Gegenstrombegrenzung wird durch eine Begrenzung innerhalb eines Zeitintervalls realisiert. Wenn der Benutzer eine Anfrage vor dem Ende des vorherigen Intervalls sendet (aber das Limit nicht überschreitet) und auch zu Beginn des aktuellen Intervalls eine Anfrage sendet (das Limit ebenfalls nicht überschreitet), dann sind diese Anfragen für ihn normal jeweiligen Intervallen. Wenn Anfragen jedoch in kritischen Zeiträumen die Systemgrenzen überschreiten, kann es zu einer Systemüberlastung kommen

    Beherrschen Sie vier häufig verwendete Strombegrenzungsalgorithmen und Sie werden das Vorstellungsgespräch mit Sicherheit bestehen

    Aufgrund des zeitkritischen Punktdefekts des Zähleralgorithmus ist er in sehr kurzer Zeit um den zeitkritischen Punkt herum anfällig für Angriffe. Es ist beispielsweise so eingestellt, dass eine bestimmte Schnittstelle bis zu 100 Mal pro Minute angefordert wird. Beispielsweise gibt es im Zeitraum 12:00:00–12:00:59 keine Datenanforderung, aber eine plötzliche gleichzeitige Anforderung Im Zeitraum von 12:00:59 bis 12:01:00 Uhr wird der Zähler gelöscht und es liegen 100 Anforderungen zwischen 12:01:00 und 12:01:01 vor. Mit anderen Worten: Um den zeitkritischen Punkt herum kann es gleichzeitig doppelt so viele Anforderungen wie den Schwellenwert geben, was zu einer Überlastung der Hintergrundverarbeitungsanforderungen führt, was zu unzureichenden Systembetriebsfähigkeiten und sogar zum Absturz des Systems führt.

    Nachteile:

    • Das aktuelle Limit ist nicht glatt genug. Beispiel: Das aktuelle Limit beträgt 3 pro Sekunde und in der ersten Millisekunde werden 3 Anfragen gesendet. Wenn das aktuelle Limit erreicht ist, werden alle Anfragen für die verbleibende Zeit des Fensters abgelehnt, was zu einer schlechten Erfahrung führt.
    • Probleme mit Fensterrändern können nicht behandelt werden. Da die Flusskontrolle innerhalb eines bestimmten Zeitfensters durchgeführt wird, kann ein Fenstergrenzeneffekt auftreten, d. h., dass eine große Anzahl von Anforderungen an der Grenze des Zeitfensters passieren kann, was zu einem Burst-Verkehr führt.

    Zum Beispiel: Das aktuelle Limit beträgt 3 pro Sekunde, 3 Anfragen werden in der letzten Millisekunde der ersten Sekunde gesendet und 3 Anfragen werden in der ersten Millisekunde der zweiten Sekunde gesendet. Innerhalb dieser zwei Millimeter wurden sechs Anfragen bearbeitet, die aktuelle Grenze wurde jedoch nicht ausgelöst. Wenn der Datenverkehr stark ansteigt, kann dies den Server überlasten.

    4. Gleitender Zeitfensteralgorithmus

    Der Gleitfensteralgorithmus teilt einen festen Zeitraum und verschiebt ihn mit der Zeit. Die Bewegungsmethode besteht darin, dass der Startzeitpunkt zum zweiten Zeitpunkt in der Zeitliste wird und der Endzeitpunkt hinzugefügt wird Durch die kontinuierliche Wiederholung eines Zeitpunkts kann das Problem des kritischen Punktes des Zählers geschickt umgangen werden.

    Der Schiebefensteralgorithmus kann das Problem der zeitkritischen Punkte im Zähleralgorithmus effektiv vermeiden, es gibt jedoch immer noch das Konzept der Zeitsegmente. Gleichzeitig ist der Zählvorgang des Schiebefensteralgorithmus zeitaufwändiger als der des Festzeitfensteralgorithmus.

    Beherrschen Sie vier häufig verwendete Strombegrenzungsalgorithmen und Sie werden das Vorstellungsgespräch mit Sicherheit bestehen

    Nachteile: Es besteht immer noch das Problem, dass die aktuelle Grenze nicht glatt genug ist. Beispiel: Das aktuelle Limit beträgt 3 pro Sekunde und in der ersten Millisekunde werden 3 Anfragen gesendet. Wenn das aktuelle Limit erreicht ist, werden alle Anfragen innerhalb der verbleibenden Fensterzeit abgelehnt, was zu einer schlechten Erfahrung führt.

    Zusammenfassung

    Vier häufig verwendete Strombegrenzungsalgorithmen wurden vorgestellt: Festfensteralgorithmus, Schiebefensteralgorithmus, Leaky-Bucket-Algorithmus und Token-Bucket-Algorithmus. Jeder Algorithmus hat seine eigenen Eigenschaften und anwendbaren Szenarien. Lassen Sie uns diese im Folgenden kurz zusammenfassen und vergleichen. Der

    • Token-Bucket-Algorithmus kann sowohl den Datenverkehr glätten als auch Burst-Traffic verarbeiten und eignet sich für Szenarien, in denen Burst-Traffic verarbeitet werden muss. Der Vorteil des
    • Leaky-Bucket-Algorithmus besteht darin, dass die Verkehrsverarbeitung flüssiger ist, aber Burst-Verkehr nicht bewältigen kann und für Szenarien geeignet ist, die einen reibungslosen Verkehr erfordern.
    • Der Algorithmus mit festem Fenster ist einfach zu implementieren, aber die aktuelle Grenze ist nicht glatt genug und weist Fenstergrenzenprobleme auf. Er eignet sich für Szenarien, die eine einfache Implementierung der aktuellen Grenze erfordern.
    • Der Schiebefensteralgorithmus löst das Fenstergrenzenproblem, es besteht jedoch immer noch das Problem einer unzureichenden Glätte bei der Strombegrenzung. Er eignet sich für Szenarien, in denen die durchschnittliche Anforderungsrate gesteuert werden muss.

Das obige ist der detaillierte Inhalt vonBeherrschen Sie vier häufig verwendete Strombegrenzungsalgorithmen und Sie werden das Vorstellungsgespräch mit Sicherheit bestehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen