каковы тайм-ауты kubernetes / elb для запросов http?


9

У меня есть Java-API (принимает запросы HTTPS_, упакованные в образ докера, и затем он развертывается с использованием кластера k8s поверх EC2. У ведущего EC2 есть ELB впереди.

Я могу сделать завитые POST-запросы к ELB, чтобы поразить этот Java-API.

Иногда мой запрос curl всегда ждет ответа, даже когда я вижу логи куба, обработка была успешной.

Это происходит для больших запросов около 40 минут, запросы от 25 минут получают ответ нормально.

Как вы думаете, где может быть тайм-аут? какие-либо конкретные параметры конфигурации я должен смотреть?

клиент (curl) -> ELB -> k8s -> модуль с изображением Java API

я думал, что это будет уместно (я не устанавливаю IdleTimeout) для ELB, но в документах говорится, что по умолчанию установлено значение 60 с, хотя я могу получить ответ на 20-минутные запросы "ConnectionSettings": {"IdleTimeout"}


"большие запросы около 40 минут", что вы подразумеваете под этим?
Аргья Садху

то есть, загружая большой файл, api требуется 40 минут, чтобы «проглотить» его с помощью процесса ETL, а затем отправить ответ обратно
tooptoop4

Мне интересно, почему у вас есть LB перед мастером (вы имеете в виду api-сервер?), И как вы можете достичь того, чтобы ваш API достиг этого LB.
конечно

Ответы:


1

Как упомянул Пампи в своем ответе, время ожидания ELB учитывает только время простоя. Это может быть в диапазоне от 1 до 4000 секунд и по умолчанию установлено на 60 секунд. Вы можете изменить время ожидания, используя CLI или консоль.

Ниже приведен пример использования CLI для изменения его на 5 минут:

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

Источник: документы

Поскольку вы загружаете большие файлы за 20-40 минут, я все же рекомендую другие предложения по использованию брокера сообщений, такого как RabbitM или Kafka, для асинхронной загрузки и обработки.


0

Тайм-аут ELB учитывается только для времени простоя . Это означает, что пока ваша загрузка все еще выполняется, она не бездействует. Когда файл поступил на ваш сервер, вам нужно измерить время до ответа вашего сервера.

Если все получилось правильно, сервер обработает запрос и впоследствии вернет ответ клиенту. При тайм-ауте по умолчанию 60 секунд у вашего сервера есть эти 60 секунд для обработки загруженного файла и возврата ответа.

Может быть, вашему серверу требуется менее 60 секунд, чтобы обработать загрузку за 25 минут, но больше, чтобы обработать загрузку за 40 минут?


откуда 60 секунд? я не использую IdleTimeout по умолчанию на ELB
tooptoop4

60 секунд - это время ожидания по умолчанию для ELB. Вы не можете «не использовать» его. Вы можете изменить его, чтобы оно составляло от 1 секунды до 60 минут, но нет никакого способа сказать ELB вообще не прерывать соединение.
Пампи

0

Почему бы вам не загрузить файл и не отправить событие в брокер сообщений, как rabbitMQ. Выполните ETL для файлов, используя объект kubernetes Job / CronJob асинхронно и соответственно уведомите клиента.

Таким образом, вам не нужно блокировать входящий запрос на более длительное время. отправьте сообщение после публикации события, отправьте клиенту сообщение о том, что запрос обрабатывается.


я все еще хочу найти, где время ожидания
tooptoop4

0

25 минут довольно долго для HTTP-запроса. Я вполне согласен с P Ekambaram.

Я думаю, что может быть лучше сделать конечную точку асинхронной и ответить, как только файл будет загружен (должен быть быстрее), в то же время, использовать обмен сообщениями промежуточного программного обеспечения (RabbitMQ, Kafka или NATS) или Websocket, которые выдвигают событие, как только Файл успешно импортирован и обработан.


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

используйте это в CLI, чтобы изменить время ожидания до 5 минут

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.