Capacité

Profils de Timeout

Gérez 9 valeurs de timeout distinctes sous un seul profil et appliquez le bon comportement d'attente par pool pour le trafic web, API, WebSocket, long-poll et upload.

Les Profils de Timeout de TR7 ne réduisent pas la gestion des timeouts à un seul paramètre d'inactivité. HTTP keepalive, requête HTTP, connect, serveur, client, queue, tunnel, clientFIN et serverFIN — 9 axes de timeout indépendants — sont regroupés dans un seul objet profil. Chaque timeout régit un problème de production différent. Le trafic API bénéficie de timeouts de connect et de serveur courts, tandis qu'un endpoint long-polling nécessite un serverTimeout plus long. Une connexion WebSocket requiert que tunnelTimeout soit géré séparément du HTTP keepalive ; sinon les connexions de longue durée se coupent de manière inattendue. Les opérateurs créent leurs propres profils nommés — web, api, websocket, longpoll, upload ou défensif — et les lient aux pools concernés. Lorsqu'un profil change, chaque pool lié à ce profil hérite automatiquement du même standard de timeout. Résultat : TR7 sort la gestion des timeouts des surcharges dispersées par pool et rend la durée de vie des connexions, la protection contre les clients lents, le temps d'attente backend, le comportement de queue et la stabilité WebSocket gouvernables via un seul modèle de profil.

9
Axes de timeout indépendants dans un seul profil
60 000
Plage configurable en secondes (16+ heures)
0
Préréglages intégrés — chaque profil est défini par l'opérateur

Des timeouts mal configurés produisent des pannes silencieuses, des déconnexions fantômes et des attentes inutiles en production.

Lorsqu'un timeout est mal configuré, l'échec n'est pas toujours évident. Si un serverTimeout est fixé à 30 secondes, les requêtes long-polling retournent 504. Si connectTimeout est trop long, les clients attendant d'atteindre un backend hors service restent bloqués pendant plusieurs secondes avant de réessayer — déclenchant des cascades de retry. Si tunnelTimeout est trop court, les connexions WebSocket se coupent sans raison et les utilisateurs connaissent des déconnexions fantômes.

La plupart des systèmes présentent les paramètres de timeout comme une liste plate. Les opérateurs ne peuvent pas clairement distinguer quelle valeur contrôle la phase de requête HTTP, laquelle régit le temps de réponse du backend, laquelle s'applique aux tunnels WebSocket et laquelle affecte l'attente FIN. Le résultat est soit toutes les valeurs définies trop haut — créant des fuites de connexion — soit toutes définies trop bas, coupant le trafic utilisateur légitime.

WebSocket et les connexions de longue durée sont là où ce problème est le plus visible. HTTP keepalive est significatif dans la plage 30-120 secondes, mais une session WebSocket peut rester ouverte pendant des heures. Sans un tunnelTimeout géré séparément, les applications temps réel sont contraintes par le comportement HTTP idle ordinaire.

Le comportement de démantèlement TCP compte également. Lorsque clientFIN et serverFIN ne sont pas contrôlés, les connexions à moitié fermées peuvent épuiser le pool de descripteurs de fichiers. Sur les services exposés au public, cela se conjugue avec des patterns d'attaque de fermeture lente et se transforme en problème d'épuisement des ressources.

Les Profils de Timeout de TR7 regroupent 9 axes de timeout indépendants dans un seul profil nommé, garantissant que chaque pool applique le bon comportement d'attente, de drain et de fermeture de connexion pour son type de trafic.

Notre approche

TR7 gère les timeouts via des profils nommés réutilisables plutôt que de disperser des paramètres individuels à travers les pools.

Les profils nommés sont créés et liés aux pools

Un opérateur définit un nom de profil et regroupe 9 valeurs de timeout à l'intérieur. Le même profil peut être lié à plusieurs pools, donnant aux pools web, API ou WebSocket un standard de timeout partagé cohérent.

Les axes HTTP, TCP, queue, tunnel et FIN sont maintenus séparés

La requête HTTP, le keepalive, le connect, le serveur, le client, la queue, le tunnel, le clientFIN et le serverFIN sont chacun gérés comme un champ distinct. Chaque champ est ajusté selon sa propre sémantique de trafic ; aucune valeur de timeout n'est utilisée comme substitut d'une autre.

Le timeout de tunnel WebSocket est indépendant du HTTP keepalive

Les connexions de longue durée telles que WebSocket et HTTP CONNECT sont gérées via tunnelTimeout séparément. Les connexions de chat, live-streaming et event-stream ne sont pas contraintes par le timer d'inactivité HTTP et ne se fermeront pas inutilement.

