Rain Lag

Чертёж аналогового «инцидент‑диспетчерского депо»: как построить настольную железную дорогу для ручного разбора сложных аварий

Как использовать настольное «историйное депо» (story trainyard), чтобы моделировать сложные аварии, тренировать реагирование на инциденты и развивать интуицию о распределённых системах — без клавиатуры и экрана.

Чертёж аналогового «инцидент‑диспетчерского депо»: как построить настольную железную дорогу для ручного разбора сложных аварий

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

Цифровые инструменты помогают, но их недостаточно. Дашборды, распределённый tracing и model checking не заменяют команды, которые понимают, как распространяются отказы и как вместе разматывать хаос.

Здесь пригодится аналоговое «историйное депо инцидентов» (incident story trainyard) — настольное упражнение, которое превращает сложные аварии в физические сториборды с путями, поездами и сигналами, которые можно двигать руками. Это удивительно мощный способ репетировать инциденты, шлифовать runbook’и и вырабатывать общее «чутьё», которое делает реальные кризисы менее пугающими.

Этот пост — чертёж (blueprint), по которому вы сможете построить и запустить собственное «историйное депо».


Зачем уходить в аналог при разборе сложных аварий?

Когда система ведёт себя максимально непонятно, экраны легко превращаются в шум. Аналоговое настольное упражнение даёт другое качество:

  • Оно слегка замедляет мышление, чтобы вы заметили связи, которые на экране легко упустить.
  • Оно заставляет всех смотреть на одну и ту же модель — одновременно и в одном помещении.
  • Оно снижает ставки, и людям проще экспериментировать, задавать вопросы и подсвечивать пробелы.

Вместо того чтобы уткнуться в логи, вы смотрите на физическую модель инцидента: карточки, линии, жетоны и стикеры, которые представляют сервисы, события и сигналы. Вы двигаете их, ветвите линии времени и исследуете альтернативные ходы событий в стиле «книга‑игра».

Это не ностальгия. Это практичный и дешёвый способ:

  • Репетировать реагирование на инциденты и передачу дежурств.
  • Тестировать и улучшать runbook’и до того, как они реально понадобятся.
  • Находить пробелы в коммуникации и принятии решений.
  • Строить общие ментальные модели того, как ваши распределённые системы на самом деле себя ведут.

Базовая идея: метафора «историйного депо» (Story Trainyard)

Представьте, что ваша система — это железнодорожное депо/узел:

  • Пути (tracks) = пути выполнения и зависимости между компонентами.
  • Поезда (trains) = запросы, джобы или сообщения, идущие через систему.
  • Стрелки (switches) = решения маршрутизации, feature flags, ретраи и логика failover’а.
  • Сигналы (signals) = алерты, логи, метрики и health‑чеки.

Нарратив аварии превращается в железнодорожную историю:

  1. Отправляется «поезд» (стартует пользовательский запрос или batch‑джоба).
  2. Он проходит через разные «станции» (API, очереди, базы данных, сторонние сервисы).
  3. Какая‑то «стрелка» сконфигурирована неправильно, задерживается или перегружена.
  4. Поезда накапливаются, уводятся не туда или встают.
  5. Срабатывают сигналы (или не срабатывают), и операторы реагируют.

История разворачивается по нескольким путям параллельно — как и реальные распределённые инциденты. Относясь к этому как к ветвящемуся повествованию, можно исследовать сценарии «что если?»:

  • Что, если бы политика ретраев была другой?
  • Что, если бы алерт сработал на 5 минут раньше — или не сработал вообще?
  • Что, если бы инцидент вёл другой инженер?

В итоге получается насыщенная визуальная модель причинно‑следственных связей, которой может манипулировать и которую понимает вся команда.


Как собрать своё настольное «депо»

Не нужны дорогие реквизиты. Начните с простого и постепенно улучшайте.

Материалы

  • Большая доска или листы ватмана/флипчарт
  • Стикеры разных цветов
  • Карточки (index cards)
  • Шпагат или малярный скотч (для путей)
  • Жетоны (монеты, meeple’ы или любые мелкие предметы) для поездов и сигналов
  • Маркеры минимум трёх цветов

