quais são os tempos limite do kubernetes / elb para solicitações http?

9

Eu tenho uma API java (aceitando solicitações HTTPS_ empacotadas em uma imagem do docker e, em seguida, ela é implantada usando o cluster k8s na parte superior dos EC2s. O EC2 principal tem um ELB na frente.

Posso fazer solicitações de POST de ondulação para o ELB para atingir essa API java.

Às vezes, minha solicitação de ondulação fica aguardando uma resposta para sempre, mesmo quando eu vejo os logs do kube o processamento foi bem-sucedido.

Isso acontece para solicitações maiores em torno de 40 minutos, solicitações de 25 minutos estão recebendo uma resposta ok.

Onde você acha que poderia estar o tempo limite? quaisquer parâmetros de configuração específicos que eu deveria olhar?

cliente (curl) -> ELB -> k8s -> pod executando uma imagem da API Java

Eu pensei que isso seria relevante (não estou definindo IdleTimeout) para ELB, mas os documentos dizem que o padrão é 60s, embora eu possa obter resposta para solicitações de 20 minutos "ConnectionSettings": {"IdleTimeout"}

tooptoop4
fonte
"solicitações maiores em torno de 40 minutos", o que você quer dizer com isso?
Arghya Sadhu
ie upload arquivo grande, api leva 40mins para 'ingerir'-lo com o processo de ETL, em seguida, a intenção de enviar resposta de volta
tooptoop4
Eu estou querendo saber por que você tem um LB na frente do mestre (você quer dizer api-server?) E como você pode alcançar sua API atingindo esse LB.
suren 04/02

Respostas:

1

Assim como Pampy mencionou em sua resposta, o tempo limite do ELB conta apenas o tempo ocioso. Isso pode variar entre 1 e 4000 segundos e é definido como 60 segundos por padrão. Você pode alterar o tempo limite usando a CLI ou o console.

A seguir, é apresentado um exemplo do uso da CLI para alterá-la para 5 minutos:

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

Fonte: docs

Como você está enviando arquivos grandes com duração de 20 a 40 minutos, ainda recomendo outras sugestões sobre o uso de um intermediário de mensagens como RabbitM ou Kafka para lidar com o upload e o processamento de forma assíncrona.

Manish Dash
fonte
0

O tempo limite do ELB conta apenas para o tempo "inativo" . Isso significa que, enquanto o upload ainda estiver em execução, ele não ficará ocioso. Quando o arquivo chegou ao seu servidor, você precisa medir o tempo até o servidor responder.

Quando isso estiver correto, o servidor processará a solicitação e retornará uma resposta ao cliente posteriormente. Com um tempo limite padrão de 60 segundos, o servidor tem esses 60 segundos para processar o arquivo enviado e retornar uma resposta.

Talvez seu servidor precise de menos de 60 segundos para processar seu upload de 25 minutos, mas mais para processar o upload de 40 minutos?

Pampy
fonte
de onde vêm os 60 segundos? Eu não estou usando o IdleTimeout padrão no ELB
tooptoop4 17/01
60 segundos é o tempo limite inativo padrão do ELB. Você não pode "não usá-lo". Você pode modificá-lo para que fique entre 1 segundo e 60 minutos, mas não há como dizer ao ELB para não encerrar a conexão.
Pampy 23/01
0

Por que você não carrega o arquivo e envia um evento para o broker de mensagens como rabbitMQ. Execute ETL nos arquivos usando o objeto Job / CronJob do kubernetes de forma assíncrona e, portanto, notifique o cliente.

Dessa forma, você não precisa bloquear a solicitação recebida por mais tempo. postar upload após a publicação do evento, envie uma mensagem ao cliente informando que a solicitação está sendo processada.

P Ekambaram
fonte
Eu ainda quero descobrir onde está o tempo limite
tooptoop4 20/01
0

25 minutos é bastante longo para uma solicitação HTTP. Concordo plenamente com P Ekambaram.

Eu acho que seria melhor tornar o terminal assíncrono e responder assim que o arquivo for carregado (deve ser mais rápido), ao mesmo tempo, use mensagens de middleware (RabbitMQ, Kafka ou NATS) ou Websocket, que enviam um evento uma vez que o O arquivo é importado e processado com êxito.

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

use isso no cLI para alterar o tempo limite para 5 min

Sai Vamsi
fonte