У меня есть 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"}
источник
Ответы:
Как упомянул Пампи в своем ответе, время ожидания ELB учитывает только время простоя. Это может быть в диапазоне от 1 до 4000 секунд и по умолчанию установлено на 60 секунд. Вы можете изменить время ожидания, используя CLI или консоль.
Ниже приведен пример использования CLI для изменения его на 5 минут:
Источник: документы
Поскольку вы загружаете большие файлы за 20-40 минут, я все же рекомендую другие предложения по использованию брокера сообщений, такого как RabbitM или Kafka, для асинхронной загрузки и обработки.
источник
Тайм-аут ELB учитывается только для времени простоя . Это означает, что пока ваша загрузка все еще выполняется, она не бездействует. Когда файл поступил на ваш сервер, вам нужно измерить время до ответа вашего сервера.
Если все получилось правильно, сервер обработает запрос и впоследствии вернет ответ клиенту. При тайм-ауте по умолчанию 60 секунд у вашего сервера есть эти 60 секунд для обработки загруженного файла и возврата ответа.
Может быть, вашему серверу требуется менее 60 секунд, чтобы обработать загрузку за 25 минут, но больше, чтобы обработать загрузку за 40 минут?
источник
Почему бы вам не загрузить файл и не отправить событие в брокер сообщений, как rabbitMQ. Выполните ETL для файлов, используя объект kubernetes Job / CronJob асинхронно и соответственно уведомите клиента.
Таким образом, вам не нужно блокировать входящий запрос на более длительное время. отправьте сообщение после публикации события, отправьте клиенту сообщение о том, что запрос обрабатывается.
источник
25 минут довольно долго для HTTP-запроса. Я вполне согласен с P Ekambaram.
Я думаю, что может быть лучше сделать конечную точку асинхронной и ответить, как только файл будет загружен (должен быть быстрее), в то же время, использовать обмен сообщениями промежуточного программного обеспечения (RabbitMQ, Kafka или NATS) или Websocket, которые выдвигают событие, как только Файл успешно импортирован и обработан.
источник
используйте это в CLI, чтобы изменить время ожидания до 5 минут
источник