Масштабирование и надёжность

4 мин чтения

Health Checks: почему «процесс запущен» ещё не значит «сервис работает»

Контейнер может быть запущен, но не способен обслужить клиента: прогрев не завершён, критическая конфигурация не загрузилась или локальное состояние повреждено. Health checks должны отражать эту разницу.

Какую проблему мы решаем

Оркестратор или load balancer видит процесс снаружи. Если порт открыт, экземпляр может казаться живым, хотя реальный запрос уже не выполняется. Обратная ошибка тоже опасна: если liveness зависит от каждого внешнего партнёра, краткий чужой сбой может заставить платформу перезапустить полностью исправные приложения.

Как работает решение

Liveness отвечает, нужно ли перезапустить процесс. Readiness — можно ли прямо сейчас отправлять ему пользовательский трафик. Сигналы должны отражать разные состояния. Startup тоже важен: новый экземпляр не должен получать нагрузку раньше, чем способен её обрабатывать.

Что получает бизнес

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

Что получает команда

Команда получает формальный контракт между приложением и платформой: когда экземпляр жив, когда готов и когда его действительно стоит заменить. Это улучшает rolling deployment, autoscaling и автоматическое восстановление.

Что получает клиент

Клиент реже попадает на «полуживой» экземпляр во время релиза, прогрева или частичного сбоя.

Чем мы за это платим

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

Когда не нужно усложнять

В динамической инфраструктуре с несколькими экземплярами readiness и liveness становятся базовой частью эксплуатации. Для одного вручную управляемого процесса сложное разделение состояний может быть избыточным.

Что стоит спросить перед решением

В итоге

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