domain

package
v1.0.0-rc1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

AvailableRoles — список доступных ролей для использования в конфигурации.

Используется для:

  • Валидации ролей при загрузке конфигурации (infrastructure/config/manager/replica.go)
  • Приведения строковых значений к типу Role

Регистрация в linker позволяет искать роль по строковому имени с нормализацией регистра.

Functions

This section is empty.

Types

type Bulletin

type Bulletin struct {
	Term        uint64
	CandidateId uuid.UUID
}

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
)

func (Status) String

func (i Status) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL