Documentation
¶
Overview ¶
Package election реализует алгоритм выборов лидера.
Алгоритм состоит из двух фаз:
- AgeSync — синхронизация "возраста" (term) между репликами
- Vote — голосование за кандидата
Это упрощённая версия Raft, оптимизированная для 10-20 реплик.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Component = compogo.Component{ Name: "cluster.election", Dependencies: compogo.Components{ &runner.Component, &election.Component, }, Init: compogo.StepFunc(func(container compogo.Container) error { return container.Provide(NewElection) }), PreExecute: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(func(m cluster.Manager, e *Election) { m.OnAddPeer().Subscribe(e.onAddPeer) m.OnDeletingPeer().Subscribe(e.onDeletingPeer) m.OnMasterDisconnection().Subscribe(e.onMasterDisconnection) m.OnMasterCandidateConnect().Subscribe(e.onMasterCandidateConnect) m.OnChangeMaster().Subscribe(e.onChangeMaster) }) }), }
Component — компонент Compogo для выборов.
Жизненный цикл компонента:
- Init — регистрирует конструктор NewElection в DI-контейнере.
- PreExecute — подписывается на события Manager.
Подписки:
- OnAddPeer — создаёт gRPC-клиент для новой реплики.
- OnDeletingPeer — удаляет gRPC-клиент при удалении реплики.
- OnMasterDisconnection — запускает выборы при отключении мастера.
- OnMasterCandidateConnect — запускает выборы при появлении нового кандидата.
- OnChangeMaster — запускает выборы, если мастер не выбран.
Election — это одна из самых важных частей кластера. Без него нельзя гарантировать, что в кластере всегда есть мастер.
Functions ¶
This section is empty.
Types ¶
type Election ¶
type Election struct {
// contains filtered or unexported fields
}
Election — основной оркестратор выборов.
Координирует фазы AgeSync и Vote, используя Runner для выполнения как отдельной задачи.
Жизненный цикл выборов:
- Инициируется через RunVote().
- Запускается как задача в Runner (Process).
- Выполняется фаза AgeSync.
- Выполняется фаза Vote.
- Победитель становится мастером.
func NewElection ¶
func NewElection( config *election.Config, m cluster.Manager, runner runner.Runner, logger compogo.Logger, ) *Election
NewElection создаёт новый объект выборов.
func (*Election) AddBulletin ¶
AddBulletin — добавляет голос от другой реплики.
func (*Election) AgeSync ¶
AgeSync — вызывается через gRPC для синхронизации term.
При получении term от другой реплики запускает новые выборы. Это позволяет оперативно реагировать на изменения в кластере.