Ночь с пятницы на понедельник: как не утонуть в крупном инциденте

Привет, %username%! Статья от Яндекса — отличный разбор того, как один региональный сбой в облаке превратился в «слоёный пирог» из нескольких ошибок и усилителей проблемы, а потом — в программу системных изменений.

Главная мысль: крупные аварии почти никогда не про одну причину, это всегда стечение нескольких дыр в слоях защиты (модель «швейцарского сыра»). В их случае инцидент сложился из нескольких уровней: падение контроллера, миграции ВМ, баг в приоритизации маршрутов, отсутствие back pressure, не везде реализованный fail-safe, слабая static stability — каждый по отдельности терпим, вместе дают региональную боль.

Что они сделали дальше, что полезно утащить к себе:

  • Перешли от «починим конкретный инцидент» к работе со слоями защиты: где можно добавить минимальные изменения, которые закрывают максимум дыр сразу.
  • Ввели явное разделение метрик на lagging (SLA, реальная «боль» клиентов) и leading (минуты деградации, % затронутых пользователей, минуты×выручка и т.п.), построили дерево метрик и ранжировали, что реально снижает боль, а не просто красиво выглядит в архитектурной диаграмме.
  • Осознали асимметрии: лучше сократить длительность и охват инцидентов (особенно >10% пользователей), чем бесконечно пытаться «никогда не падать»; восстановление системы часто важнее предотвращения всех возможных сбоев.

Из конкретных ставок, которые, на мой взгляд, стоит примерять каждому, у кого есть хоть какая-то сложная инфраструктура:

  • Headless / Fail-Safe: Data Plane должен продолжать работать даже при падении Control Plane, иначе любой сбой управления превращается в трафик-апокалипсис.
  • Zonal Shift: «царь‑рубильник» для зоны, чтобы быстро снять трафик с проблемной зоны и моментально уменьшить blast radius вместо многочасовых «точечных» танцев.
  • Ограничение очередей и борьба с амплификаторами: рост очередей при инциденте должен жёстко резаться, иначе получаешь 2–3 часа восстановления вместо десятка минут.
  • Maturity model релизов: явная шкала, где релизам присваивается уровень по возможным последствиям (от падения сервиса до незаметных внутренних деградаций) и времени до проявления эффекта — так можно уйти от вечного фриза к управляемым релизам.
  • Пакет «десяток безопасных улучшений»: более требовательный incident management, безопасные ретраи, ручка остановки миграций, срезание лишних маршрутов, ускорение config plane и прочие маленькие штуки, которые суммарно дают большую прибавку к устойчивости.

И ещё один важный слой — человеческий: за ночными релизами, разруливанием инцидента и коммуникацией с клиентами стоят живые люди, и если команда выжата, то никакая архитектура не спасёт.

Мне любопытно:

  • Как у тебя сейчас устроена работа со слоями защиты — вы больше про «чиним конкретный баг» или уже мыслите слоями и blast radius?
  • Есть ли у тебя свой «zonal shift»/«царь‑рубильник» — что им является в твоей инфраструктуре?
  • На что в твоей системе сейчас сильнее сделан упор: на предотвращение или на быстрое восстановление? Почему так сложилось?
  • Пробовал ли строить дерево lagging/leading‑метрик для инцидентов или пока живёшь в мире SLA/SLO и MTTR?

Поделись в комментариях своими историями крупных аварий и тем, какие «слои сыра» внезапно совпали. Что после этого вы поменяли — архитектуру, процессы, метрики, культуру?

#DevOps #SRE #Postmortem #Incidents #Habr #BlastRadius #MaturityModel