clientFIN et serverFIN limitent les connexions à moitié fermées

La durée pendant laquelle une connexion est maintenue après un signal de fermeture TCP est configurée indépendamment pour les côtés client et serveur. Cela réduit le risque de consommation de ressources de type FIN-WAIT et permet des politiques de drain plus agressives sur les services exposés au public.

Capacités

Les Profils de Timeout permettent aux opérateurs d'ajuster précisément la durée de vie des connexions et le comportement d'attente à travers 9 champs indépendants pour correspondre à chaque type de trafic.

httpKeepaliveTimeout contrôle la durée pendant laquelle une connexion HTTP inactive reste ouverte

httpKeepaliveTimeout définit la durée pendant laquelle une connexion HTTP/1.1 keep-alive reste ouverte entre les requêtes. La valeur par défaut est 120 secondes. Le définir trop haut gaspille des ressources sur les connexions inactives ; trop bas augmente le coût de reconnexion. Il est ajusté par rapport au budget de connexion inactive du backend.

httpRequestTimeout limite la livraison lente des headers et réduit le risque slowloris

httpRequestTimeout est le temps accordé au client pour compléter la ligne de requête et les headers. La valeur par défaut est 30 secondes. Les clients qui envoient des headers très lentement peuvent être coupés à ce seuil. C'est un point de défense important contre les patterns de type slowloris sur les services exposés au public.

connectTimeout régit le temps d'attente de connexion TCP au backend

connectTimeout définit le temps que TR7 attend lors de l'établissement d'une connexion TCP à un backend. La valeur par défaut est 20 secondes. Si défini trop long, un backend hors service ou inaccessible bloque inutilement les clients. Les scénarios API nécessitant des réponses d'échec rapide bénéficient d'un connectTimeout plus bas.

serverTimeout définit le temps d'attente pour une réponse du backend

serverTimeout est le temps accordé au backend pour produire une réponse. La valeur par défaut est 90 secondes. Il peut être défini bas pour les API rapides et augmenté pour les endpoints de reporting lourd, long-polling ou requête lente. Une valeur incorrectement basse cause des requêtes fonctionnant mais lentes à recevoir un 504.

clientTimeout contrôle le comportement d'attente lors de l'attente de données du client

clientTimeout est le temps d'attente pour que des données arrivent du client. Il s'applique à l'upload du corps de requête, aux requêtes pipeline et aux scénarios de client lent. La valeur par défaut est 90 secondes. Il peut être augmenté pour les grands uploads de fichiers et diminué pour réduire le risque de client lent sur les API publiques.

queueTimeout limite le temps d'attente d'un client lorsque le pool est à capacité

queueTimeout définit la durée pendant laquelle une requête attend dans la queue du pool lorsque la capacité de connexion est pleine. La valeur par défaut est 60 secondes. Lorsqu'elle est dépassée, la requête est retournée avec une erreur et le client n'est pas maintenu indéfiniment. Cette valeur doit être considérée conjointement avec les limites maxconn et les SLA applicatifs.

tunnelTimeout gère les connexions WebSocket et tunnel HTTP séparément

tunnelTimeout définit le temps d'inactivité pour les connexions WebSocket et tunnel HTTP CONNECT. La valeur par défaut est 120 secondes ; pour les applications temps réel, cela peut être augmenté à 3 600 secondes ou plus. Parce que ce timeout est indépendant du HTTP keepalive, les connexions de longue durée ne sont pas contraintes par les paramètres de trafic web. C'est critique pour les applications de chat, de notification en direct et de streaming.

clientFIN contrôle la durée pendant laquelle une connexion est maintenue après la fermeture du client

clientFIN définit la durée pendant laquelle la connexion est maintenue après un signal FIN du client. La valeur par défaut est 3 secondes. Des valeurs plus basses empêchent les connexions à moitié fermées de consommer des descripteurs de fichiers. C'est particulièrement important sur les services exposés au public pour réduire la pression de ressources FIN-WAIT.

serverFIN gère le temps de drain gracieux lorsque le backend se ferme

serverFIN limite le comportement de connexion après un signal FIN du backend. La valeur par défaut est 6 secondes. Maintenir serverFIN plus élevé que clientFIN permet plus de tolérance pour le drain gracieux lors de l'arrêt du backend. Ce paramètre affecte directement la qualité de fermeture des connexions dans les pools backend à fort trafic.

