Uebersicht
Fess enthaelt zwei Arten von Laststeuerungsfunktionen, die die Systemstabilitaet basierend auf der CPU-Auslastung schuetzen.
HTTP-Anfragen-Laststeuerung (web.load.control / api.load.control):
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)
Adaptive Laststeuerung (adaptive.load.control):
Ueberwacht die System-CPU-Auslastung des Fess-Servers selbst
Drosselt automatisch Hintergrundaufgaben wie Crawling, Indexierung, Suggest-Aktualisierungen und Thumbnail-Generierung
Wenn die CPU-Auslastung den Schwellenwert erreicht oder ueberschreitet, werden Verarbeitungsthreads angehalten und bei Unterschreitung fortgesetzt
Standardmaessig aktiviert (Schwellenwert=50)
HTTP-Anfragen-Laststeuerung-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 | Alle HTTP-Anfragen | Web-Anfragen / API-Anfragen (Admin-Panel usw. ausgenommen) |
Die Kombination beider Funktionen ermoeglicht einen robusteren Systemschutz.
Adaptive Laststeuerung
Die adaptive Laststeuerung passt die Verarbeitungsgeschwindigkeit von Hintergrundaufgaben automatisch basierend auf der System-CPU-Auslastung des Fess-Servers an.
Konfiguration
fess_config.properties:
# Adaptive Laststeuerung CPU-Auslastungs-Schwellenwert (%)
# Haelt Hintergrundaufgaben an, wenn die System-CPU-Auslastung diesen Wert erreicht oder ueberschreitet
# Auf 0 oder darunter setzen zum Deaktivieren (Standard: 50)
adaptive.load.control=50
Verhalten
Ueberwacht die System-CPU-Auslastung des Servers, auf dem Fess laeuft
Wenn die CPU-Auslastung den Schwellenwert erreicht oder ueberschreitet, warten die betroffenen Verarbeitungsthreads, bis die CPU-Auslastung unter den Schwellenwert faellt
Wenn die CPU-Auslastung unter den Schwellenwert faellt, wird die Verarbeitung automatisch fortgesetzt
Betroffene Hintergrundaufgaben:
Crawling (Web / Dateisystem)
Indexierung (Dokumentenregistrierung)
Datenspeicher-Verarbeitung
Suggest-Aktualisierungen
Thumbnail-Generierung
Sicherung und Wiederherstellung
Bemerkung
Die adaptive Laststeuerung ist standardmaessig aktiviert (Schwellenwert=50). Sie arbeitet unabhaengig von der HTTP-Anfragen-Laststeuerung (web.load.control / api.load.control).
| Aspekt | HTTP-Anfragen-Laststeuerung | Adaptive Laststeuerung |
|---|---|---|
| Ueberwachungsziel | OpenSearch CPU-Auslastung | Fess-Server System-CPU-Auslastung |
| Steuerungsziel | HTTP-Anfragen (Web / API) | Hintergrundaufgaben |
| Steuerungsmethode | Lehnt Anfragen mit HTTP 429 ab | Haelt Verarbeitungsthreads voruebergehend an |
| Standard | Deaktiviert (Schwellenwert=100) | Aktiviert (Schwellenwert=50) |
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.
Crawling ist langsam
Ursache: Threads befinden sich aufgrund der adaptiven Laststeuerung im Wartezustand
Pruefen:
Ob
Cpu Load XX% is greater than YY%in den Logs erscheintOb der
adaptive.load.control-Schwellenwert zu niedrig ist
Loesungen:
Den Wert von
adaptive.load.controlerhoehen (z.B. 70)CPU-Ressourcen des Fess-Servers erweitern
Auf 0 setzen, um die adaptive Laststeuerung zu deaktivieren (nicht empfohlen)
Referenzinformationen
Rate-Limiting-Konfiguration - Rate-Limiting-Konfiguration