Heim  >  Artikel  >  Java  >  So integrieren Sie die RateLimiter-Strombegrenzung mit Springboot

So integrieren Sie die RateLimiter-Strombegrenzung mit Springboot

WBOY
WBOYnach vorne
2023-05-12 10:40:061605Durchsuche

RateLimiter-Token-Bucket-Schema

So integrieren Sie die RateLimiter-Strombegrenzung mit Springboot

  • Mit der Zeit fügt das System in einem konstanten Zeitintervall von 1/QPS Token zum Bucket hinzu (bei QPS=100 beträgt das Intervall 10 ms) (stellen Sie sich das Gegenteil eines Lecks vor). ), es gibt einen Wasserhahn, der ständig Wasser hinzufügt. Wenn der Eimer voll ist, wird kein Wasser mehr hinzugefügt. Wenn eine neue Anfrage eingeht, wird der Dienst einen Token wegnehmen

  • Ein weiterer Vorteil des Token-Buckets besteht darin, dass die Geschwindigkeit leicht geändert werden kann. Sobald die Rate erhöht werden muss, wird die Rate der in den Bucket gelegten Token im Allgemeinen um einen bestimmten Betrag erhöht Die Anzahl der Token, die regelmäßig zum Bucket hinzugefügt werden (z. B. 100 Millisekunden), berechnen die Anzahl der Token, die in Echtzeit hinzugefügt werden sollen.

Token-Bucket ist eine häufig verwendete Flusskontrolltechnologie. Der Token-Bucket selbst verfügt über keine Verwerfungs- und Prioritätsrichtlinien.

Prinzip

1. Token werden mit einer bestimmten Rate in den Bucket gelegt.

2. Jeder Token ermöglicht der Quelle, eine bestimmte Anzahl von Bits zu senden.

3. Um ein Paket zu senden, entfernt der Traffic Conditioner eine Anzahl von Token aus dem Bucket, die der Paketgröße entspricht.

4. Wenn nicht genügend Token zum Senden eines Pakets vorhanden sind, wartet das Paket, bis genügend Token vorhanden sind (im Fall eines Shapers) oder das Paket wird verworfen, möglicherweise mit einem niedrigeren DSCP markiert (im Fall eines Policyrs).

5. Buckets haben eine bestimmte Kapazität. Wenn der Bucket voll ist, werden neu hinzugefügte Token verworfen. Daher ist die maximale Menge an Burst-Daten, die eine Quelle jederzeit an das Netzwerk senden kann, proportional zur Bucket-Größe. Der Token-Bucket lässt Bursts zu, darf das Limit jedoch nicht überschreiten.

Methodenzusammenfassung

Beginnen Sie mit dem Einfügen des Codes.pom.xml.
<!--guava RateLimiter限流-->
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>28.2-jre</version>
</dependency>
.Benutzerdefinierte Schnittstelle Limit
Modifikatoren und Typen Methode und Beschreibung
double acquire() Erhalten von. RateLi mitre Eine Berechtigung, die Methode wird blockiert, bis sie angefordert wird
double acquire(int limits) Ruft die angegebene Anzahl von Genehmigungen von RateLimiter ab. Diese Methode wird blockiert, bis die Anforderung eingeht.
static RateLimiter create(double genehmigtPerSecond) Erstellen Sie entsprechend dem angegebenen stabilen Durchsatz rate RateLimiter, die Durchsatzrate bezieht sich hier auf die Anzahl der Genehmigungen pro Sekunde (normalerweise QPS, wie viele Abfragen pro Sekunde)
statischer RateLimiter create(double PerSecond, Long WarmupPeriod, TimeUnit Unit) gemäß dem angegebenen stabilen Durchsatz Rate und Erstellen Sie einen RateLimiter während der Aufwärmphase. Die Durchsatzrate bezieht sich hier auf die Anzahl der Lizenzen pro Sekunde (normalerweise QPS, wie viele Anfragen pro Sekunde, die Anzahl der vom RateLimiter zugewiesenen Lizenzen). pro Sekunde bleibt stabil, bis es am Ende der Aufwärmphase seine maximale Geschwindigkeit erreicht. (Solange es genügend Anfragen gibt, um es zu sättigen)
double getRate() gibt die stabile Rate in der RateLimiter-Konfiguration zurück, die Rateneinheit ist die Anzahl der Genehmigungen pro Sekunde
void setRate( Double PerSecond) Aktualisieren Sie die stabile Rate von RateLimite. Der Parameter PerSecond wird von der Factory-Methode bereitgestellt, die RateLimiter erstellt.
String toString() Gibt die Zeichendarstellung des Objekts zurück
boolean tryAcquire() Ruft die Berechtigung vom RateLimiter ab, wenn die Berechtigung sofort und ohne Verzögerung eingeholt werden kann
boolean tryAc fordern (intPermits) Rufen Sie die Anzahl der Berechtigungen von RateLimiter ab, wenn die Anzahl der Berechtigungen sofort und ohne Verzögerung abgerufen werden kann. Wenn die Anzahl der Lizenzen innerhalb eines Zeitraums abgerufen werden kann, der das Zeitlimit nicht überschreitet, oder wenn die Anzahl der Lizenzen nicht vor Ablauf des Zeitlimits abgerufen werden kann, dann geben Sie sofort false zurück (kein Warten erforderlich)
boolean tryAcquire( lange Zeitüberschreitung, TimeUnit-Einheit) Berechtigung von RateLimiter einholen. Wenn die Berechtigung innerhalb einer Zeit erhalten werden kann, die die Zeitüberschreitung nicht überschreitet, oder wenn die Berechtigung nicht vor Ablauf der Zeitüberschreitung eingeholt werden kann, dann geben Sie sofort false zurück (kein Warten erforderlich)

Greifen Sie erneut auf die unkommentierte Benutzeroberfläche zu

Die Konsole gibt das Ergebnis aus:

Das obige ist der detaillierte Inhalt vonSo integrieren Sie die RateLimiter-Strombegrenzung mit Springboot. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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