Когда нужна отказоустойчивость: критерии и уровни требований
В прошлых статьях курса мы:
определили, что такое отказоустойчивость и какими метриками её измеряют (доступность, MTTR, SLI/SLO/SLA, RTO/RPO);
отделили отказоустойчивость от масштабирования и катастрофоустойчивости (DR).Теперь — самый важный для выступления вопрос: когда отказоустойчивость действительно нужна и какой “уровень” делать, чтобы не переплатить за лишние механизмы и при этом не потерять деньги/репутацию из-за простоев.
Что значит “нужна отказоустойчивость”
На практике это означает, что бизнес и команда готовы:
зафиксировать измеримые цели (например, SLO по успешности ключевой операции и целевой MTTR);
инвестировать в архитектуру и процессы, которые позволяют переживать отказы предсказуемо;
принять рост сложности и стоимости владения.Важно: отказоустойчивость — это не бинарный выбор “делаем/не делаем”, а спектр решений. Правильный вопрос: какой уровень устойчивости нужен для конкретных пользовательских сценариев.
Критерии: когда отказоустойчивость окупается
Ниже — критерии, которые удобно использовать в презентации. Они помогают перевести разговор из “давайте 99,99%” в “какие риски и деньги за этим стоят”.
Стоимость простоя и деградации
Отказоустойчивость почти всегда оправдана, если простой или сильная деградация быстро превращаются в измеримый ущерб.
Типовые источники ущерба:
недополученная выручка (e-commerce, билеты, доставка);
прямые потери денег из-за сбоев транзакций (платежи, ставки, финтех);
штрафы по контрактам (B2B, интеграции, SLA);
рост затрат на поддержку (всплеск обращений, ручная обработка);
репутационный ущерб и отток пользователей.Практический приём для требований: считать не только полный даунтайм, но и частичную деградацию (например, “поиск работает, но оформление заказа нестабильно”).
Наличие “критичных пользовательских путей”
Если у продукта есть 1–3 сценария, которые обязаны быть доступны (например, вход, платеж, создание заказа), отказоустойчивость проектируют вокруг них.
Здесь полезна связка из прошлой статьи:
SLI/ SLO — для качества ключевых операций;
MTTR — для скорости возвращения сервиса в норму.Требования регуляторов и безопасности
Отказоустойчивость часто становится обязательной из-за внешних требований:
финансовый сектор, персональные данные, медицина;
внутренние требования по непрерывности бизнеса;
повышенные требования к целостности данных.Почти всегда это приводит к обсуждению:
журналирования и аудита;
контроля изменений;
RPO (допустимая потеря данных), даже если формально речь не про DR.Режим работы 24/7 и распределённая аудитория
Если пользователи в разных часовых поясах или сервис работает круглосуточно, “починим ночью” перестаёт быть стратегией.
В таких системах особенно важно снижать:
время обнаружения (MTTD) и эскалации;
время восстановления (MTTR);
долю ручных операций при фейловере.Сложность системы и риск каскадных отказов
Чем больше зависимостей (внутренних микросервисов, внешних API, брокеров, БД, кешей), тем чаще локальный сбой превращается в каскад.
Признаки, что отказоустойчивость нужна как системная практика:
один сбой регулярно “роняет” несколько сервисов;
нет чётких границ отказа (fault domains) и ограничения “радиуса поражения”;
повторные инциденты похожи друг на друга (не устраняются причины).“Человек как источник отказа” и частые изменения
Если вы часто релизитесь, то существенная доля инцидентов — это изменения (конфиги, миграции, выкладки).
В таких командах отказоустойчивость оправдана, когда есть:
регулярные релизы и высокая цена отката;
сложные миграции данных;
несколько команд, меняющих общую платформу.Смещение акцента: устойчивость к ошибкам изменений (постепенные выкладки, быстрый rollback, feature flags) иногда даёт больше эффекта, чем “ещё одна реплика”.
Как сформулировать требования: от вопросов к метрикам
Для выступления удобно показать, что требования рождаются не из технологий, а из вопросов.
Ниже — минимальный набор вопросов, который переводится в метрики из первой статьи:
Какие пользовательские действия критичны?
Что считаем “недоступностью” для этих действий? (ошибка, таймаут, p95 задержка выше порога, недоступность части функций)
Какой SLO нужен для критичных действий?
Как быстро нужно восстанавливаться? (целевой MTTR)
Сколько данных можно потерять? (RPO)
Как быстро обязаны подняться после крупного сбоя? (RTO)!Как требования превращаются в метрики, а метрики — в архитектурный уровень
Полезные ориентиры по подходу к SLO и балансу изменений:
Google SRE Book: Service Level ObjectivesУровни требований: практическая шкала (tiers)
Ниже — удобная шкала “уровней”, которую можно прямо перенести на слайды. Она намеренно не привязана к конкретному облаку или стеку.
Важно: уровни можно задавать для системы в целом или для отдельных критичных операций.
Tier 0: базовая надёжность (без отказоустойчивости как свойства)
Когда подходит: MVP, внутренние инструменты, прототипы, низкая стоимость простоя.
Типовые требования:
SLO не формализован или низкий;
восстановление в рабочее время;
RPO — “есть бэкапы”, без регулярной проверки.Типовые механизмы:
мониторинг базовых метрик;
резервные копии;
ручные процедуры восстановления.Цена выбора: низкая инфраструктурная стоимость, но высокий риск долгих простоев и непредсказуемого восстановления.
Tier 1: отказоустойчивость stateless-слоя (приложение переживает падение экземпляра)
Когда подходит: первые публичные версии, сервисы без жёстких требований к данным, когда основной риск — падение приложений.
Типовые требования:
SLO на ключевой API/страницы;
целевой MTTR на уровне минут-десятков минут при отказе одного узла.Типовые механизмы:
несколько экземпляров приложения за балансировщиком;
health-check и автоматическое исключение “больных” узлов;
отсутствие состояния на узле (stateless), чтобы перезапуск был безопасен.Ключевая оговорка: если база данных одна и без фейловера, то вы устойчивы лишь к отказу приложений.
Tier 2: отказоустойчивость внутри одной “границы отказа” (одна зона/одна площадка)
Когда подходит: B2B/B2C системы, где простой ощутим, но потеря целой зоны/дата-центра считается редкой и принимаемой.
Типовые требования:
более высокий SLO на критичные операции;
предсказуемый MTTR при отказах отдельных компонентов;
снижение числа ручных действий при инциденте.Типовые механизмы:
резервирование критичных компонентов (балансировщики, очереди, кеши);
реплика БД для чтения и/или фейловер в пределах площадки (если поддерживается);
контроль зависимостей: таймауты, ограниченные ретраи, circuit breaker.Риск, который остаётся: “потеря площадки/зоны” всё ещё выводит сервис из строя.
Tier 3: multi-AZ (переживаем потерю зоны доступности)
Когда подходит: сервисы 24/7 с высокой ценой простоя; продукты, где отказ зоны — не катастрофа, а расчётный сценарий.
Типовые требования:
SLO на критичные операции с учётом отказа зоны;
MTTR сокращается за счёт автоматического переключения;
RPO малый или близкий к нулю для транзакционных данных (зависит от репликации).Типовые механизмы:
разнесение приложений и зависимостей по зонам;
автоматическое переключение трафика между зонами;
репликация данных между зонами.Компромисс: возрастает стоимость (дублирование ресурсов) и сложность данных (согласованность, задержки, стратегии записи).
Tier 4: DR (переживаем потерю региона по RTO/RPO)
Когда подходит: критичные сервисы, где неприемлем простой на часы из-за региональной аварии, или требуется формальный план восстановления.
Типовые требования:
RTO: “за сколько поднимемся в другом регионе”;
RPO: “сколько данных можем потерять”;
регулярные учения восстановления.Типовые механизмы:
второй регион (warm standby или hot standby);
репликация данных между регионами и/или проверенные бэкапы;
runbook и автоматизация процедур.Важная связь с предыдущей статьёй: это уже зона катастрофоустойчивости, но многие команды приходят к ней через повышение требований к отказоустойчивости.
Tier 5: active-active (высокая непрерывность даже при региональных проблемах)
Когда подходит: очень высокая цена простоя, глобальные сервисы, жёсткие требования к непрерывности.
Типовые требования:
минимальный RTO (часто близкий к “почти мгновенно”);
SLO должен учитывать сложные частичные деградации;
строгие требования к операционной готовности.Типовые механизмы:
обслуживание трафика из нескольких регионов одновременно;
глобальная балансировка;
сложные стратегии согласованности данных (часто с компромиссами по консистентности или функциональности).Цена выбора: максимальная сложность (данные, эксплуатация, тестирование), а также значительные постоянные инфраструктурные затраты.
Таблица для слайда: уровни, риски, механизмы, затраты
| Уровень | Какие отказы переживаем | Типовые метрики в фокусе | Примеры механизмов | Типовые затраты |
|---|---|---|---|---|
| Tier 0 | почти никакие (восстановление вручную) | минимальные SLI, время реакции команды | бэкапы, базовый мониторинг | низкие, но высокий риск долгого простоя |
| Tier 1 | падение инстанса приложения | SLO ключевых API, MTTR | несколько инстансов, health-check, stateless | умеренные, растёт сложность деплоя |
| Tier 2 | отказ отдельных компонентов в одной площадке | SLO, MTTR, частота инцидентов | резервирование, фейловер внутри площадки, circuit breaker | выше: больше компонентов и поддержки |
| Tier 3 | потеря зоны (AZ) | SLO с учётом AZ-failure, MTTR, иногда RPO | multi-AZ, репликация между зонами, авто-переключение | заметные: дублирование и сложность данных |
| Tier 4 | потеря региона (по плану DR) | RTO, RPO, готовность процедур | второй регион, репликация/бэкапы, runbook, тренировки | высокие: инфраструктура + регулярные учения |
| Tier 5 | региональные проблемы без остановки сервиса | SLO глобального сервиса, минимальный RTO | active-active, глобальная балансировка, сложная модель данных | максимальные: сложность и стоимость |
Как выбрать уровень: практический алгоритм
Этот алгоритм можно использовать как “скелет” для устной части выступления.
Определите критичные пользовательские пути.
Зафиксируйте для них SLI и SLO (что меряем и какую цель хотим).
Определите целевой MTTR для типовых отказов (узел, процесс, зависимость).
Если есть требования к данным, зафиксируйте RPO.
Определите, нужен ли сценарий потери зоны (Tier 3) и/или региона (Tier 4–5), то есть требуются ли RTO/RPO на “крупные” события.
Постройте архитектурную схему под метрики, а не наоборот.
Запланируйте в бюджете не только инфраструктуру, но и эксплуатацию и тестирование (дежурства, алёртинг, тренировки).!Дерево выбора уровня отказоустойчивости по требованиям
Ресурсные затраты: что именно дорожает
В первой статье мы уже перечисляли статьи затрат. Здесь — как их “привязать” к уровням.
Дорожает не только железо:
инфраструктура (дублирование, межзоновые/межрегиональные ресурсы);
разработка (идемпотентность, корректные ретраи, конкуренция за данные, миграции);
эксплуатация (on-call, алёртинг, runbook, постмортемы);
тестирование (стенды, фолт-инъекции, game days).Хорошая формулировка для презентации: каждая дополнительная “девятка” доступности обычно стоит непропорционально дороже, потому что требует закрывать всё более редкие и сложные сценарии.
Как общий ориентир по системному подходу к надёжности можно ссылаться на:
AWS Well-Architected Framework: Reliability PillarПримеры “типов заказчиков” и характерные уровни
Важно: вместо конкретных компаний в выступлении часто достаточно показать классы заказчиков и их типичный выбор уровней.
Интернет-магазин среднего размера
критичный путь: каталог → корзина → оплата;
типичный уровень: Tier 2–3;
акцент: SLO на оплату и создание заказа, быстрый MTTR.Архитектурный силуэт:
несколько экземпляров приложения;
БД с репликацией и автоматическим переключением в пределах зоны/нескольких зон;
кеш и очередь как “амортизатор” пиков и сбоев зависимостей.Финтех/платежи
критичный путь: авторизация → списание/зачисление → чек/квитанция;
типичный уровень: Tier 3–4;
акцент: строгие требования к данным (RPO) и контролируемые изменения.Архитектурный силуэт:
multi-AZ для основных компонентов;
DR-план с регулярной проверкой восстановления;
повышенные требования к наблюдаемости и аудиту.B2B SaaS для корпоративных клиентов
критичный путь: доступ к API и интеграциям;
типичный уровень: Tier 1–3 (зависит от SLA и штрафов);
акцент: SLO на API, изоляция отказов, предсказуемый MTTR.Архитектурный силуэт:
отказоустойчивый stateless-слой;
чёткие лимиты, таймауты, деградация при проблемах зависимостей;
договорённости по SLA и прозрачный статус.Что обязательно упомянуть в презентации, чтобы избежать типовых ошибок
Частые ошибки при обсуждении “нужна ли отказоустойчивость”:
подмена требований технологиями: “сделаем Kubernetes — будет отказоустойчиво”;
отсутствие определения недоступности: доступность “в процентах” без SLI;
игнорирование данных: “приложение поднялось” не значит “данные корректны”;
ставка на ручной фейловер при строгом MTTR;
отсутствие тренировок: DR и фейловер “на бумаге”.Итоги
Отказоустойчивость нужна там, где стоимость простоя, риски или режим 24/7 делают сбои дорогими.
Требования стоит формулировать через критичные пользовательские пути и метрики SLI/SLO, MTTR, а при необходимости — RTO/RPO.
Удобно мыслить уровнями (Tier 0–5): от базовой надёжности до multi-AZ и DR/active-active.
Чем выше уровень, тем дороже не только инфраструктура, но и разработка, эксплуатация и тестирование.Далее в курсе логично переходить от выбора уровня к тому, за счёт каких архитектурных механизмов обеспечивается отказоустойчивость (резервирование, failover, изоляция отказов, деградация) и как это проверять на практике.