Bei der Vermarktung von E-Commerce-Plattformen stoßen wir häufig auf große Verkehrsprobleme. Zusätzlich zur Verkehrsumleitung müssen wir möglicherweise auch schwarze und weiße Listen für Benutzer und eine Reputationsanalyse erstellen und dann entsprechende Verkehrsabfang- und Verkehrsbeschränkungen durchführen IP-Reputationsgewicht des Benutzers.
Nginx‘ eigenes Anforderungsbegrenzungsmodul ngx_http_limit_req_module und Flussbegrenzungsmodul ngx_stream_limit_conn_module basieren auf dem Token-Bucket-Algorithmus, der die Token-Rate bequem steuern und das aktuelle Limit anpassen kann. , um eine grundlegende Strombegrenzungssteuerung zu erreichen.
Die Idee des Algorithmus ist:
Token werden mit einer festen Rate generiert und im Token-Bucket zwischengespeichert;
Wenn der Token-Bucket voll ist, werden überschüssige Token verworfen.
Anfragen müssen den gleichen Anteil an Token verbrauchen, bevor sie verarbeitet werden können.
Wenn nicht genügend Token vorhanden sind, Die Anfrage wird im Cache verarbeitet.
Leaky-Bucket-Algorithmus:
Die Algorithmusidee ist:
Wasser ( Anforderung) wird von oben in den Eimer gegossen und fließt am Boden des Eimers heraus (aufbereitet);
Wasser, das zu spät zum Abfließen kommt, wird im Eimer (Puffer) gespeichert und fließt mit einem festen Wert ab Wenn der Eimer voll ist, läuft das Wasser über (entsorgt).
Der Kern dieses Algorithmus besteht darin, Anfragen zwischenzuspeichern, sie mit gleichmäßiger Geschwindigkeit zu verarbeiten und redundante Anfragen direkt zu verwerfen.
Im Vergleich zum Leaky-Bucket-Algorithmus besteht der Unterschied des Token-Bucket-Algorithmus darin, dass er nicht nur einen „Bucket“ hat, sondern auch eine Warteschlange. Dieser Bucket wird zum Speichern von Token und der Warteschlange verwendet wird zum Speichern von Anfragen verwendet.
In Bezug auf die Funktion besteht der offensichtlichste Unterschied zwischen den Leaky-Bucket- und Token-Bucket-Algorithmen darin, ob die Burst-Verarbeitung (Burst) zugelassen werden soll. Der Leaky-Bucket-Algorithmus kann die Echtzeitübertragungsrate (Verarbeitung) zwangsweise begrenzen Der Burst-Verkehr wird keiner zusätzlichen Verarbeitung unterzogen; der Token-Bucket-Algorithmus kann die durchschnittliche Übertragungsrate der Daten begrenzen und gleichzeitig einen bestimmten Grad an Burst-Übertragung zulassen.
Das auf der Anforderungsrate basierende Nginx-Ratenbegrenzungsmodul verwendet einen Leaky-Bucket-Algorithmus, der zwangsweise garantieren kann, dass die Echtzeit-Verarbeitungsgeschwindigkeit von Anforderungen den festgelegten Schwellenwert nicht überschreitet.
Die offizielle Version von Nginx verfügt über zwei Module zur Begrenzung von IP-Verbindungen und Parallelität:
limit_req_zone wird verwendet, um die Anzahl der Anfragen pro Zeiteinheit, also die Rate, zu begrenzen Grenze, Verwendung des Leaky-Bucket-Algorithmus „Leaky Bucket“.
limit_req_conn wird verwendet, um die Anzahl der gleichzeitigen Verbindungen zu begrenzen, d. h. das Parallelitätslimit.
Weitere technische Artikel zum Thema Nginx finden Sie in der Spalte Tutorials zur Nginx-Nutzung, um mehr zu erfahren!
Das obige ist der detaillierte Inhalt vonSo begrenzen Sie den Nginx-Fluss. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!