Serf

Бесплатно
Открытый исходный код
Windows
macOS
Linux

Сайт: www.serfdom.io

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

Архитектурно Serf реализует одноранговую (peer-to-peer) топологию, в которой каждый узел поддерживает небольшую локальную область знаний о состоянии кластера и регулярно обменивается этой информацией с выбранными соседями. Отказоустойчивость достигается за счёт многократного распространения сообщений и периодической проверки живости (failure detection). В системе отсутствует постоянный лидер: роль согласования распределённых изменений минимальна, а необходимые соглашения достигаются через консенсус поведения gossip-сообщений и простые механизмы обнаружения конфликтов.

  • Gossip-протокол: распространение состояния и метаданных кластера с использованием периодических двусторонних обменов между узлами, обеспечивающее масштабируемость и устойчивость к разделениям.
  • Обнаружение отказов: комбинация периодических пингов и анти-энтропийных обменов для выявления и пометки недоступных или восстановившихся членов кластера.
  • Без лидера: децентрализованная архитектура без постоянного координатора; согласование достигается через свойства gossip и локальные правила разрешения конфликтов.
  • События (eventing): возможность генерации и распространения пользовательских событий по кластеру для триггеринга внешних обработчиков и систем оркестрации.
  • Простая оркестрация: предоставление примитивов для управления состоянием сервисов и ролей внутри кластера без необходимости сложных распределённых транзакций.
  • Скалируемость: эффективная работа в больших кластерах за счёт ограниченного объёма сообщений на узел и экспоненциального распространения данных.
  • Устойчивость к сетевым разделениям: механизмы разделения и последующего слияния состояний, включая разрешение конфликтов и пометки версий.
  • Лёгкая интеграция: интерфейсы для запуска пользовательских обработчиков при изменении состава кластера и при поступлении событий.
  • Конфигурация и безопасность: поддержка настроек таймингов обнаружения, параметров gossip и опциональных механизмов аутентификации/шифрования каналов передачи.
  • Наблюдаемость: экспорт состояния членов, событий и статистики для мониторинга и отладки поведения кластера.
Подробнее