Le même profil de timeout peut être lié à plusieurs pools

Le modèle de liaison profil-pool permet au même standard de timeout d'être partagé entre plusieurs pools. Tous les pools web peuvent pointer vers le profil web, les pools API vers le profil api et les pools WebSocket vers le profil websocket. Un seul changement de profil met à jour de manière centralisée le comportement de timeout de chaque pool lié à lui, réduisant la duplication de configuration et la dérive.

Le pipeline de génération natif traduit les champs de profil en directives de timeout runtime

Les 9 champs de profil sont convertis vers les directives de timeout runtime correspondantes — connect, server, client, queue, tunnel, http-keep-alive, http-request, client-fin et server-fin. Les opérateurs gèrent les valeurs via le profil plutôt qu'en écrivant des directives individuelles, créant un pont cohérent entre l'interface graphique et le comportement runtime.

Le timeout des contrôles de santé reste un contrôle séparé en dehors du profil de trafic

Le timing des contrôles de santé est géré via son propre champ de timeout et est indépendant du profil de timeout de trafic. Cette séparation est importante : la latence des sondes et le comportement d'attente du trafic de production ne se mélangent pas. Un contrôle de santé du backend peut être maintenu court pendant que le serverTimeout réel de l'endpoint reste long, permettant de surveiller la santé du service et le trafic utilisateur avec des sémantiques différentes.

Profondeur opérationnelle

Les profils de timeout sont opérés conjointement avec leur plage de valeurs, les valeurs par défaut, la prise en charge des décimales, la sémantique des tunnels, l'équilibre FIN et le modèle de liaison aux pools.

01

Plage de valeurs

Les champs de timeout sont configurables de 0 à 60 000 secondes. Cette plage s'étend des paramètres défensifs sub-seconde aux sessions dépassant 16 heures, offrant suffisamment de flexibilité pour les exigences de long-poll et de connexion persistante.

02

Prise en charge des décimales

httpKeepaliveTimeout accepte des valeurs décimales. Une valeur telle que 0,5 seconde permet un comportement de keepalive inactif plus précis. Les 8 autres champs de timeout sont traités comme des secondes en nombre entier.

03

Valeurs par défaut sûres pour la production

Les valeurs par défaut fournissent un point de départ sûr adapté à la plupart du trafic web et API. httpKeepaliveTimeout 120, httpRequestTimeout 30, connectTimeout 20, serverTimeout 90, clientTimeout 90, queueTimeout 60, tunnelTimeout 120, clientFIN 3 et serverFIN 6 secondes sont des bases de référence appropriées. Pour les types de trafic spécialisés, ces valeurs doivent être ajustées par profil.

04

Sémantique des tunnels

tunnelTimeout s'applique aux connexions tunnélisées telles que WebSocket et HTTP CONNECT. Ce n'est pas la même chose que le timeout de requête HTTP ou de keepalive. Le définir trop bas sur les connexions de longue durée produit des problèmes de déconnexion.

05

Équilibre FIN

Dans le modèle par défaut, serverFIN est plus tolérant que clientFIN. Cela laisse plus de place pour le drain gracieux lors de l'arrêt du backend. Sur les services exposés au public, les deux valeurs peuvent être définies de manière plus agressive pour réduire la consommation de ressources des connexions à moitié fermées.

06

Profils nommés plutôt que des préréglages

TR7 n'impose pas de préréglages prêts à l'emploi. Les opérateurs créent leurs propres profils nommés selon leur scénario — web, api, websocket, longpoll ou upload peuvent être définis pour correspondre aux standards de l'organisation. Lier un pool au profil approprié est préféré aux surcharges individuelles par service.

Quand l'utiliser

Profil de timeout équilibré pour les applications web standard

Un profil web peut être créé proche des valeurs par défaut. Le keepalive préserve l'expérience utilisateur pendant que les valeurs de timeout de requête et FIN limitent les connexions lentes ou à moitié fermées. Le même profil peut être lié à plusieurs pools web.

Longue durée de tunnel WebSocket pour le chat en temps réel

Les applications de chat ont besoin que les connexions WebSocket restent ouvertes sans coupures fréquentes. Dans un profil websocket, tunnelTimeout est défini à une longue valeur telle que 3 600 secondes pendant que les autres timeouts HTTP restent à leurs valeurs par défaut. Les connexions de longue durée ne sont plus contraintes par la fenêtre HTTP keepalive.

serverTimeout élevé pour les API long-polling

