Перейти к содержимому
Mihail Leybuk-Galin — главная
Облачная архитектураБэкенд-разработка3 мин чтения

Инженерия отказоустойчивости: проектирование с учетом отказов в облачных развертываниях в нескольких регионах.

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

Mihail Leybuk-GalinСистемный архитектор

1. Учет отказов как архитектурное требование

Облачная инфраструктура создаёт впечатление, что избыточность устраняет отказы. Это не так. Управляемые сервисы, зоны доступности, репликация и автомасштабирование лишь меняют вероятность и характер отказов.

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

2. Выбор подходящей стратегии работы в нескольких регионах

Мультирегиональная инфраструктура не означает автоматически архитектуру active-active. Подходящая топология зависит от целевых показателей восстановления, требований к согласованности, географии пользователей, зрелости эксплуатации и стоимости простоя для бизнеса.

Топология приложения и данных в нескольких регионах

Топология приложения и данных в нескольких регионах

Открыть полноразмерное изображение

Архитектуры active-passive обеспечивают более простые гарантии согласованности и меньшую эксплуатационную сложность. Развёртывания active-active могут сократить региональные задержки и ускорить переключение трафика, но создают более сложные задачи, связанные с ответственностью за операции записи, репликацией, разрешением конфликтов и реагированием на инциденты.

Практичным компромиссом часто становятся вычислительные компоненты без состояния в режиме active-active в сочетании с явно закреплённой ответственностью за операции записи состояния.

3. Проектирование работы с данными с учетом отказа региона

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

Эти решения должны определяться двумя метриками: целевой точкой восстановления (RPO) и целевым временем восстановления (RTO). Они превращают расплывчатые ожидания относительно «высокой доступности» в явные бизнес-требования.

resilience.yaml

service:
  request_timeout: 4.5s

database:
  primary_region: eu-central
  replication: async
  max_replication_lag: 30s

dependencies:
  timeout: 500ms
  retries: 2
  backoff: exponential
  jitter: true

circuit_breaker:
  failure_threshold: 10
  open_for: 30s

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

4. Предотвращение распространения локальных сбоев на всю систему

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

Предотвращение распространения локальных сбоев на всю систему

Предохранители

Не позволяйте сбоящей зависимости занимать рабочие потоки и увеличивать задержки во всей системе.

Явно заданные тайм-ауты

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

Изоляция ресурсов

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

Плавная деградация

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

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

5. Результаты и метрики

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

Целевое время переключения при отказе
90с
Целевой RPO
<30с
Целевой показатель критичного API
99.99%

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