Как настроить высокодоступную инфраструктуру (load balancer + failover)?
Подробный ответ
Цель высокой доступности
High availability, или HA, — это способность сервиса продолжать работу при отказе одного экземпляра, виртуальной машины, availability zone или части инфраструктуры. Для этого нельзя оставлять критический компонент в единственном экземпляре.
Базовая схема
Internet
|
Load Balancer
|
+---+-------------------+
| |
API instance 1 API instance 2
Zone A Zone B
| |
+---------- Shared dependencies ----------+
Database / Redis / Object StorageLoad balancer
Load balancer распределяет запросы между несколькими backend-инстансами. Он должен регулярно проверять health endpoint и исключать неготовые либо упавшие экземпляры из маршрутизации.
Failover
Failover — это переключение на резервный компонент после сбоя основного. Он может быть active-active, когда несколько экземпляров одновременно обслуживают трафик, или active-passive, когда резервный экземпляр активируется только при проблеме основного.
Что нужно дублировать
несколько stateless-экземпляров приложения в разных availability zones;
load balancer или managed load balancer без единой точки отказа;
базу данных с репликацией, backup и проверенной процедурой failover;
кэш и очередь задач с репликацией либо managed-сервисами;
объектное хранилище для файлов вместо локального диска приложения;
мониторинг, алерты и runbooks для действий при аварии.
Проверки здоровья
Для балансировщика нужен health endpoint, например /health/ready. Он должен быстро отвечать и отражать способность экземпляра обслуживать трафик. При сбое instance load balancer перестаёт посылать ему новые запросы, а оркестратор или systemd пытается восстановить процесс.
Проверка отказоустойчивости
HA нельзя считать настроенной только потому, что есть два сервера. Нужно регулярно проводить controlled failover: отключать один instance, проверять переключение, тестировать восстановление базы, измерять RTO и проверять, что данные не потеряны сверх согласованного RPO.
Как ответить на собеседовании
Для HA я убираю единичные точки отказа: запускаю несколько stateless-реплик приложения за load balancer в разных зонах, использую readiness/health checks и выношу состояние во внешние отказоустойчивые сервисы. Отдельно проектирую failover базы и кэша, backup, RTO/RPO и регулярно проверяю сценарии отказа на практике.
Оцени свой прогресс