Uebersicht
Fess enthaelt eine Laststeuerungsfunktion, die Anfragen basierend auf der CPU-Auslastung von OpenSearch steuert. Diese Funktion begrenzt Anfragen bei hoher Suchmaschinenlast automatisch und schuetzt die Systemstabilitaet.
Funktionen der Laststeuerung:
Echtzeitueberwachung der OpenSearch-Cluster-CPU-Auslastung
Unabhaengige Schwellenwerte fuer Web-Anfragen und API-Anfragen
Gibt HTTP 429 (Too Many Requests) zurueck, wenn Schwellenwerte ueberschritten werden
Admin-Panel, Login und statische Ressourcen sind von der Steuerung ausgenommen
Standardmaessig deaktiviert (Schwellenwert=100)
Konfiguration
Setzen Sie die folgenden Eigenschaften in fess_config.properties:
# CPU-Auslastungs-Schwellenwert fuer Web-Anfragen (%)
# Anfragen werden abgelehnt, wenn die CPU-Auslastung diesen Wert erreicht oder ueberschreitet
# Auf 100 setzen zum Deaktivieren (Standard: 100)
web.load.control=100
# CPU-Auslastungs-Schwellenwert fuer API-Anfragen (%)
# Anfragen werden abgelehnt, wenn die CPU-Auslastung diesen Wert erreicht oder ueberschreitet
# Auf 100 setzen zum Deaktivieren (Standard: 100)
api.load.control=100
# CPU-Auslastungs-Ueberwachungsintervall (Sekunden)
# Intervall zum Abrufen der OpenSearch-Cluster-CPU-Auslastung
# Standard: 1
load.control.monitor.interval=1
Bemerkung
Wenn sowohl web.load.control als auch api.load.control auf 100 (Standard) gesetzt sind, ist die Laststeuerungsfunktion vollstaendig deaktiviert und die Ueberwachung wird nicht gestartet.
Funktionsweise
Ueberwachungsmechanismus
Wenn die Laststeuerung aktiviert ist (ein Schwellenwert unter 100), ueberwacht LoadControlMonitorTarget regelmaessig die CPU-Auslastung des OpenSearch-Clusters.
Ruft OS-Statistiken von allen Knoten im OpenSearch-Cluster ab
Zeichnet die hoechste CPU-Auslastung aller Knoten auf
Ueberwacht im durch
load.control.monitor.intervalangegebenen Intervall (Standard: 1 Sekunde)Die Ueberwachung wird verzoegert beim ersten Request gestartet
Bemerkung
Wenn das Abrufen der Ueberwachungsinformationen fehlschlaegt, wird die CPU-Auslastung auf 0 zurueckgesetzt. Nach 3 aufeinanderfolgenden Fehlern aendert sich das Loglevel von WARNING zu DEBUG.
Anfragesteuerung
Wenn eine Anfrage eintrifft, verarbeitet LoadControlFilter sie in folgender Reihenfolge:
Pruefen, ob der Pfad ausgenommen ist (wenn ausgenommen, durchlassen)
Art der Anfrage bestimmen (Web / API)
Entsprechenden Schwellenwert abrufen
Wenn der Schwellenwert 100 oder hoeher ist, nicht steuern (durchlassen)
Aktuelle CPU-Auslastung mit dem Schwellenwert vergleichen
Wenn CPU-Auslastung >= Schwellenwert, HTTP 429 zurueckgeben
Ausgenommene Anfragen:
Pfade, die mit
/adminbeginnen (Admin-Panel)Pfade, die mit
/errorbeginnen (Fehlerseiten)Pfade, die mit
/loginbeginnen (Login-Seiten)Statische Ressourcen (
.css,.js,.png,.jpg,.gif,.ico,.svg,.woff,.woff2,.ttf,.eot)
Fuer Web-Anfragen:
Gibt HTTP 429-Statuscode zurueck
Zeigt die Fehlerseite (
busy.jsp) an
Fuer API-Anfragen:
Gibt HTTP 429-Statuscode zurueck
Gibt eine JSON-Antwort zurueck:
{
"response": {
"status": 9,
"message": "Server is busy. Please retry after 60 seconds.",
"retry_after": 60
}
}
Konfigurationsbeispiele
Nur Web-Anfragen begrenzen
Konfiguration, die nur Web-Suchanfragen begrenzt und API nicht einschraenkt:
# Web: Anfragen bei CPU-Auslastung von 80% oder mehr ablehnen
web.load.control=80
# API: Keine Einschraenkung
api.load.control=100
# Ueberwachungsintervall: 1 Sekunde
load.control.monitor.interval=1
Web und API begrenzen
Beispiel mit unterschiedlichen Schwellenwerten fuer Web und API:
# Web: Anfragen bei CPU-Auslastung von 70% oder mehr ablehnen
web.load.control=70
# API: Anfragen bei CPU-Auslastung von 80% oder mehr ablehnen
api.load.control=80
# Ueberwachungsintervall: 2 Sekunden
load.control.monitor.interval=2
Bemerkung
Wenn Sie den API-Schwellenwert hoeher als den Web-Schwellenwert setzen, koennen Sie eine gestufte Steuerung erreichen, bei der zuerst Web-Anfragen bei hoher Last eingeschraenkt werden und API-Anfragen erst bei weiter steigender Last ebenfalls eingeschraenkt werden.
Unterschied zur Rate-Limitierung
Fess verfuegt ueber eine Rate-Limiting-Konfiguration-Funktion, die von der Laststeuerung getrennt ist. Diese schuetzen das System mit unterschiedlichen Ansaetzen.
| Aspekt | Rate-Limitierung | Laststeuerung |
|---|---|---|
| Steuerungsgrundlage | Anzahl der Anfragen (pro Zeiteinheit) | OpenSearch CPU-Auslastung |
| Zweck | Verhinderung uebermaeessiger Anfragen | Schutz der Suchmaschine vor hoher Last |
| Begrenzungseinheit | Pro IP-Adresse | Systemweit |
| Antwort | HTTP 429 | HTTP 429 |
| Anwendungsbereich | Such-API / AI-Modus-API | Web-Anfragen / API-Anfragen |
Die Kombination beider Funktionen ermoeglicht einen robusteren Systemschutz.
Fehlerbehebung
Laststeuerung wird nicht aktiviert
Ursache: Konfiguration wird nicht richtig angewendet
Pruefen:
Ist
web.load.controloderapi.load.controlunter 100 gesetzt?Wird die Konfigurationsdatei korrekt gelesen?
Wurde Fess neu gestartet?
Legitime Anfragen werden abgelehnt
Ursache: Schwellenwerte sind zu niedrig
Loesungen:
Die Werte von
web.load.controloderapi.load.controlerhoehenload.control.monitor.intervalanpassen, um die Ueberwachungshaeufigkeit zu aendernRessourcen des OpenSearch-Clusters erweitern
Warnung
Wenn Schwellenwerte zu niedrig gesetzt werden, koennen Anfragen auch bei normaler Last abgelehnt werden. Ueberpruefen Sie die normale CPU-Auslastung Ihres OpenSearch-Clusters, bevor Sie geeignete Schwellenwerte festlegen.
Referenzinformationen
Rate-Limiting-Konfiguration - Rate-Limiting-Konfiguration