По порядку Middle Паттерны конкурентности обновлено

Graceful shutdown Go-сервиса по шагам

Вопрос

Расставьте шаги корректной остановки сервиса по порядку.

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

Расставьте шаги по порядку стрелками.

  1. 1
    Отменить контекст фоновых воркеров и дождаться их WaitGroup
  2. 2
    Получить SIGTERM через signal.NotifyContext
  3. 3
    Перестать принимать новые соединения: srv.Shutdown(ctx с таймаутом)
  4. 4
    Дождаться завершения запросов в полёте
  5. 5
    Закрыть пул соединений с базой и сбросить логи
Показать ответ и разбор

Коротко

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

Правильный порядок

  1. 1
    Получить SIGTERM через signal.NotifyContext
  2. 2
    Перестать принимать новые соединения: srv.Shutdown(ctx с таймаутом)
  3. 3
    Дождаться завершения запросов в полёте
  4. 4
    Отменить контекст фоновых воркеров и дождаться их WaitGroup
  5. 5
    Закрыть пул соединений с базой и сбросить логи

Разбор

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

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

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