Современные backend-системы редко живут в изоляции. Микросервисы, внешние API, системы очередей, базы данных — эти компоненты постоянно взаимодействуют через сеть, создавая каскадные зависимости. Идеально спроектированная генетика отказов невозможна. Реальная устойчивость достигается планированием разрушений и управлением фиаско.
Анатомия распределенного коллапса
Рассмотрим классический сценарий: Сервис А
вызывает Сервис Б
, который зависит от Сервиса В
. Ниже диаграмма взаимодействий:
UI -> [Сервис А] -> [Сервис Б] -> [Сервис В]
Откажем Сервис В
. Без стратегий обработки:
Сервис Б
обращается кВ
, получает таймаут/ошибку- Обработчики в
Б
блокируют потоки, ожидая ответа - Пул потоков исчерпывается
- Запросы к
Сервису Б
начинают падать Сервис А
ретраит неудачные вызовы кБ
- Цепь вызовов лавинообразно рушится
Исследование Google показывает: 40% отказов каскадируются из-за неправильных реакций на сбои зависимостей.