По порядку Middle Паттерны конкурентности обновлено
Graceful shutdown Go-сервиса по шагам
Вопрос
Расставьте шаги корректной остановки сервиса по порядку.
Попробуйте сами
Расставьте шаги по порядку стрелками.
- 1Отменить контекст фоновых воркеров и дождаться их WaitGroup
- 2Получить SIGTERM через signal.NotifyContext
- 3Перестать принимать новые соединения: srv.Shutdown(ctx с таймаутом)
- 4Дождаться завершения запросов в полёте
- 5Закрыть пул соединений с базой и сбросить логи
Показать ответ и разбор
Коротко
Сначала закрываем вход, затем даём доработать тому, что уже начато, и только после этого освобождаем ресурсы, которыми эта работа пользуется.
Правильный порядок
- 1Получить SIGTERM через signal.NotifyContext
- 2Перестать принимать новые соединения: srv.Shutdown(ctx с таймаутом)
- 3Дождаться завершения запросов в полёте
- 4Отменить контекст фоновых воркеров и дождаться их WaitGroup
- 5Закрыть пул соединений с базой и сбросить логи
Разбор
Сначала закрываем вход, затем даём доработать тому, что уже начато, и только после этого освобождаем ресурсы, которыми эта работа пользуется.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.