Что такое Heartbeat?
Heartbeat — это периодический сигнал, отправляемый между компонентами системы, чтобы подтвердить, что они живы и работают корректно. Это работает как непрерывная проверка состояния в распределённой системе.
Как работают Heartbeats
- Узлы отправляют heartbeat-сообщения координатору или друг другу через регулярные фиксированные интервалы
- Каждый heartbeat сбрасывает таймер таймаута на принимающей стороне
- Если heartbeat не приходит в течение определённого временного окна, отправляющий узел помечается как неработающий или недоступный
Node A --heartbeat every 5s--> Coordinator
Coordinator: no signal for 15s --> Node A presumed dead
Роль в мониторинге состояния узлов
- Heartbeats обеспечивают постоянную видимость того, какие узлы активны в кластере
- Они позволяют системе поддерживать актуальный список участников кластера
- Внезапное отсутствие heartbeat запускает мгновенное обнаружение сбоя, сокращая время простоя
Роль в Failover
После обнаружения сбоя heartbeats позволяют системе реагировать автоматически:
- Выборы лидера запускаются, когда основной узел перестаёт отправлять heartbeats
- Трафик или нагрузка перенаправляются на живые узлы-реплики
- Кластер самовосстанавливается без ручного вмешательства
Ключевые моменты при проектировании
- Настройка интервала и таймаута — критична: слишком короткий интервал вызывает ложные срабатывания при сетевых помехах; слишком длинный замедляет обнаружение сбоев
- Heartbeats потребляют полосу пропускания, поэтому частоту нужно балансировать с учётом накладных расходов
- Системы вроде ZooKeeper, etcd и Kubernetes в значительной степени полагаются на механизмы heartbeat для координации кластера