Aperçu
Fess dispose de deux types de fonctionnalités de contrôle de charge qui protègent la stabilité du système en fonction de l’utilisation CPU.
Contrôle de charge des requêtes HTTP (web.load.control / api.load.control) :
Surveillance en temps réel de l’utilisation CPU du cluster OpenSearch
Seuils indépendants configurables pour les requêtes web et les requêtes API
Retourne HTTP 429 (Too Many Requests) lorsque les seuils sont dépassés
Le panneau d’administration, la connexion et les ressources statiques sont exclus du contrôle
Désactivé par défaut (seuil=100)
Contrôle de charge adaptatif (adaptive.load.control) :
Surveille l’utilisation CPU système du serveur Fess lui-même
Ralentit automatiquement les tâches en arrière-plan telles que le crawling, l’indexation, les mises à jour de suggestions et la génération de vignettes
Lorsque l’utilisation CPU atteint ou dépasse le seuil, les threads de traitement sont mis en pause et reprennent lorsqu’elle descend en dessous du seuil
Activé par défaut (seuil=50)
Configuration du contrôle de charge des requêtes HTTP
Définissez les propriétés suivantes dans fess_config.properties :
Note
Lorsque web.load.control et api.load.control sont tous deux définis à 100 (défaut), la surveillance CPU d’OpenSearch ne démarre pas.
Fonctionnement
Mécanisme de surveillance
Lorsque le contrôle de charge est activé (l’un ou l’autre des seuils est inférieur à 100), LoadControlMonitorTarget surveille périodiquement l’utilisation CPU du cluster OpenSearch.
Récupère les statistiques OS de tous les noeuds du cluster OpenSearch
Enregistre l’utilisation CPU la plus élevée parmi tous les noeuds
Surveille à l’intervalle spécifié par
load.control.monitor.interval(défaut : 1 seconde)La surveillance démarre de manière différée lors de la première requête
Note
Si la récupération des informations de surveillance échoue, l’utilisation CPU est réinitialisée à 0. Les trois premiers échecs consécutifs sont enregistrés au niveau WARNING dans les logs ; à partir du quatrième échec, le niveau passe à DEBUG (afin d’éviter une inflation des logs en cas d’échecs persistants). Le compteur d’échecs est réinitialisé dès qu’une surveillance réussit.
Contrôle des requêtes
Lorsqu’une requête arrive, LoadControlFilter la traite dans l’ordre suivant :
Vérifier si le chemin est exclu (si exclu, laisser passer)
Déterminer le type de requête (Web / API)
Obtenir le seuil correspondant
Si le seuil est de 100 ou plus, ne pas contrôler (laisser passer)
Comparer l’utilisation CPU actuelle avec le seuil
Si l’utilisation CPU >= seuil, retourner HTTP 429
Requêtes exclues :
Chemins commençant par
/admin(panneau d’administration)Chemins commençant par
/error(pages d’erreur)Chemins commençant par
/login(pages de connexion)Ressources statiques (
.css,.js,.png,.jpg,.gif,.ico,.svg,.woff,.woff2,.ttf,.eot)
Pour les requêtes web :
Retourne le code de statut HTTP 429
Affiche la page d’erreur (
busy.jsp)
Pour les requêtes API :
Retourne le code de statut HTTP 429
Ajoute l’en-tete de réponse HTTP
Retry-After: 60Retourne une réponse JSON :
Note
Lorsqu’une requête est rejetée, le message suivant est enregistré au niveau INFO dans les logs du serveur : Rejecting request due to high CPU load: path=..., cpu=...%, threshold=...% Cela permet de vérifier quel chemin a été rejeté et pour quel seuil.
Exemples de configuration
Limiter uniquement les requêtes web
Configuration qui limite uniquement les requêtes de recherche web sans restreindre l’API :
Limiter à la fois le web et l’API
Exemple avec des seuils différents pour le web et l’API :
Note
En définissant le seuil API plus haut que le seuil web, vous pouvez réaliser un contrôle progressif où les requêtes web sont restreintes en premier lors d’une charge élevée, et les requêtes API sont également restreintes lorsque la charge augmente davantage.
Différence avec la limitation de débit
Fess dispose d’une fonctionnalité de Configuration de la limitation de débit séparée du contrôle de charge. Ces deux mécanismes protègent le système avec des approches différentes.
| Aspect | Limitation de débit | Contrôle de charge |
|---|---|---|
| Base de contrôle | Nombre de requêtes (par unité de temps) | Utilisation CPU d’OpenSearch |
| Objectif | Prévention des requêtes excessives | Protection du moteur de recherche contre la surcharge |
| Unité de limite | Par adresse IP | Ensemble du système |
| Réponse | HTTP 429 | HTTP 429 |
| Portée | Toutes les requêtes HTTP | Requêtes web / Requêtes API (panneau d’administration etc. exclu) |
La combinaison des deux fonctionnalités permet une protection système plus robuste.
Contrôle de charge adaptatif
Le contrôle de charge adaptatif ajuste automatiquement la vitesse de traitement des tâches en arrière-plan en fonction de l’utilisation CPU système du serveur Fess.
Configuration
fess_config.properties :
Comportement
Surveille l’utilisation CPU système du serveur où Fess s’exécute
Lorsque l’utilisation CPU atteint ou dépasse le seuil, les threads de traitement concernés attendent que l’utilisation CPU descende en dessous du seuil
Lorsque l’utilisation CPU descend en dessous du seuil, le traitement reprend automatiquement
Tâches en arrière-plan concernées :
Crawling (Web / Système de fichiers)
Indexation (enregistrement de documents)
Traitement du magasin de données
Mises à jour des suggestions
Génération de vignettes
Sauvegarde et restauration
Note
Le contrôle de charge adaptatif est activé par défaut (seuil=50). Il fonctionne indépendamment du contrôle de charge des requêtes HTTP (web.load.control / api.load.control).
| Aspect | Contrôle de charge des requêtes HTTP | Contrôle de charge adaptatif |
|---|---|---|
| Cible de surveillance | Utilisation CPU d’OpenSearch | Utilisation CPU système du serveur Fess |
| Cible de contrôle | Requêtes HTTP (Web / API) | Tâches en arrière-plan |
| Méthode de contrôle | Rejette les requêtes en retournant HTTP 429 | Met en pause temporairement les threads de traitement |
| Défaut | Désactivé (seuil=100) | Activé (seuil=50) |
Dépannage
Le contrôle de charge ne s’active pas
Cause : La configuration n’est pas correctement appliquée
Points à vérifier :
Vérifier si
web.load.controlouapi.load.controlest défini en dessous de 100Vérifier si le fichier de configuration est correctement lu
Vérifier si Fess a été redémarré
Les requêtes légitimes sont rejetées
Cause : Les seuils sont trop bas
Solution :
Augmenter les valeurs de
web.load.controlouapi.load.controlAjuster
load.control.monitor.intervalpour modifier la fréquence de surveillanceAugmenter les ressources du cluster OpenSearch
Avertissement
Définir des seuils trop bas peut entraîner le rejet de requêtes même sous charge normale. Vérifiez l’utilisation CPU normale de votre cluster OpenSearch avant de définir des seuils appropriés.
Le crawling est lent
Cause : Les threads sont en état d’attente en raison du contrôle de charge adaptatif
Points à vérifier :
Vérifier si
Cpu Load XX% is greater than YY%apparaît dans les logsVérifier 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
Définir à 0 pour désactiver le contrôle de charge adaptatif (non recommandé)
Informations de référence
Configuration de la limitation de débit - Configuration de la limitation de débit