Вопрос проверяет понимание инструментов и стратегий, которые позволяют системе продолжать работать при сбоях.
Отказоустойчивость достигается через репликацию, авто-переключение (failover), балансировку нагрузки, изоляцию сервисов, retry/backoff, circuit breaker, распределённые очереди, self-healing и мониторинг. Эти механизмы позволяют системе оставаться доступной даже при падении отдельных компонентов.
Отказоустойчивость — ключевое свойство распределённых систем, позволяющее продолжать работу несмотря на сбои узлов, сетевые ошибки или перегрузки. Она достигается комбинацией архитектурных, сетевых и инфраструктурных решений.
Репликация — основной метод защиты от потери данных и отказов.
Типы:
master–replica — запись в мастер, чтение из реплик;
multi-master — несколько узлов могут писать;
quorum replication — согласование через большинство.
Преимущества:
высокая доступность;
ускорение чтений;
возможность failover.
Failover — автоматическое переключение на резервный узел при падении основного.
Может быть:
горячим (hot standby);
тёплым (warm standby);
холодным (cold standby).
Используется в БД, Kubernetes, балансировщиках.
Балансировка распределяет нагрузку и защищает от перегрузки отдельных узлов.
Также выполняет health-check сервисов и исключает “мертвые” экземпляры из ротации.
Определение:
Circuit breaker предотвращает каскадные отказы, отключая вызовы к нестабильным сервисам.
Три состояния:
closed → вызовы идут;
open → вызовы блокируются;
half-open → проверяется восстановление.
Это один из важнейших механизмов в микросервисах.
Повторные попытки должны выполняться с:
увеличением интервала (backoff);
случайным разбросом (jitter).
Это предотвращает лавинообразные повторные запросы и защищает сервисы.
Методы:
независимые БД;
разделение ресурсных лимитов;
ограничение доступа к критическим компонентам;
timeouts.
Если один сервис падает — остальные работают.
Message broker (Kafka, RabbitMQ, SQS) позволяет:
сглаживать пики;
обрабатывать задачи асинхронно;
сохранять сообщения при падениях.
Через очереди легко организовать повторные попытки, дедлайны, отложенную обработку.
Kubernetes и оркестраторы умеют:
перезапускать упавшие контейнеры;
пересоздавать узлы;
перераспределять нагрузку;
выполнять авто-скейлинг.
Это критическая часть отказоустойчивой инфраструктуры.
Отказоустойчивость невозможна без:
логов;
метрик;
алертов;
трейсинга.
Быстрое обнаружение проблемы = меньше downtime.
Отказоустойчивость обеспечивается сочетанием репликаций, failover, балансировки, circuit breaker, retry/backoff, изоляции сервисов, очередей, автоматического восстановления и полного observability. Это набор практик, а не один механизм.