Выбор ответа Senior Паттерны конкурентности обновлено
Порядок graceful shutdown
Вопрос
Сервис с HTTP-сервером и фоновыми воркерами получает SIGTERM. Какая последовательность правильная?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Shutdown сервера, дождаться запросов, отменить воркеры, закрыть базу. Закрываем в обратном порядке зависимостей: сначала вход (новые запросы), затем дожидаемся выполняющейся работы, потом зависимости, которыми она пользуется.
Варианты ответа
- Закрыть пул базы, чтобы новые запросы падали, затем Shutdown сервера
- Вызвать os.Exit(0) в обработчике сигнала, defer доделают остальное
- Остановить воркеры, затем ждать, пока Kubernetes пришлёт SIGKILL
- Shutdown сервера, дождаться запросов, отменить воркеры, закрыть базуправильный ответ
Разбор
Закрываем в обратном порядке зависимостей: сначала вход (новые запросы), затем дожидаемся выполняющейся работы, потом зависимости, которыми она пользуется. Закрыть базу первой значит сломать запросы в полёте. os.Exit не выполняет defer и обрывает всё. Ждать SIGKILL значит терять запросы. В Kubernetes часто добавляют паузу перед Shutdown, пока эндпоинт исключается из балансировки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.