quels sont les délais d'expiration kubernetes / elb pour les requêtes http?

9

J'ai une API Java (acceptant les requêtes HTTPS_ empaquetées dans une image docker, puis elle est déployée à l'aide du cluster k8s au-dessus des EC2. Le maître EC2 a un ELB en face.

Je peux faire des requêtes POST curl à l'ELB afin d'atteindre cette API java.

Parfois, ma demande de bouclage attend une réponse pour toujours, même si lorsque je vois les journaux du kube, le traitement a réussi.

Cela se produit pour les demandes plus importantes d'environ 40 minutes, les demandes de 25 minutes reçoivent une réponse correcte.

Où pensez-vous que le délai pourrait être? des paramètres de configuration spécifiques que je devrais regarder?

client (curl) -> ELB -> k8s -> pod exécutant une image api java

je pensais que ce serait pertinent (je ne configure pas IdleTimeout) pour ELB mais les documents disent que la valeur par défaut est 60s, bien que je puisse obtenir une réponse pour les demandes de 20 minutes "ConnectionSettings": {"IdleTimeout"}

tooptoop4
la source
"demandes plus importantes d'environ 40 minutes" que voulez-vous dire par là?
Arghya Sadhu
c'est-à-dire en téléchargeant un fichier volumineux, l'api prend 40 minutes pour «l'ingérer» avec le processus ETL puis destiné à renvoyer la réponse
tooptoop4
Je me demande pourquoi avez-vous un LB devant le maître (vous voulez dire un serveur API?), Et comment pouvez-vous atteindre votre API en frappant ce LB.
suren

Réponses:

1

Tout comme Pampy l'a mentionné dans sa réponse, le délai d'attente ELB ne compte que le temps d'inactivité. Cela peut varier entre 1 et 4000 secondes et est défini sur 60 secondes par défaut. Vous pouvez modifier le délai d'expiration à l'aide de la CLI ou de la console.

Voici un exemple d'utilisation de la CLI pour la changer en 5 minutes:

aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "{\"ConnectionSettings\":{\"IdleTimeout\":300}}"

Source: docs

Comme vous téléchargez des fichiers volumineux en 20 à 40 minutes, je recommanderais toujours les autres suggestions sur l'utilisation d'un courtier de messages comme RabbitM ou Kafka pour gérer le téléchargement et le traitement de manière asynchrone.

Manish Dash
la source
0

Le délai d'attente ELB ne compte que pour le temps "inactif" . Cela signifie que tant que votre téléchargement est en cours d'exécution, il n'est pas inactif. Lorsque le fichier est arrivé sur votre serveur, vous devez mesurer le temps jusqu'à ce que votre serveur réponde.

Une fois obtenu correctement, le serveur traitera la demande et retournera une réponse au client par la suite. Avec un délai par défaut de 60 secondes, votre serveur dispose de ces 60 secondes pour traiter le fichier téléchargé et renvoyer une réponse.

Peut-être que votre serveur a besoin de moins de 60 secondes pour traiter votre téléchargement de 25 minutes, mais davantage pour traiter le téléchargement de 40 minutes?

Pampy
la source
D'où viennent les 60 secondes? je n'utilise pas IdleTimeout par défaut sur ELB
tooptoop4
60 secondes est le délai d'inactivité par défaut de l'ELB. Vous ne pouvez pas "ne pas l'utiliser". Vous pouvez le modifier entre 1 seconde et 60 minutes, mais il n'y a aucun moyen de dire à l'ELB de ne pas interrompre la connexion du tout.
Pampy
0

Pourquoi ne téléchargez-vous pas le fichier et ne poussez pas un événement vers le courtier de messages comme rabbitMQ. Exécutez ETL sur les fichiers à l'aide de l'objet kubernetes Job / CronJob de manière asynchrone et informez le client en conséquence.

De cette façon, vous n'avez pas à bloquer la demande entrante plus longtemps. après le téléchargement après la publication de l'événement, envoyez un message au client indiquant que la demande est en cours de traitement.

P Ekambaram
la source
je veux toujours trouver où est le timeout
tooptoop4
0

25 minutes, c'est assez long pour une requête HTTP. Je suis tout à fait d'accord avec P Ekambaram.

Je pense qu'il pourrait être préférable de rendre le point de terminaison asynchrone et de répondre dès que le fichier est téléchargé (devrait être plus rapide), en même temps, utilisez la messagerie middleware (RabbitMQ, Kafka ou NATS) ou Websocket, qui pousse un événement une fois le le fichier a été importé et traité avec succès.

nordeen78
la source
0
 aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "{\"ConnectionSettings\":{\"IdleTimeout\":300}}"

utiliser ceci en cLI pour changer le délai d'attente à 5 min

Sai Vamsi
la source