TokenLimiter
Diese Bibliothek ermöglicht es Ihnen, die Nutzung von Tokens pro Minute über mehrere Goroutinen hinweg zu begrenzen, mit Unterstützung für optionales Verzögern bis zum Einpassen.
Problemstellung
Lösung
Typische Anwendungsfälle
- Ratenbegrenzung von API-Aufrufen über konkurrierende Prozesse hinweg
- Steuerung des Ressourcenverbrauchs in verteilten Systemen
- Verwaltung der Token-Nutzung für Drittanbieter-API-Integrationen
- Sicherstellung der Einhaltung von API-Ratengrenzwerten in Hochdurchsatz-Anwendungen
Verwendet von
- LinkResearchTools
- Eine große KI-Marke
Versionsgeschichte
- Überprüfung und Aktualisierung auf neueste Bibliotheken
- Kompatibilitätsprobleme mit älteren Systemen behoben
- Überprüfung und Aktualisierung auf neueste Bibliotheken
Lizenzbedingungen
Funktionen #
- Threadsichere Token-Begrenzung über mehrere Goroutinen hinweg
- Option zur Verzögerung bis zum Einpassen: Wenn aktiviert und das Token-Nutzungslimit überschritten wird, wartet der Aufruf, bis genügend Tokens vergangen sind, damit die Nutzung innerhalb des Limits liegt
- Fehler bei Limitüberschreitung: Wenn die Verzögerung bis zum Einpassen nicht aktiviert ist, gibt der Aufruf einen Fehler zurück, wenn das Token-Nutzungslimit überschritten wird
- Verfolgung der durchschnittlichen Nutzung: Verfolgen der durchschnittlichen Token-Nutzung über eine Reihe von Punkten (z.B. die letzten 100 Nutzungen)
- Letzte Minute abrufen: Methode zum Abrufen der letzten Minute, die zum Hinzufügen von Tokens verwendet wurde
Einschränkungen #
Dieser TokenLimiter funktioniert nur auf einer einzelnen Maschine. Bei Ausführung auf mehreren Knoten eines Clusters könnte das Token-Limit überschritten werden. Eine Behelfslösung wäre, jedem Knoten einen Teil des Token-Pro-Minute-Kontingents (TPM) zuzuweisen. Dies würde funktionieren, wenn ich weiß, dass jeder Knoten eine ähnliche Auslastung haben wird. Wenn jedoch eine Maschine weniger Anfragen bearbeitet und nicht betriebsbereit ist, würde ihr Kontingent ungenutzt bleiben, was die Cluster-Leistung beeinträchtigt. Die richtige Lösung wäre die Implementierung eines Clusters von TokenLimiters, der die Verteilung von Token-Limits pro Maschine dynamisch verwaltet.
Wie unterscheidet sich dies von Rate Limiters #
Während Rate Limiters und mein TokenLimiter beide die Nutzung von Ressourcen in gewisser Weise begrenzen, gibt es wichtige Unterschiede. Rate Limiters begrenzen typischerweise die Anzahl der Anfragen, die in einem bestimmten Zeitraum gestellt werden können, und behandeln Nebenläufigkeit oft isoliert. Mein TokenLimiter ist speziell für token-basierte Systeme (z.B. API-Tokens) konzipiert, bei denen jede Aktion unterschiedliche Mengen an Tokens verbrauchen kann, und bietet eine threadsichere Verwaltung über gleichzeitige Operationen hinweg.