manager

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: 9 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DelayReconnectFieldName — флаг для интервала переподключения к отвалившейся реплике.
	//
	// Если реплика потеряла связь, менеджер будет пытаться переподключиться
	// с этим интервалом.
	DelayReconnectFieldName = "cluster.delay.reconnect"

	// DelaySyncStateFieldName — флаг для интервала синхронизации состояния.
	//
	// Каждые SyncState секунд реплика отправляет своё состояние (Score, Resources, Roles)
	// другим репликам.
	DelaySyncStateFieldName = "cluster.delay.sync.state"
)
View Source
const (
	// ReplicaIdFieldName — флаг для ID реплики (UUID).
	ReplicaIdFieldName = "cluster.replica.id"

	// ReplicaNameFieldName — флаг для имени реплики.
	ReplicaNameFieldName = "cluster.replica.name"

	// ReplicaHostFieldName — флаг для хоста реплики (адрес:порт).
	ReplicaHostFieldName = "cluster.replica.host"

	// ReplicaRolesFieldName — флаг для доступных ролей реплики.
	ReplicaRolesFieldName = "cluster.replica.roles"

	// ReplicaScoreFieldName — флаг для веса реплики (Score).
	ReplicaScoreFieldName = "cluster.replica.score"
)

Variables

View Source
var (
	// DelayReconnectDefault — интервал переподключения (10 секунд).
	//
	// 10 секунд — хороший баланс между частотой попыток и нагрузкой на сеть.
	DelayReconnectDefault = 10 * time.Second

	// DelaySyncStateDefault — интервал синхронизации состояния (5 секунд).
	//
	// 5 секунд — компромисс между актуальностью состояния и нагрузкой.
	// Для высоконагруженных систем можно увеличить до 10-15 секунд.
	DelaySyncStateDefault = 5 * time.Second
)
View Source
var Component = compogo.Component{
	Name: "cluster.manager.config",
	Init: compogo.StepFunc(func(container compogo.Container) error {
		return container.Provides(NewReplica, NewDelay)
	}),
	BindFlags: compogo.BindFlags(func(flagSet flag.FlagSet, container compogo.Container) error {
		return container.Invoke(func(replicaConfig *Replica, delayConfig *Delay) {
			flagSet.DurationVar(&delayConfig.Reconnect, DelayReconnectFieldName, DelayReconnectDefault, "")
			flagSet.DurationVar(&delayConfig.SyncState, DelaySyncStateFieldName, DelaySyncStateDefault, "")

			flagSet.StringVar(&replicaConfig.id, ReplicaIdFieldName, "", "")
			flagSet.StringVar(&replicaConfig.Name, ReplicaNameFieldName, "", "")
			flagSet.StringVar(&replicaConfig.Host, ReplicaHostFieldName, "", "")
			flagSet.StringSliceVar(&replicaConfig.role, ReplicaRolesFieldName, nil, "")
			flagSet.Float32Var(&replicaConfig.Score, ReplicaScoreFieldName, ReplicaScoreDefault, "")
		})
	}),
	Configuration: compogo.StepFunc(func(container compogo.Container) (err error) {
		if err = container.Invoke(DelayConfiguration); err != nil {
			return err
		}

		return container.Invoke(ReplicaConfiguration)
	}),
}

Component — компонент для инициализации конфигурации менеджера.

Жизненный цикл компонента:

  1. Init — регистрирует конструкторы NewReplica и NewDelay в DI-контейнере.
  2. BindFlags — привязывает флаги командной строки для конфигурации реплики и задержек.
  3. Configuration — загружает конфигурацию из Configurator.

Флаги для реплики:

  • --cluster.replica.id — ID реплики (UUID)
  • --cluster.replica.name — имя реплики
  • --cluster.replica.host — хост реплики (адрес:порт)
  • --cluster.replica.roles — доступные роли (Master, Slave)
  • --cluster.replica.score — вес реплики для выборов

Флаги для задержек:

  • --cluster.delay.reconnect — интервал переподключения
  • --cluster.delay.sync.state — интервал синхронизации состояния
View Source
var ReplicaScoreDefault = float32(1.0)

ReplicaScoreDefault — вес реплики по умолчанию (1.0).

Score влияет на выборы лидера:

  • Чем выше Score, тем больше шансов стать мастером.
  • Score может быть изменён динамически через Me.SetScore().

Functions

This section is empty.

Types

type Delay

type Delay struct {
	Reconnect time.Duration
	SyncState time.Duration
}

Delay содержит настройки таймаутов для менеджера кластера.

func DelayConfiguration

func DelayConfiguration(config *Delay, configurator compogo.Configurator) *Delay

DelayConfiguration загружает конфигурацию из Configurator.

Важно: если параметры равны 0, они заменяются на значения по умолчанию.

func NewDelay

func NewDelay() *Delay

NewDelay создаёт новую конфигурацию с нулевыми значениями.

type Replica

type Replica struct {
	Id   uuid.UUID
	Name string
	Host string

	Role  set.Set[domain.Role]
	Score float32
	// contains filtered or unexported fields
}

Replica — конфигурация текущей реплики.

Поля:

  • id — строковое представление ID (используется для парсинга в uuid.UUID).
  • Id — уникальный идентификатор реплики (UUID).
  • Name — человекочитаемое имя реплики.
  • Host — адрес реплики (host:port) для gRPC-соединений.
  • role — список ролей в виде строк (используется для парсинга в set.Set[domain.Role]).
  • Role — множество доступных ролей (Master/Slave).
  • Score — вес реплики для выборов.

func NewReplica

func NewReplica() *Replica

NewReplica создаёт новую конфигурацию с нулевыми значениями.

func ReplicaConfiguration

func ReplicaConfiguration(config *Replica, compogoConfig *compogo.Config, configurator compogo.Configurator) (*Replica, error)

ReplicaConfiguration — загружает конфигурацию реплики из Configurator.

Эта функция — самая сложная в пакете config, потому что она:

  1. Парсит ID из строки в uuid.UUID.
  2. Генерирует новый UUID, если ID не задан.
  3. Использует ContainerId и Hostname из compogo.Config как значения по умолчанию.
  4. Проверяет, что роли существуют в domain.AvailableRoles.
  5. Возвращает ошибку, если роль неизвестна.

Важно: если Name и Host не заданы, они берутся из compogo.Config. Это позволяет не указывать их вручную при локальной разработке.

Jump to

Keyboard shortcuts

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