Optimiser la charge de travail de votre serveur Web 4D est désormais un jeu d’enfant. À partir de la version 4D 21 R5, votre serveur Web n’est plus exposé à des surcharges involontaires, qu’il s’agisse d’un volume excessif de données demandées, d’un nombre trop élevé de requêtes entrantes ou d’une explosion du nombre de sessions d’utilisateurs.
Poursuivez votre lecture pour découvrir tout ce dont vous avez besoin pour mettre en place un système de limitation de débit entièrement personnalisé pour votre serveur d’applications Web.
Dans un précédent article de blog consacré à la version 4D 21 R4, nous avions présenté une méthode permettant de limiter le nombre d’ensembles d’entités dans une session REST, ce qui constituait le premier chapitre d’une histoire bien plus vaste. Aujourd’hui, cette histoire franchit une étape majeure (mais non définitive).
Avec 4D 21 R5, votre 4D Web Server peut être réglé avec précision pour maîtriser le trafic entrant et sortant, grâce aux quotas.
Cette nouvelle fonctionnalité ne modifie pas le comportement par défaut de votre serveur web : par défaut, aucun quota n’est appliqué. En fonction de vos besoins, vous pouvez puiser dans une gamme complète de quotas : n’en utilisez qu’un seul, utilisez-les tous, la granularité dépend entièrement de vous.
HDI_WebServer_RateLimitingQuotas
Ajouter de l’intelligence applicative à la protection Web classique
Cette fonctionnalité vient compléter, plutôt que remplacer, les proxys inversés, les WAF, les pare-feu… et autres services. Ces technologies protègent le périmètre réseau et filtrent le trafic hostile, tandis que 4D assure la régulation de la charge de travail au niveau applicatif au sein même du serveur web.
Sa valeur ajoutée réside dans sa connaissance des sessions 4D et du contexte applicatif : les développeurs peuvent définir des quotas globaux et au niveau de la session pour les requêtes, les volumes de données, les sessions et les ensembles d’entités. Cela permet de contrôler les utilisations mal formées ou excessives, le trafic MCP et les workflows spécifiques à l’entreprise directement au sein de l’application.
Quotas au niveau du serveur et de la session
Avant d’entrer dans les détails : pour un contrôle plus fin, la plupart des quotas peuvent être définis à deux niveaux :
- Niveau serveur : limite l’activité de l’ensemble du serveur
- Au niveau de la session : s’applique individuellement à chaque nouvelle session créée
Vous pouvez vous appuyer uniquement sur les quotas au niveau du serveur, uniquement sur ceux au niveau de la session, ou combiner les deux.
Avantage : les quotas au niveau de la session placent tous les utilisateurs sur un pied d’égalité, empêchant ainsi un utilisateur isolé de monopoliser les ressources de votre serveur web.
Ce que les quotas permettent de réguler
Les quotas vous permettent de limiter :
- Trafic entrant : nombre d’octets reçus, nombre de requêtes acceptées
- Trafic sortant : nombre d’octets envoyés
- Sessions : le nombre maximal de sessions actives
- Sessions invitées : le nombre maximal de sessions non encore authentifiées via setPrivileges().
- Ensembles d’entités : le nombre maximal d’ensembles d’entités autorisés par défaut pour chaque session REST nouvellement créée
Principe fondamental: dès qu’un quota est dépassé, le serveur renvoie une réponse HTTP 429 – Too Many Requests.
Avantage : tous les aspects susceptibles de surcharger votre serveur web sont pris en compte : non seulement les octets entrants et sortants, mais aussi les requêtes. Vous pouvez limiter les sessions invitées inactives ainsi que le nombre de sessions utilisateur simultanées.
Les quotas régulent en douceur l’utilisation de votre serveur web, indiquant ainsi aux utilisateurs que le serveur n’est ni hors service ni en panne, mais qu’il fait simplement son travail, en modérant la charge pour rester disponible de manière fiable.
En détail : deux types de quotas
Il existe deux types de quotas :
- Quotas de limitation de débit
- Quotas de simultanéité
Quotas de limitation de débit
Ils concernent :
- Nombre d’octets reçus
- Nombre de requêtes acceptées
- Nombre d’octets envoyés
Ils reposent sur un système de fenêtres temporelles, à la fois au niveau de la minute et de l’heure, ce qui vous permet de définir le nombre maximal d’octets (ou de requêtes) que votre serveur web, et/ou ses sessions, peuvent traiter au cours d’une fenêtre d’une minute ou d’une heure.
Dès qu’un quota est dépassé au cours d’une fenêtre temporelle, le serveur renvoie un code d’erreur HTTP 429 jusqu’à l’ouverture de la fenêtre suivante.
Ces quotas peuvent être configurés aussi bien au niveau global du serveur qu’ au niveau des sessions.
Avantage : la combinaison de fenêtres d’une minute et d’une heure vous offre un contrôle très fin, permettant de lisser les pics minute par minute tout en maintenant un plafond horaire.
Appliquez la même logique au niveau des sessions, et vous régulerez l’activité de chaque utilisateur individuellement, empêchant ainsi l’un d’entre eux de monopoliser toute votre bande passante.
Quotas simultanés
Ceux-ci couvrent :
- Nombre maximal de sessions
- Nombre maximal de sessions invitées
- Nombre maximal d’ensembles d’entités autorisés par défaut pour chaque nouvelle session REST créée
Il s’agit de compteurs absolus : dès qu’un quota est dépassé, le serveur renvoie un code d’erreur HTTP 429 jusqu’à ce que le compteur diminue. Par exemple, lorsqu’une session se ferme, libérant ainsi de l’espace pour une nouvelle session.
Avantage : cela complète parfaitement les quotas de limitation de débit en régulant également le nombre d’utilisateurs, et pas seulement leur trafic.
Configuration des quotas
L’ WEB Server objet expose une propriété `quotas `, un objet qui est, plus précisément, une instance de la 4D.QuotaManager classe.
Il existe trois façons de configurer les quotas : choisissez celle qui correspond le mieux à votre architecture :
1- Mettez à jour l’objet `quotas ` à la volée, une fois que le serveur web est déjà en cours d’exécution :
var $quotas : 4D.QuotaManager
$quotas:=WEB Server().quotas
$quotas.inBytesPerMin:=10000000
2- Transmettez un objet quotas au démarrage du serveur web:
var $quotas:={}
$quotas.inBytesPerMin:=20000000
WEB Server().start({quotas: $quotas})
3- Utilisez un fichier de configuration HTTPQuotas.json, lu automatiquement au démarrage :
{
"inBytesPerMin": 10000
}
Avantage : une flexibilité totale. Quelle que soit la configuration de votre déploiement, l’une de ces options conviendra.
Un exemple concret
var $quotas:={}
// Maximum number of input bytes accepted in a one-minute time window on the web server
$quotas.inBytesPerMin:=20000000
// Maximum number of sent bytes in a one-minute time window in a session
$quotas.outBytesPerMinPerSession:=10000000
// Maximum number of allowed sessions on the web server
$quotas.nbSessions:=50
// Maximum number of not authenticated sessions on the web server
$quotas.nbGuestSessions:=10
// Maximum number of accepted requests in a one-minute time window on the web server
$quotas.nbRequestsPerMin:=500
// Maximum number of accepted requests in a one-hour time window on the web server
$quotas.nbRequestsPerHour:=20000
WEB Server().start({quotas: $quotas})
Voici ce que vous verrez dans le débogueur :

Remarque :
nbRequestPerHour n’est pas simplement égal à nbRequestPerMin × 60 (ce qui donnerait 30 000). Il est délibérément fixé à un niveau inférieur, à 20 000. Ainsi, même une charge de travail qui atteint le quota par minute pendant plusieurs minutes d’affilée ne peut pas maintenir ce rythme pendant près d’une heure, ce qui vous offre un véritable plafond horaire plutôt qu’un simple quota par minute reformulé.
Pendant que les utilisateurs travaillent avec l’application, chaque fois qu’un quota est dépassé, le serveur renvoie un code d’état HTTP 429 – Too Many Requests.
Le cas échéant, l’en-tête de réponse « Retry-After » indique au client le nombre exact de secondes à attendre avant de réessayer :

Testez-le vous-même grâce à la documentation HDI détaillée, explorez tous les détails dans la documentation et n’hésitez pas à partager votre expérience sur le forum.
Oubliez les ralentissements dus à la surcharge du serveur. Tirez dès aujourd’hui le meilleur parti des performances de votre serveur web.
Les commentaires ne sont pas disponibles pour cet article pour le moment.