Documentation
¶
Overview ¶
Package sync отвечает за синхронизацию списка активных хостов между репликами.
Это позволяет автоматически добавлять новые реплики в кластер без ручного конфигурирования.
Механизм работы:
- Каждая реплика периодически запрашивает у других реплик их списки хостов.
- Если обнаружен хост, которого нет в локальном списке, он добавляется.
- Это позволяет кластеру "узнавать" о новых узлах динамически.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Component = compogo.Component{ Name: "cluster.sync", Dependencies: compogo.Components{ &sync.Component, &repeater.Component, &grpc.Component, }, Init: compogo.StepFunc(func(container compogo.Container) error { return container.Provide(NewSync) }), PreExecute: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(func(m cluster.Manager, sync *Sync) { m.OnAddPeer().Subscribe(sync.onAddPeer) m.OnDeletingPeer().Subscribe(sync.onDeletingPeer) }) }), }
Component - компонент синхронизации хостов для Compogo.
Компонент подписывается на события добавления и удаления Peer'ов, автоматически запуская и останавливая процессы синхронизации.
Functions ¶
This section is empty.
Types ¶
type Process ¶
type Process struct {
// contains filtered or unexported fields
}
Process — задача синхронизации хостов для конкретной реплики.
Каждый Peer имеет свой процесс синхронизации. Процесс запускается через Repeater (периодически) и выполняет:
- Проверку статуса Peer (должен быть Ready).
- Запрос списка хостов у Peer.
- Сравнение с локальным списком.
- Добавление новых хостов через Manager.AddPeer.
Важно: процесс не удаляет хосты. За удаление отвечает Reaper.
func NewProcess ¶
func NewProcess( peer cluster.Peer, manager cluster.Manager, grpcConfig *grpcClient.Config, syncConfig *syncConfig.Config, logger compogo.Logger, closer compogo.Closer, ) *Process
NewProcess создаёт новый процесс синхронизации для указанного Peer.
func (*Process) Close ¶
Close отменяет текущий запрос синхронизации.
Используется при остановке приложения или при удалении Peer. Это предотвращает "висящие" горутины, ожидающие ответа от мёртвой реплики.
func (*Process) Process ¶
Process — основная логика синхронизации (вызывается через Repeater).
Алгоритм:
- Проверяем статус Peer (только Ready-реплики участвуют в синхронизации).
- Получаем gRPC-клиент к Peer.
- Запрашиваем у Peer его список хостов.
- Сравниваем с нашим списком хостов.
- Для каждого нового хоста создаём Peer и добавляем в Manager.
Примечание: если Peer не готов (не в статусе Ready), синхронизация пропускается. Это предотвращает запросы к репликам, которые ещё не инициализированы.
func (*Process) RunNumbers ¶
RunNumbers возвращает количество выполненных запусков.