Apercu
Fess dispose de deux types de fonctionnalites de controle de charge qui protegent la stabilite du systeme en fonction de l’utilisation CPU.
Controle de charge des requetes HTTP (web.load.control / api.load.control) :
Surveillance en temps reel de l’utilisation CPU du cluster OpenSearch
Seuils independants pour les requetes web et les requetes API
Retourne HTTP 429 (Too Many Requests) lorsque les seuils sont depasses
Le panneau d’administration, la connexion et les ressources statiques sont exclus du controle
Desactive par defaut (seuil=100)
Controle de charge adaptatif (adaptive.load.control) :
Surveille l’utilisation CPU systeme du serveur Fess lui-meme
Ralentit automatiquement les taches en arriere-plan telles que le crawling, l’indexation, les mises a jour de suggestions et la generation de vignettes
Lorsque l’utilisation CPU atteint ou depasse le seuil, les threads de traitement sont mis en pause et reprennent lorsqu’elle descend en dessous du seuil
Active par defaut (seuil=50)
Configuration du controle de charge des requetes HTTP
Definissez les proprietes suivantes dans fess_config.properties :
# Seuil d'utilisation CPU pour les requetes web (%)
# Les requetes sont rejetees lorsque l'utilisation CPU atteint ou depasse cette valeur
# Definir a 100 pour desactiver (defaut : 100)
web.load.control=100
# Seuil d'utilisation CPU pour les requetes API (%)
# Les requetes sont rejetees lorsque l'utilisation CPU atteint ou depasse cette valeur
# Definir a 100 pour desactiver (defaut : 100)
api.load.control=100
# Intervalle de surveillance de l'utilisation CPU (secondes)
# Intervalle pour recuperer l'utilisation CPU du cluster OpenSearch
# Defaut : 1
load.control.monitor.interval=1
Note
Lorsque web.load.control et api.load.control sont tous deux definis a 100 (defaut), la fonctionnalite de controle de charge est completement desactivee et la surveillance ne demarre pas.
Fonctionnement
Mecanisme de surveillance
Lorsque le controle de charge est active (un seuil est inferieur a 100), LoadControlMonitorTarget surveille periodiquement l’utilisation CPU du cluster OpenSearch.
Recupere les statistiques OS de tous les noeuds du cluster OpenSearch
Enregistre l’utilisation CPU la plus elevee parmi tous les noeuds
Surveille a l’intervalle specifie par
load.control.monitor.interval(defaut : 1 seconde)La surveillance demarre de maniere differee lors de la premiere requete
Note
Si la recuperation des informations de surveillance echoue, l’utilisation CPU est reinitialisee a 0. Apres 3 echecs consecutifs, le niveau de log passe de WARNING a DEBUG.
Controle des requetes
Lorsqu’une requete arrive, LoadControlFilter la traite dans l’ordre suivant :
Verifier si le chemin est exclu (si exclu, laisser passer)
Determiner le type de requete (Web / API)
Obtenir le seuil correspondant
Si le seuil est de 100 ou plus, ne pas controler (laisser passer)
Comparer l’utilisation CPU actuelle avec le seuil
Si l’utilisation CPU >= seuil, retourner HTTP 429
Requetes exclues :
Chemins commencant par
/admin(panneau d’administration)Chemins commencant par
/error(pages d’erreur)Chemins commencant par
/login(pages de connexion)Ressources statiques (
.css,.js,.png,.jpg,.gif,.ico,.svg,.woff,.woff2,.ttf,.eot)
Pour les requetes web :
Retourne le code de statut HTTP 429
Affiche la page d’erreur (
busy.jsp)
Pour les requetes API :
Retourne le code de statut HTTP 429
Retourne une reponse JSON :
{
"response": {
"status": 9,
"message": "Server is busy. Please retry after 60 seconds.",
"retry_after": 60
}
}
Exemples de configuration
Limiter uniquement les requetes web
Configuration qui limite uniquement les requetes de recherche web sans restreindre l’API :
# Web : Rejeter les requetes lorsque l'utilisation CPU est de 80% ou plus
web.load.control=80
# API : Aucune restriction
api.load.control=100
# Intervalle de surveillance : 1 seconde
load.control.monitor.interval=1
Limiter a la fois le web et l’API
Exemple avec des seuils differents pour le web et l’API :
# Web : Rejeter les requetes lorsque l'utilisation CPU est de 70% ou plus
web.load.control=70
# API : Rejeter les requetes lorsque l'utilisation CPU est de 80% ou plus
api.load.control=80
# Intervalle de surveillance : 2 secondes
load.control.monitor.interval=2
Note
En definissant le seuil API plus haut que le seuil web, vous pouvez realiser un controle progressif ou les requetes web sont restreintes en premier lors d’une charge elevee, et les requetes API sont egalement restreintes lorsque la charge augmente davantage.
Difference avec la limitation de debit
Fess dispose d’une fonctionnalite de Configuration de la limitation de debit separee du controle de charge. Celles-ci protegent le systeme avec des approches differentes.
| Aspect | Limitation de debit | Controle de charge |
|---|---|---|
| Base de controle | Nombre de requetes (par unite de temps) | Utilisation CPU d’OpenSearch |
| Objectif | Prevention des requetes excessives | Protection du moteur de recherche contre la charge elevee |
| Unite de limite | Par adresse IP | Ensemble du systeme |
| Reponse | HTTP 429 | HTTP 429 |
| Portee | Toutes les requetes HTTP | Requetes web / Requetes API (panneau d’administration etc. exclu) |
La combinaison des deux fonctionnalites permet une protection systeme plus robuste.
Controle de charge adaptatif
Le controle de charge adaptatif ajuste automatiquement la vitesse de traitement des taches en arriere-plan en fonction de l’utilisation CPU systeme du serveur Fess.
Configuration
fess_config.properties :
# Seuil d'utilisation CPU du controle de charge adaptatif (%)
# Met en pause les taches en arriere-plan lorsque l'utilisation CPU systeme atteint ou depasse cette valeur
# Definir a 0 ou moins pour desactiver (defaut : 50)
adaptive.load.control=50
Comportement
Surveille l’utilisation CPU systeme du serveur ou Fess s’execute
Lorsque l’utilisation CPU atteint ou depasse le seuil, les threads de traitement concernes attendent que l’utilisation CPU descende en dessous du seuil
Lorsque l’utilisation CPU descend en dessous du seuil, le traitement reprend automatiquement
Taches en arriere-plan concernees :
Crawling (Web / Systeme de fichiers)
Indexation (enregistrement de documents)
Traitement du magasin de donnees
Mises a jour des suggestions
Generation de vignettes
Sauvegarde et restauration
Note
Le controle de charge adaptatif est active par defaut (seuil=50). Il fonctionne independamment du controle de charge des requetes HTTP (web.load.control / api.load.control).
| Aspect | Controle de charge des requetes HTTP | Controle de charge adaptatif |
|---|---|---|
| Cible de surveillance | Utilisation CPU d’OpenSearch | Utilisation CPU systeme du serveur Fess |
| Cible de controle | Requetes HTTP (Web / API) | Taches en arriere-plan |
| Methode de controle | Rejette les requetes en retournant HTTP 429 | Met en pause temporairement les threads de traitement |
| Defaut | Desactive (seuil=100) | Active (seuil=50) |
Depannage
Le controle de charge ne s’active pas
Cause : La configuration n’est pas correctement appliquee
Points a verifier :
Verifier si
web.load.controlouapi.load.controlest defini en dessous de 100Verifier si le fichier de configuration est correctement lu
Verifier si Fess a ete redemarre
Les requetes legitimes sont rejetees
Cause : Les seuils sont trop bas
Solution :
Augmenter les valeurs de
web.load.controlouapi.load.controlAjuster
load.control.monitor.intervalpour modifier la frequence de surveillanceAugmenter les ressources du cluster OpenSearch
Avertissement
Definir des seuils trop bas peut entrainer le rejet de requetes meme sous charge normale. Verifiez l’utilisation CPU normale de votre cluster OpenSearch avant de definir des seuils appropries.
Le crawling est lent
Cause : Les threads sont en etat d’attente en raison du controle de charge adaptatif
Points a verifier :
Verifier si
Cpu Load XX% is greater than YY%apparait dans les logsVerifier si le seuil
adaptive.load.controlest trop bas
Solution :
Augmenter la valeur de
adaptive.load.control(ex : 70)Augmenter les ressources CPU du serveur Fess
Definir a 0 pour desactiver le controle de charge adaptatif (non recommande)
Informations de reference
Configuration de la limitation de debit - Configuration de la limitation de debit