Un endpoint long-polling peut attendre plusieurs minutes que le backend réponde. Définir serverTimeout à 300 secondes dans un profil longpoll prend en charge une fenêtre d'attente de 5 minutes. Sans cela, un timeout d'API standard coupe les requêtes trop tôt.

clientTimeout étendu pour les grands uploads de fichiers

Les données du client peuvent arriver lentement lors des grands uploads de corps POST ou de fichiers. Dans un profil upload, clientTimeout et, si nécessaire, httpRequestTimeout peuvent être augmentés à 600 secondes. Cela empêche les opérations d'upload légitimes mais lentes d'être coupées.

Profil de timeout agressif pour une API bancaire rapide

Lorsqu'une API bancaire attend une réponse rapide du backend, des valeurs serrées telles que connectTimeout 2 secondes et serverTimeout 5 secondes peuvent être utilisées. Un backend lent ou hors service ne bloque pas longtemps les clients. Le comportement de retry et de failover est déclenché plus tôt.

Profil de timeout défensif pour le web exposé au public

Un profil défensif peut utiliser des valeurs basses telles que httpRequestTimeout 5 secondes et clientFIN/serverFIN 1 seconde. Cette structure limite les patterns de livraison lente des headers et de consommation de connexions à moitié fermées. Elle réduit la surface d'attaque sur les services exposés au public.

Questions fréquentes

Que contrôle chacun des 9 champs de timeout ?
Chaque champ régit une phase de connexion différente. httpKeepaliveTimeout et httpRequestTimeout couvrent la couche HTTP ; connectTimeout, serverTimeout et clientTimeout régissent l'établissement TCP et le temps d'attente applicatif ; queueTimeout gère la saturation du pool ; tunnelTimeout gère les tunnels WebSocket et HTTP CONNECT ; clientFIN et serverFIN contrôlent le comportement de démantèlement TCP. La sémantique de chaque champ diffère — utiliser l'un comme substitut d'un autre produit des échecs de production cachés.
Pourquoi les connexions WebSocket nécessitent-elles un profil de timeout séparé ?
Le timeout HTTP keepalive est significatif dans la plage 30-120 secondes, mais une session WebSocket peut rester ouverte pendant des heures. tunnelTimeout définit une durée indépendante pour les tunnels HTTP CONNECT et WebSocket, séparée du HTTP keepalive. Sans cette séparation, les applications temps réel sont contraintes par la fenêtre HTTP idle ordinaire et connaissent de fréquentes déconnexions fantômes.
Pourquoi les valeurs clientFIN et serverFIN sont-elles importantes du point de vue de la sécurité ?
Maintenir les connexions ouvertes trop longtemps après un signal de fermeture TCP permet aux connexions à moitié fermées d'épuiser le pool de descripteurs de fichiers. Sur les services exposés au public, cela peut se conjuguer avec des patterns d'attaque de fermeture lente pour devenir un vecteur d'épuisement des ressources. Les valeurs par défaut sont clientFIN 3 secondes et serverFIN 6 secondes ; celles-ci peuvent être abaissées de manière plus agressive dans les profils défensifs.
Comment le même profil est-il lié à plusieurs pools ?
L'opérateur attribue un nom au profil et référence ce nom dans la configuration de chaque pool concerné. Un profil peut être lié à n'importe quel nombre de pools — des profils nommés web, api ou websocket appliquent le même standard de timeout à tous les pools associés. Un seul changement du profil met à jour de manière centralisée le comportement de chaque pool lié à lui.
Quelle est la différence entre serverTimeout et queueTimeout ?
serverTimeout est le temps accordé au backend pour produire une réponse après qu'une connexion a été établie. queueTimeout est le temps qu'une requête attend dans la queue du pool avant qu'une connexion soit établie du tout. Ils couvrent des phases différentes et ne peuvent pas se substituer l'un à l'autre. Les deux doivent être ajustés conjointement avec les limites maxconn et les SLA applicatifs.
Existe-t-il des templates de profil de timeout intégrés ?
TR7 n'impose pas de préréglages intégrés. Les opérateurs créent des profils nommés pour correspondre à leurs propres scénarios — des noms tels que web, api, websocket, longpoll ou upload peuvent être définis pour s'adapter aux standards organisationnels. Cette approche permet à chaque environnement de définir ses propres profils plutôt que d'imposer un seul modèle de configuration à tous les types de trafic.

Modélisez la gestion des timeouts pour correspondre à vos types de trafic

Profils de timeout nommés à 9 axes pour vos pools web, API, WebSocket et upload. Laissez-nous vous présenter une mise en place en direct avec votre propre configuration.