От телеметрии к виртуальным отказам
Практическая проблема начинается с ручной архитектурной схемы: она полезна для разговора, но устаревает быстрее системы и плохо подходит для регулярного расчёта. В работе Красновского модель обнаруживается автоматически. Jaeger показывает наблюдаемые блокирующие вызовы, deployment-данные — число экземпляров, а профиль нагрузки — вес пользовательских операций. Получается версионируемый граф с provenance, который можно пересобирать после изменения топологии.
Далее Monte Carlo многократно выбирает фиксированную долю отказавших контейнеров и проверяет, сохранился ли обязательный путь для каждого endpoint. Модель считает долю успешных запросов, а живой стенд — запросы без 5xx, разрывов соединения и таймаутов. Семантика ребра критична: необязательный или асинхронный вызов нельзя автоматически считать блокирующим, иначе расчёт отвечает уже на другой вопрос.
Сильный тренд не отменяет границы модели
Эксперимент использует Social Network из DeathStarBench: длинные синхронные цепочки, fan-out и три взвешенных сценария — home timeline, user timeline и compose post. Сравнивались режимы без реплик и с тремя экземплярами пяти ключевых сервисов. При доле отказов 0,3 модель и стенд с репликацией дали 0,3054; по десяти точкам расширенной матрицы корреляция составила около 0,992.
Это хорошая способность ранжировать риск, а не сертификат точной доступности. Базовая модель предполагает бинарный fail-stop, независимые отказы и статическую топологию. Она не видит retries, деградацию по latency, backpressure, общую зону размещения, shared control plane или состояние хранилища. Поэтому при малой доле отказов оценка может быть пессимистичной, а при высокой — оптимистичной: знак ошибки меняют реальные механизмы восстановления и каскады.
Из статьи — в платформенный контур
Следующий эксперимент на OpenTelemetry Demo собирает граф уже из отдельных трасс и добавляет асинхронную Kafka-ветку. Её влияние зависит от SLO: для ответа заказа fraud detection не блокирует успех, но станет обязательным, если результат проверки входит в ожидаемый исход. Этот пример показывает, что полнота телеметрии недостаточна без явной семантики пользовательского сценария и границы измеряемого результата.
В открытом наборе инструментов Procrustes проверяет, достаточно ли артефактов для модели, Bering обнаруживает граф, а Sheaft симулирует сценарии. Расчёт можно поставить release gate с порогом для endpoint или выводить в runtime-панель при изменении топологии. Начинать предлагается не со всей компании, а с одной критичной операции: собрать доступный срез, задать SLO и вероятности по истории, выбрать три риска и один сравнить с fault injection.
Что стоит унести с собой
- 01Графовая симуляция сокращает пространство дорогих chaos-экспериментов, но не доказывает надёжность системы.
- 02Качество расчёта определяется не только полнотой трасс, но и правильной семантикой обязательных, optional и async-зависимостей.
- 03Высокая корреляция показывает верное направление изменения риска, но может скрывать систематическую ошибку абсолютной оценки.
- 04Практический результат модели — приоритизированный backlog проверок с явными допущениями и регулярной калибровкой по живой системе.