Hochverfügbarkeits-Setup (Auflösung von DB-Deadlocks)
Lösen Sie alle Datenbank-Deadlocks, die bei hohem Datenverkehr auftreten, mit diesem Setup auf.
Was verursacht das Problem?
LiteLLM schreibt UPDATE und UPSERT Abfragen in die DB. Bei Verwendung von 10+ Instanzen von LiteLLM können diese Abfragen Deadlocks verursachen, da jede Instanz gleichzeitig versuchen könnte, denselben user_id, team_id, key usw. zu aktualisieren.
Wie das Hochverfügbarkeits-Setup das Problem löst
- Alle Instanzen schreiben in eine Redis-Warteschlange anstelle der DB.
- Eine einzelne Instanz erwirbt einen Lock für die DB und leert die Redis-Warteschlange in die DB.
Wie es funktioniert
Stufe 1. Jede Instanz schreibt Updates nach Redis
Jede Instanz sammelt die Ausgaben-Updates für einen Schlüssel, Benutzer, Team usw. und schreibt die Updates in eine Redis-Warteschlange.
Jede Instanz schreibt Updates nach Redis
Stufe 2. Eine einzelne Instanz leert die Redis-Warteschlange in die DB
Eine einzelne Instanz erwirbt einen Lock für die DB und leert alle Elemente in der Redis-Warteschlange in die DB.
- 1 Instanz versucht, den Lock für den DB-Update-Job zu erwerben
- Der Status des Locks wird in Redis gespeichert
- Wenn die Instanz den Lock zum Schreiben in die DB erwirbt
- Es liest alle Updates aus Redis
- Aggregiert alle Updates in 1 Transaktion
- Schreibt Updates in die DB
- Gibt den Lock frei
- Hinweis: Nur 1 Instanz kann den Lock gleichzeitig erwerben, dies begrenzt die Anzahl der Instanzen, die gleichzeitig in die DB schreiben können.
Eine einzelne Instanz leert die Redis-Warteschlange in die DB
Verwendung
Erforderliche Komponenten
- Redis
- Postgres
Einrichtung in der LiteLLM-Konfiguration
Sie können den Redis-Puffer aktivieren, indem Sie use_redis_transaction_buffer: true im Abschnitt general_settings Ihrer proxy_config.yaml-Datei festlegen.
Hinweis: Dieses Setup erfordert, dass litellm mit einer Redis-Instanz verbunden ist.
general_settings:
use_redis_transaction_buffer: true
litellm_settings:
cache: True
cache_params:
type: redis
supported_call_types: [] # Optional: Set cache for proxy, but not on the actual llm api call
Überwachung
LiteLLM gibt die folgenden Prometheus-Metriken aus, um den Zustand/Status des In-Memory-Puffers und des Redis-Puffers zu überwachen.
| Metrikname | Beschreibung | Speichertyp |
|---|---|---|
litellm_pod_lock_manager_size | Gibt an, welcher Pod den Lock zum Schreiben von Updates in die Datenbank hat. | Redis |
litellm_in_memory_daily_spend_update_queue_size | Anzahl der Elemente in der In-Memory-Warteschlange für tägliche Ausgaben-Updates. Dies sind die aggregierten Ausgabenprotokolle für jeden Benutzer. | In-Memory |
litellm_redis_daily_spend_update_queue_size | Anzahl der Elemente in der Redis-Warteschlange für tägliche Ausgaben-Updates. Dies sind die aggregierten Ausgabenprotokolle für jeden Benutzer. | Redis |
litellm_in_memory_spend_update_queue_size | In-Memory aggregierte Ausgabenwerte für Schlüssel, Benutzer, Teams, Teammitglieder usw. | In-Memory |
litellm_redis_spend_update_queue_size | Redis aggregierte Ausgabenwerte für Schlüssel, Benutzer, Teams usw. | Redis |