Базовая легенда (настройте под свою команду)

  • Синие стикеры: сервисы / компоненты
  • Зелёные стикеры: внешние зависимости (платёжки, auth‑провайдер и т.п.)
  • Красные стикеры: отказы и ошибочные состояния
  • Жёлтые стикеры: действия людей (деплои, изменения конфигов, шаги runbook’а)
  • Шпагат/скотч: пути выполнения / зависимости
  • Жетоны: отдельные запросы, джобы или сообщения
  • Маленькие флажки или точки: алерты или ключевые сигналы

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


Пошагово: как провести упражнение «историйное депо»

1. Выберите сценарий

Подойдёт одно из трёх:

  • Реальный инцидент, который вы хотите детально разобрать.
  • Правдоподобный худший случай (например, «Разделение (partition) основного региона + частичная авария стороннего сервиса»).
  • What‑if‑вариант уже известного инцидента (например, «Та же баг, но в пиковый трафик»).

Сформулируйте начальные условия и наблюдаемые симптомы так, будто вы только что получили пейджинг:

«Сейчас 02:13. Пейдж: ‘Уровень ошибок checkout > 10% уже 5 минут в регионе us‑east‑1’. По графикам latency всё нормально. Что происходит дальше?»

2. Разложите пути (топология системы)

Нарисуйте или выложите ленту‑пути, отражающие основные потоки данных:

  • Ingress → API gateway → core‑сервисы → базы данных
  • Асинхронные воркеры и очереди
  • Интеграции со сторонними сервисами

Разместите карточки‑компоненты (стикеры) вдоль этих путей. Добавьте стрелки, показывающие направление потока и зависимости.

Это ваша графическая модель системы — аналог Oddity или ShiVis, сфокусированный на параллельных путях выполнения и точках их пересечения.

3. Поставьте поезда на пути (запросы и джобы)

Разложите жетоны в точках входа:

  • Несколько жетонов для типичных пользовательских запросов.
  • Пару жетонов, представляющих фоновые джобы или расписанные задачи.

Теперь пошагово проигрывайте время:

  • Передвигайте каждый жетон по путям, по мере того как он проходит компоненты.
  • На каждом компоненте отмечайте, какие сигналы вы бы видели: логи, метрики, трейсинг, алерты.
  • Фиксируйте любое ветвление: ретраи, таймауты, fallbacks, разные шарды/регионы.

Вы строите таймлайн в пространстве: множество поездов движутся параллельно, а текущий момент как бы «сдвигается» слева направо.

4. Введите события отказа

Теперь добавьте красные карточки — точки отказа:

  • Реплика базы начинает лагать или зависает.
  • Сторонний API становится медленным или нестабильным.
  • Конфигурационный пуш меняет логику маршрутизации.

Для каждого отказа спрашивайте:

  1. Где в графе он происходит?
  2. Какие поезда затрагивает первыми?
  3. Какие сигналы (алерты, логи, метрики) срабатывают — и где?
  4. Какие сигналы должны были сработать, но не сработали?

Здесь особенно помогает визуальная схема: можно буквально указать пальцем на отказ и проследить несколько downstream‑путей.

5. Проиграйте человеческую историю

Переключитесь на жёлтые стикеры для действий людей:

  • Кого и когда запейджили?
  • Какой запрос, дашборд или runbook открыли первым?
  • Какие были ключевые решения и промахи?

Клейте эти стикеры над путями, примерно в тех местах, где по времени происходят события. Теперь у вас две «слоистые» истории:

  • Системная история на путях: запросы, компоненты, отказы.
  • Человеческая история сверху: алерты, решения, эскалации, коммуникация.

Поощряйте устный рассказ:

«В этот момент я решил, что виновата база, потому что…»

Эти рассказы раскрывают ментальные модели — и то, где они расходятся между людьми.

6. Разветвите таймлайн (what‑if‑сценарии)

Когда вы восстановили фактический ход инцидента, создайте стрелки‑разветвления:

  • Нарисуйте альтернативные пути для других решений: «Что если бы мы здесь откатились, а не наращивали capacity?»
  • Исследуйте другие конфигурации: «Что если бы ретраи были ограничены 2 вместо 5?»
  • Смоделируйте недостающие алерты: «Что если бы SLO burn‑алерт сработал на 10 минут раньше?»

