Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var AvailableRoles = linker.NewLinker[string, Role]( linker.KeyStringNormalizer[Role](), linker.Link(string(Master), Master), linker.Link(string(Slave), Slave), )
AvailableRoles — список доступных ролей для использования в конфигурации.
Используется для:
- Валидации ролей при загрузке конфигурации (infrastructure/config/manager/replica.go)
- Приведения строковых значений к типу Role
Регистрация в linker позволяет искать роль по строковому имени с нормализацией регистра.
Functions ¶
This section is empty.
Types ¶
type Bulletin ¶
Bulletin — бюллетень для голосования при выборах лидера.
Каждая реплика отправляет свой бюллетень другим репликам во время фазы Vote. Бюллетень содержит:
- Term — текущий "возраст" (срок) выборов, чтобы голоса от старых выборов не учитывались
- CandidateId — ID реплики, за которую голосует отправитель
Сбор бюллетеней позволяет определить, какая реплика набрала большинство голосов.
Используется в:
- election/vote.go — для хранения и подсчёта голосов
- sdk/election.go — для передачи через gRPC
type Meta ¶
type Meta struct {
Id uuid.UUID // Уникальный ID реплики (генерируется при старте)
Name string // Имя реплики (например, "replica-1")
Host string // Адрес реплики (например, "10.0.0.1:9090")
TimeStart time.Time // Время запуска реплики (используется для вычисления uptime)
AvailableRoles set.Set[Role] // Роли, которые реплика может выполнять (из конфига)
Roles set.Set[Role] // Текущие роли реплики (меняются динамически)
}
Meta — метаданные реплики.
- Уникальный идентификатор (Id)
- Человекочитаемое имя (Name)
- Сетевой адрес (Host)
- Время запуска (TimeStart)
- Доступные роли (AvailableRoles)
- Текущие роли (Roles)
Используется для идентификации реплик и для обмена информацией при подключении.
type Role ¶
type Role string
Role — тип роли реплики.
const ( // Master — лидер кластера. // // Мастер принимает все решения и рассылает состояние другим репликам. // В кластере может быть только один мастер. Master Role = "Master" // Slave — ведомая реплика. // // Слейв получает состояние от мастера и может заменить его в случае отказа. // Остальные реплики по умолчанию являются слейвами. Slave Role = "Slave" )
type State ¶
type State struct {
Score float32 // Вес реплики (0..∞, чем выше — тем лучше)
Resource *linker.Linker[resource.Type, *resource.Resource] // Использование ресурсов (CPU, Memory)
Roles set.Set[Role] // Текущие роли (Master, Slave)
}
State — состояние реплики.
Содержит информацию, которая обновляется в процессе работы:
- Score — вес реплики для выборов (может меняться динамически)
- Resource — использование ресурсов (CPU, RAM)
- Roles — текущие роли (могут меняться при выборах)
Используется для:
- Выбора лидера (Election)
- Принятия решений о распределении нагрузки
- Мониторинга состояния кластера
type Status ¶
type Status uint8
Status — статус соединения реплики с кластером.
Жизненный цикл статуса:
Disconnection -> Connection -> Ready
Используется для отслеживания состояния реплик и принятия решений:
- Reaper удаляет реплики, которые долго находятся в Disconnection
- Election учитывает только реплики в статусе Ready
- Sync обменивается данными только с Ready-репликами
const ( // Disconnection — реплика не отвечает или соединение потеряно. // В этом состоянии реплика считается "мёртвой" и может быть удалена Reaper'ом. Disconnection Status = iota // Connection — соединение установлено, но реплика ещё не синхронизировала состояние. // Реплика находится в процессе подключения и обмена метаданными. Connection // Ready — реплика полностью готова к работе. // Состояние синхронизировано, реплика участвует в выборах и обрабатывает запросы. Ready )