> Как принимается решение, кому звонить при проблемах в нерабочее время (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Wildberries

Стек: Go

> Пример ответа

Решение о том, кому звонить при проблемах в нерабочее время, принимается на основе заранее установленной схемы эскалации и ротации дежурных. В Go-проектах это часто автоматизировано через интеграцию с PagerDuty, Opsgenie или собственными инструментами.

  1. Ротация дежурных: Определяется расписание (например, неделя через неделю), которое хранится в конфиге или базе данных. Каждый разработчик из команды поддержки имеет assigned shift.
  2. Приоритет инцидента: Критичность проблемы (P0, P1) определяет, кому звонить - сначала L1 (дежурный разработчик), затем L2 (тимлид или архитектор), и так до CTO.
  3. Автоматизация: В Go-микросервисах часто используется middleware для мониторинга ошибок (например, Prometheus + Alertmanager). При превышении порога (latency > 500ms, error rate > 1%) Alertmanager отправляет алерт в PagerDuty, который звонит текущему дежурному.
  4. Fallback: Если дежурный не отвечает в течение 5-10 минут, система эскалирует следующему по списку (например, через escalation policy в PagerDuty).
  5. Документация: В репозитории проекта (обычно в docs/oncall.md) хранятся контакты и порядок действий. Например:
    • Проверить дашборды Grafana.
    • Посмотреть логи в Kibana.
    • Если проблема в коде - создать hotfix и PR с тегами #urgent.

Пример кода для уведомления в Go:

GO
func notifyOnCall(incident Incident) {
onCall := getCurrentOnCall() // из PagerDuty API
sendAlert(incident, onCall.Phone)
if !acknowledged(incident, 5*time.Minute) {
escalate(incident, onCall.Escalation)
}
}

Таким образом, решение принимается автоматически на основе ротации и приоритета, минимизируя человеческий фактор.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью