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.
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).
Ü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.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.
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:
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:
Nachteile:
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
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:
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.
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.
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.
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
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!