Übersicht
Fess enthält zwei Arten von Laststeuerungsfunktionen, die die Systemstabilität basierend auf der CPU-Auslastung schützen.
HTTP-Anfragen-Laststeuerung (web.load.control / api.load.control):
Echtzeitüberwachung der CPU-Auslastung des OpenSearch-Clusters
Unabhängige Schwellenwerte für Web-Anfragen und API-Anfragen konfigurierbar
Gibt HTTP 429 (Too Many Requests) zurück, wenn Schwellenwerte überschritten werden
Admin-Panel, Login und statische Ressourcen sind von der Steuerung ausgenommen
Standardmäßig deaktiviert (Schwellenwert=100)
Adaptive Laststeuerung (adaptive.load.control):
Überwacht 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 überschreitet, werden Verarbeitungsthreads angehalten und bei Unterschreitung fortgesetzt
Standardmäßig aktiviert (Schwellenwert=50)
Konfiguration der HTTP-Anfragen-Laststeuerung
Setzen Sie die folgenden Eigenschaften in fess_config.properties:
Bemerkung
Wenn sowohl web.load.control als auch api.load.control auf 100 (Standard) gesetzt sind, wird die OpenSearch-CPU-Überwachung nicht gestartet.
Funktionsweise
Überwachungsmechanismus
Wenn die Laststeuerung aktiviert ist (ein Schwellenwert unter 100), überwacht LoadControlMonitorTarget regelmäßig die CPU-Auslastung des OpenSearch-Clusters.
Ruft OS-Statistiken von allen Knoten im OpenSearch-Cluster ab
Zeichnet die höchste CPU-Auslastung aller Knoten auf
Überwacht im durch
load.control.monitor.intervalangegebenen Intervall (Standard: 1 Sekunde)Die Überwachung wird verzögert initialisiert und beim ersten Request gestartet
Bemerkung
Wenn das Abrufen der Überwachungsinformationen fehlschlägt, wird die CPU-Auslastung auf 0 zurückgesetzt. Bei den ersten drei aufeinanderfolgenden Fehlern wird dies auf WARNING-Ebene protokolliert, ab dem vierten Fehler wird auf DEBUG-Ebene gewechselt (um eine übermäßige Protokollvergrößerung durch anhaltende Fehler zu verhindern). Sobald die Überwachung einmal erfolgreich ist, wird der Fehlerzähler zurückgesetzt.
Anfragesteuerung
Wenn eine Anfrage eintrifft, verarbeitet LoadControlFilter sie in folgender Reihenfolge:
Prüfen, ob der Pfad ausgenommen ist (wenn ausgenommen, durchlassen)
Art der Anfrage bestimmen (Web / API)
Entsprechenden Schwellenwert abrufen
Wenn der Schwellenwert 100 oder höher ist, nicht steuern (durchlassen)
Aktuelle CPU-Auslastung mit dem Schwellenwert vergleichen
Wenn CPU-Auslastung >= Schwellenwert, HTTP 429 zurückgeben
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)
Für Web-Anfragen:
Gibt HTTP 429-Statuscode zurück
Zeigt die Fehlerseite (
busy.jsp) an
Für API-Anfragen:
Gibt HTTP 429-Statuscode zurück
Fügt den HTTP-Antwort-Header
Retry-After: 60hinzuGibt eine JSON-Antwort zurück:
Bemerkung
Wenn eine Anfrage abgelehnt wird, wird auf INFO-Ebene im Server-Log Rejecting request due to high CPU load: path=..., cpu=...%, threshold=...% ausgegeben. Damit lässt sich nachvollziehen, welcher Pfad mit welchem Schwellenwert abgelehnt wurde.
Konfigurationsbeispiele
Nur Web-Anfragen begrenzen
Konfiguration, die nur Web-Suchanfragen begrenzt und API nicht einschränkt:
Web und API begrenzen
Beispiel mit unterschiedlichen Schwellenwerten für Web und API:
Bemerkung
Wenn Sie den API-Schwellenwert höher als den Web-Schwellenwert setzen, können Sie eine gestufte Steuerung erreichen, bei der zuerst Web-Anfragen bei hoher Last eingeschränkt werden und API-Anfragen erst bei weiter steigender Last ebenfalls eingeschränkt werden.
Unterschied zur Rate-Limitierung
Fess verfügt über eine Rate-Limiting-Konfiguration-Funktion, die von der Laststeuerung getrennt ist. Diese schützen das System mit unterschiedlichen Ansätzen.
| Aspekt | Rate-Limitierung | Laststeuerung |
|---|---|---|
| Steuerungsgrundlage | Anzahl der Anfragen (pro Zeiteinheit) | OpenSearch CPU-Auslastung |
| Zweck | Verhinderung übermäßiger 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 ermöglicht 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:
Verhalten
Überwacht die System-CPU-Auslastung des Servers, auf dem Fess läuft
Wenn die CPU-Auslastung den Schwellenwert erreicht oder überschreitet, warten die betroffenen Verarbeitungsthreads, bis die CPU-Auslastung unter den Schwellenwert fällt
Wenn die CPU-Auslastung unter den Schwellenwert fällt, 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 standardmäßig aktiviert (Schwellenwert=50). Sie arbeitet unabhängig von der HTTP-Anfragen-Laststeuerung (web.load.control / api.load.control).
| Aspekt | HTTP-Anfragen-Laststeuerung | Adaptive Laststeuerung |
|---|---|---|
| Überwachungsziel | OpenSearch CPU-Auslastung | System-CPU-Auslastung des Fess-Servers |
| Steuerungsziel | HTTP-Anfragen (Web / API) | Hintergrundaufgaben |
| Steuerungsmethode | Lehnt Anfragen mit HTTP 429 ab | Hält Verarbeitungsthreads vorübergehend an |
| Standard | Deaktiviert (Schwellenwert=100) | Aktiviert (Schwellenwert=50) |
Fehlerbehebung
Laststeuerung wird nicht aktiviert
Ursache: Konfiguration wird nicht richtig angewendet
Prüfen:
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
Lösungen:
Die Werte von
web.load.controloderapi.load.controlerhöhenload.control.monitor.intervalanpassen, um die Überwachungshäufigkeit zu ändernRessourcen des OpenSearch-Clusters erweitern
Warnung
Wenn Schwellenwerte zu niedrig gesetzt werden, können Anfragen auch bei normaler Last abgelehnt werden. Überprüfen 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
Prüfen:
Ob
Cpu Load XX% is greater than YY%in den Logs erscheintOb der
adaptive.load.control-Schwellenwert zu niedrig ist
Lösungen:
Den Wert von
adaptive.load.controlerhöhen (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