Рейтинг:1

Как обрабатывать незавершенный запрос при применении непрерывного обновления?

флаг jp

Учитывая набор веб-серверов, подлежащих непрерывному обновлению, например, посредством последовательных обновлений kubernetes, если запрос отправляется одному из таких веб-серверов, ожидающих завершения, за миллисекунды до того, как указанному веб-серверу будет отправлен сигнал SIGTERM,

  1. Должен ли сервер сигнализировать клиенту, что он подвергается SIGTERM, и говорить клиенту «попробовать еще раз», используя другой (или тот же) сетевой адрес (с потенциальной задержкой)?
  2. В противном случае, может ли сервер автоматически перенаправить запрос на другой модуль/экземпляр веб-сервера, который уже был свернут?
  3. В конкретном случае kubernetes можно ли отправить запрос обратно в службу и дать ей знать, что нужно отправить его обратно, как только будет развернут хотя бы один из модулей?
Рейтинг:2
флаг jp

Когда под завершается, у него есть время (по умолчанию 30 секунд) для завершения запроса, когда он получает SIGTERM и прежде чем он получит СИГКИЛЛ. Вы можете настроить более длительные тайм-ауты. А также есть предварительная остановка хук вызывается перед SIGTERM отправляется в pod. Видеть Лучшие практики Kubernetes: изящное завершение работы сообщение в блоге для деталей.

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

Philippe Hebert avatar
флаг jp
Спасибо за ответ, @AlexD! Я знал, что входящая сетевая активность останавливается за `terminationGracePeriodSeconds` секунд до выдачи `SIGTERM`, что по умолчанию составляет `30s`. Это действительно охватывает большинство случаев использования, поскольку очень редко запросы длиннее «30 с». При этом в случае, когда запрос является многословным запросом и не может быть решен за указанное время, какую стратегию вы бы предложили? Вы можете предположить, что запрос ограничен транзакцией / является недемпотентным при раннем возврате.
флаг jp
@PhilippeHebert это действительно зависит. Какова цена отклонения запроса? Какие варианты у нас есть, чтобы повторить этот запрос? Как долго мы можем задерживать запрос и какова стоимость задержки успешного выполнения запроса? Слишком много переменных.
Philippe Hebert avatar
флаг jp
Это очень актуальные вопросы; Я предлагаю вам добавить их как часть вашего ответа вместе с «Является ли запрос идемпотентным?». Для полноты картины, если обработку этих запросов можно разделить на несколько подходов, я бы также предложил описать и эти подходы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.