Rain Lag

Нарисованный карандашом атлас отказов: вся ваша надёжность на одном листе

Как превратить трейсы, зависимости и владение сервисами в единый «атлас отказов» для вашей системы — чтобы видеть, где всё ломается, как распространяются сбои и кто должен их исправлять.

Нарисованный карандашом атлас отказов: вся ваша надёжность на одном листе

Есть что‑то по‑настоящему мощное в попытке уместить целый мир на одном листе бумаги.

В 1960‑х годах инженер‑механик Теодор Таллиан опубликовал книгу Failure Atlas for Hertz Contact Machine Elements — плотную, почти вручную прорисованную карту того, как изнашиваются и ломаются подшипники и зубчатые колёса. На одном листе он собрал все способы разрушения контактирующих поверхностей: раковины, трещины, выкрашивание, задирание и многое другое. Это была не просто таблица; это была визуальная теория отказов.

Именно такая идея — сжать сложность в один визуальный «атлас» того, как всё разваливается, — критически нужна современной надёжности программных систем.

В этом посте разберём, как построить «нарисованный карандашом атлас отказов» для вашей системы, используя:

  • динамические графы зависимостей сервисов на основе трейсов OpenTelemetry
  • каталог сервисов как слой владения и контекста
  • историю инцидентов как аннотации разломов

Вместе они превращаются в единый концептуальный лист, на котором видно что существует, как это связано, как это ломается и кто обязан чинить.


Что такое атлас отказов?

У Таллиана атлас отказов — это:

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

Умещая всё на одном листе, Таллиан добивался жёсткой ясности:

  • Нельзя уместить все детали, значит, приходится выделять главное.
  • Начинают проявляться закономерности: «В этом режиме большинство отказов выглядит вот так».
  • Легче отвечать на вопросы: «Если я изменю этот параметр, что сломается первым — и как именно?»

Эту идею можно адаптировать к софту. Вместо поверхностей и напряжений у нас есть:

  • сервисы и их зависимости
  • задержки, пропускная способность, ресурсные ограничения
  • инциденты, ошибки и каскадные отказы

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


От подшипников к микросервисам: зачем нужна одна карта

Современные системы:

  • распределённые
  • полиглотные
  • напичканы сторонними зависимостями
  • постоянно меняются

При этом надёжность мы обычно понимаем фрагментарно:

  • метрики — на одной панели
  • логи — в другом инструменте
  • трейсы — в третьем
  • владение сервисами — в вики (если повезёт)

Каждый видит кусочек системы. Почти никто — всю картину целиком.

Атлас отказов даёт вам один концептуальный лист, на котором можно спросить:

  • Каковы доминирующие режимы отказов в нашей системе сейчас?
  • Как отказы в одном сервисе распространяются на другие?
  • Какие части системы — постоянные виновники инцидентов?
  • Кто на самом деле владеет каждой уязвимой областью?

Этого не даст набор разрозненных дашбордов. Это даёт карта.


Динамический граф зависимостей: живой скелет вашего атласа

В механике Таллиан знал геометрию контактирующих поверхностей. В софте наша «геометрия» — это взаимодействие сервисов друг с другом.

Трейсы OpenTelemetry дают нам как раз это. Инструментируя сервисы и собирая трейсы, вы можете построить динамический граф зависимостей сервисов, который станет живым скелетом вашего атласа отказов.

Что показывает граф зависимостей на основе трейсов

С картами, построенными на OpenTelemetry, вы видите:

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

Так трейсы из набора отдельных спанов превращаются в навигационный ландшафт:

  • Вместо «у сервиса A всплеск 500‑х» вы видите A → B → C, и что на самом деле таймаутит C.
  • Вместо угадываний, какую команду звать, вы видите точно, какая ветка в графе вызовов ломается.

Иными словами, граф зависимостей — это ваш карандашный набросок местности: гор, долин и дорог вашей системы.


Видеть распространение отказов, а не только симптомы

Главная выгода подхода «сначала зависимости» — понимание того, как распространяются отказы.

Представим простой сценарий:

  • Фоновый worker начинает получать таймауты от стороннего биллинг‑провайдера.
  • Это добавляет задержку в биллинговый pipeline.
  • В результате запросы на checkout начинают накапливаться в очереди.
  • Пользователи на фронтенде видят медленные или падающие оплаты.

Если смотреть только на метрики по отдельным сервисам, вы увидите разрозненные симптомы:

  • Frontend: рост времени ответа
  • Checkout API: рост очереди
  • Billing worker: таймауты

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

Frontend → Checkout API → Billing worker → Billing provider

Теперь ваш атлас отказов показывает не только где всё ломается, но и как поломка распространяется.

Это ключевое свойство настоящего атласа: он показывает не просто точки на карте, а сеть маршрутов.


Добавляем владение: каталог сервисов как человеческий слой

Карта дорог полезна. Карта того, кто обслуживает каждую дорогу, — намного мощнее.

