Выбор ответа Senior Паттерны конкурентности обновлено

Порядок graceful shutdown

Вопрос

Сервис с HTTP-сервером и фоновыми воркерами получает SIGTERM. Какая последовательность правильная?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Shutdown сервера, дождаться запросов, отменить воркеры, закрыть базу. Закрываем в обратном порядке зависимостей: сначала вход (новые запросы), затем дожидаемся выполняющейся работы, потом зависимости, которыми она пользуется.

Варианты ответа

  1. Закрыть пул базы, чтобы новые запросы падали, затем Shutdown сервера
  2. Вызвать os.Exit(0) в обработчике сигнала, defer доделают остальное
  3. Остановить воркеры, затем ждать, пока Kubernetes пришлёт SIGKILL
  4. Shutdown сервера, дождаться запросов, отменить воркеры, закрыть базуправильный ответ

Разбор

Закрываем в обратном порядке зависимостей: сначала вход (новые запросы), затем дожидаемся выполняющейся работы, потом зависимости, которыми она пользуется. Закрыть базу первой значит сломать запросы в полёте. os.Exit не выполняет defer и обрывает всё. Ждать SIGKILL значит терять запросы. В Kubernetes часто добавляют паузу перед Shutdown, пока эндпоинт исключается из балансировки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.