каковы тайм-ауты kubernetes / elb для запросов http? - PullRequest
9 голосов
/ 10 января 2020

У меня есть java API (принимает HTTPS-запросы_, упакованные в образ docker, и затем он развертывается с использованием кластера k8s поверх EC2. Главный EC2 имеет ELB впереди.

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

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

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

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

client (curl) -> ELB -> k8s -> pod, запускающий java api-изображение

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

Ответы [ 5 ]

1 голос
/ 03 февраля 2020

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

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

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

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

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

0 голосов
/ 05 февраля 2020
 aws elb modify-load-balancer-attributes --load-balancer-name my-loadbalancer --load-balancer-attributes "{\"ConnectionSettings\":{\"IdleTimeout\":300}}"

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

0 голосов
/ 20 января 2020

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

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

0 голосов
/ 22 января 2020

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

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

0 голосов
/ 17 января 2020

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

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

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

...