¿Cuáles son los tiempos de espera de kubernetes / elb para solicitudes http?

9

Tengo una API de Java (que acepta solicitudes HTTPS_ empaquetadas en una imagen acoplable, y luego se implementa usando el clúster k8s en la parte superior de EC2. El EC2 maestro tiene un ELB al frente.

Puedo hacer solicitudes POST curl al ELB para golpear esa API de Java.

A veces, mi solicitud de curl se encuentra esperando una respuesta para siempre, aunque cuando veo los registros de Kube, el procesamiento fue exitoso.

Esto sucede para solicitudes más grandes de alrededor de 40 minutos, las solicitudes de 25 minutos obtienen una respuesta correcta.

¿Dónde crees que podría ser el tiempo de espera? ¿Hay algún parámetro de configuración específico que deba mirar?

cliente (curl) -> ELB -> k8s -> pod ejecutando una imagen api de java

pensé que esto sería relevante (no estoy configurando IdleTimeout) para ELB pero los documentos dicen que el valor predeterminado es 60 s, aunque puedo obtener respuesta para solicitudes de 20 minutos "ConnectionSettings": {"IdleTimeout"}

tooptoop4
fuente
"solicitudes más grandes alrededor de 40 minutos" ¿qué quieres decir con eso?
Arghya Sadhu
es decir, cargando un archivo grande, la API tarda 40 minutos en 'ingerirlo' con el proceso ETL y luego tenía la intención de enviar la respuesta de nuevo
tooptoop4
Me pregunto por qué tienes un LB frente al maestro (¿te refieres a api-server?), Y cómo puedes llegar a tu API golpeando ese LB.
Suren

Respuestas:

1

Tal como Pampy mencionó en su respuesta, el tiempo de espera de ELB solo cuenta el tiempo de inactividad. Esto puede variar entre 1 y 4000 segundos y está configurado en 60 segundos de forma predeterminada. Puede cambiar el tiempo de espera utilizando la CLI o la consola.

El siguiente es un ejemplo del uso de la CLI para cambiarlo a 5 minutos:

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

Fuente: docs

Como está cargando archivos grandes que demoran entre 20 y 40 minutos, todavía recomendaría las otras sugerencias sobre el uso de un agente de mensajes como RabbitM o Kafka para manejar la carga y el procesamiento de forma asincrónica.

Manish Dash
fuente
0

El tiempo de espera ELB solo cuenta para el tiempo "inactivo" . Eso significa que mientras su carga aún se esté ejecutando, no estará inactiva. Cuando el archivo llegó a su servidor, debe medir el tiempo hasta que su servidor responda.

Cuando se obtiene eso correctamente, el servidor procesará la solicitud y luego devolverá una respuesta al cliente. Con un tiempo de espera predeterminado de 60 segundos, su servidor tiene estos 60 segundos para procesar el archivo cargado y devolver una respuesta.

¿Quizás su servidor necesita menos de 60 segundos para procesar su carga de 25 minutos, pero más para procesar la carga de 40 minutos?

Pampy
fuente
¿De dónde vienen los 60 segundos? No estoy usando IdleTimeout predeterminado en ELB
tooptoop4
60 segundos es el tiempo de espera inactivo predeterminado del ELB. No puedes "no usarlo". Puede modificarlo entre 1 segundo y 60 minutos, pero no hay forma de decirle al ELB que no termine la conexión.
Pampy
0

¿Por qué no sube el archivo y envía un evento al intermediario de mensajes como rabbitMQ? Realice ETL en los archivos utilizando el objeto kubernetes Job / CronJob de forma asincrónica y, en consecuencia, notifique al cliente.

De esta manera, no tiene que bloquear la solicitud entrante por más tiempo. después de publicar el evento, envíe un mensaje al cliente de que la solicitud se está procesando.

P Ekambaram
fuente
Todavía quiero encontrar dónde está el tiempo de espera
tooptoop4
0

25 minutos es bastante largo para una solicitud HTTP. Estoy bastante de acuerdo con P Ekambaram.

Creo que podría ser mejor hacer que el punto final sea asíncrono y responder tan pronto como se cargue el archivo (debería ser más rápido), al mismo tiempo, usar mensajería de middleware (RabbitMQ, Kafka o NATS) o Websocket, que empuja un evento una vez que El archivo se ha importado y procesado correctamente.

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

use esto en cLI para cambiar el tiempo de espera a 5 minutos

Sai Vamsi
fuente