Здесь вступает в игру каталог сервисов (например, Catalog от incident.io или любой ваш внутренний реестр). Каталог описывает:

  • что существует (сервисы, джобы, очереди, сторонние системы)
  • кто этим владеет (команды, on‑call‑ротации, домены)
  • как до них достучаться (Slack‑каналы, пути эскалации, ранбуки)

Когда вы связываете граф зависимостей на основе OpenTelemetry с каталогом сервисов, каждый узел графа становится:

  • сервисом с понятным владельцем
  • набором метаданных (критичность, окружение, SLO и др.)
  • точкой входа к действию (пейджинг команды, запуск ранбука)

Ваш атлас отказов перестаёт быть просто красивой картинкой. Он становится операционным артефактом:

  • На графе горит красное ребро? Вы знаете, какие команды звать.
  • Вокруг какого‑то сервиса скапливаются инциденты? Вы видите, что имя команды повторяется снова и снова.

Так каталог превращается в слой владения в атласе отказов.


Фиксируем разломы: история инцидентов как аннотации

Геологические карты показывают не только горы; на них отмечены разломы — места, где земля трескалась многократно.

В вашей системе есть свои разломы:

  • платёжный шлюз, который падал три раза за квартал
  • нестабильный cron‑job, который регулярно задерживает downstream‑процессинг
  • легаси‑монолит, превращающийся в узкое место при каждом пике нагрузки

Если ваш каталог сервисов также хранит:

  • историю инцидентов по каждому сервису
  • частые сопутствующие факторы
  • прошлые меры по устранению причин

…то он по сути превращается в журнал ваших повторяющихся шаблонов отказов.

Наложите это на граф зависимостей — и вы получите нечто очень похожее на атлас Таллиана:

  • сервисы, подсвеченные по частоте инцидентов: чем темнее, тем больше инцидентов
  • рёбра с пометками о прошлых каскадных отказах
  • заметки вроде «Эта зависимость часто отваливается под высокой нагрузкой»

Со временем каталог сервисов эволюционирует в единый источник правды о системной слабости — ваших разломах.


Собираем всё вместе: нарисованный карандашом атлас отказов для софта

Сложив всё вместе, вы получаете:

  1. Граф зависимостей на основе трейсов (OpenTelemetry)
    Живую, динамическую структуру вашей системы.

  2. Каталог сервисов (например, Catalog от incident.io)
    Слой владения и метаданных для каждого узла и ребра.

  3. Историю инцидентов и повторяющиеся шаблоны отказов
    Аннотированные разломы и горячие точки на карте.

Концептуально это можно вообразить как один лист бумаги:

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

Неважно, что реализация живёт в разных тулзах и интерфейсах. Важно, что вы можете:

  • смотреть на систему целиком, а не через набор изолированных дашбордов
  • визуализировать, как возникают и распространяются отказы
  • быстро находить ответственных команд и релевантную историю

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


Как начать строить свой атлас отказов

Чтобы получить пользу, не нужна идеальная реализация. Начать можно с малого:

  1. Проинструментируйте ключевые пути с помощью OpenTelemetry

    • Начните с основной пользовательской journeys (например, signup, checkout).
    • Убедитесь, что вы собираете сквозные трейсы по всем задействованным сервисам.
  2. Постройте базовый граф зависимостей

    • Используйте данные трейсов, чтобы автоматически обнаружить вызовы между сервисами.
    • Визуализируйте этот граф — даже грубая схема лучше, чем ничего.
  3. Поднимите или обогатите каталог сервисов

    • Зарегистрируйте сервисы и свяжите их с командами.
    • Минимум: контакты и пути эскалации.
  4. Привязывайте инциденты к сервисам

    • При каждом инциденте фиксируйте, какие сервисы были вовлечены.
    • Со временем выделяйте «рецидивистов» и повторяющиеся паттерны.
  5. Регулярно пересматривайте атлас

    • Используйте его на разборе инцидентов и при обсуждении архитектуры.
    • Спрашивайте: Где наши разломы? Какие компромиссы мы принимаем?

Цель — не идеальная карта, а достаточно точная общая ментальная модель, которая помогает принимать решения.


Вывод: надёжности нужна карта, а не только метрики

Атлас отказов Таллиана работал потому, что заставлял инженеров смотреть на сложность на одной плоскости. Нельзя было спрятаться за отдельными отчётами — приходилось видеть, как всё взаимосвязано.

С современным софтом то же самое. Логи, метрики и трейсы необходимы, но без объединяющей карты они остаются фрагментами.

Объединив:

  • граф зависимостей на основе OpenTelemetry
  • насыщенный, точный каталог сервисов
  • историю инцидентов и повторяющиеся шаблоны отказов

…вы можете создать свой собственный нарисованный карандашом атлас отказов: единый концептуальный лист, который показывает компоненты, зависимости, владельцев и разломы.

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

Нарисованный карандашом атлас отказов: вся ваша надёжность на одном листе | Rain Lag