По сути вы делаете контрфактический анализ в «3D‑пространстве»:

  • Продублируйте часть жетонов и отправьте их по разным веткам.
  • Сравните downstream‑эффект: какая ветка восстанавливается быстрее? Какая раньше выдаёт сигналы о проблеме?

Так инженеры учатся мыслить ветвящейся причинностью, а не одной линейной историей.


Как это соотносится с практиками SRE

«Историйные депо» очень хорошо ложатся на принципы Site Reliability Engineering:

  • Готовность к дежурствам: и новые, и опытные инженеры могут репетировать инциденты в безопасной обстановке.
  • Валидация runbook’ов: можно буквально пройтись по runbook’у шаг за шагом и увидеть, где он расплывчатый, устаревший или вводит в заблуждение.
  • Общее понимание: все видят одну и ту же карту зависимостей и могут тут же спорить и уточнять, исправляя заблуждения.
  • Безоценочное обучение: так как упражнение специально обрамлено как история — поезда, пути, стрелки — о решениях говорить проще, не переходя на личности.

Вы не заменяете дашборды или автоматизированные incident‑инструменты. Вы дополняете их практикой, которая развивает:

  • Более глубокую интуицию о редких и сложных отказах.
  • Способность рассуждать о поведении распределённых систем под стрессом.
  • Более крепкие командные паттерны коммуникации в разгар аварии.

Как это дополняет автоматические инструменты и model checkers

Автоматические инструменты — model checkers, chaos‑эксперименты, системы трассировки — особенно сильны в:

  • Переборе больших пространств состояний.
  • Выявлении инвариантов и нарушений.
  • Предоставлении высокоточной телеметрии.

Аналоговые «историйные депо» сильны в другом:

  • Делают сложные системы понятными человеку с одного взгляда.
  • Стимулируют команды проговаривать ментальные модели и стратегии.
  • Позволяют кросс‑функциональному участию (разработка, SRE, продукт, поддержка) в разборе того, как разворачиваются инциденты.

Вместе вы получаете:

  • Сценарии, управляемые моделями: результаты формальных инструментов вдохновляют настольные сценарии.
  • Уточнение гипотез: аналоговое упражнение генерирует гипотезы, которые затем можно проверить в коде или на стенде.
  • Обратную связь в дизайн: вы замечаете, где не хватает наблюдаемости или control plane, и возвращаете это в дизайн системы.

Практические советы, чтобы практика прижилась

  • Ограничивайте по времени: 60–90 минут обычно хватает для одного насыщенного сценария.
  • Ротируйте фасилитаторов: не превращайте это в чисто SRE‑ритуал — вовлекайте feature‑команды.
  • Фиксируйте доску: делайте фото, а потом кратко суммируйте выводы во внутренней документации или системе post‑mortem’ов.
  • Привязывайте к реальным улучшениям: завершайте каждую сессию 3–5 конкретными действиями (изменения алертов, апдейты runbook’ов, дизайн‑предложения).
  • Начинайте с малого: возьмите один пользовательский flow и один тип отказа; усложняйте постепенно.

Заключение: выращиваем лучших «рассказчиков инцидентов»

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

Настольное «историйное депо» даёт вашей команде способ:

  • Практиковаться в разборе сложных аварий вручную.
  • Видеть, как сигналы, компоненты и люди сцепляются друг с другом.
  • Безопасно исследовать альтернативные таймлайны и ветки «что если».

Вам не нужно согласование бюджета, новый вендор или масштабная процессная реформа. Нужна комната, маркеры и готовность относиться к авариям как к историям, по которым можно пройтись вместе.

Постройте своё первое «депо», проведите один сценарий и посмотрите, что узнаете. Скорее всего, вы обнаружите, что самый мощный incident‑инструмент, который вы добавите в этом квартале, — это просто доска и горсть жетонов.

Чертёж аналогового «инцидент‑диспетчерского депо»: как построить настольную железную дорогу для ручного разбора сложных аварий | Rain Lag