Documentation
¶
Index ¶
Constants ¶
const ( // DelayReconnectFieldName — флаг для интервала переподключения к отвалившейся реплике. // // Если реплика потеряла связь, менеджер будет пытаться переподключиться // с этим интервалом. DelayReconnectFieldName = "cluster.delay.reconnect" // DelaySyncStateFieldName — флаг для интервала синхронизации состояния. // // Каждые SyncState секунд реплика отправляет своё состояние (Score, Resources, Roles) // другим репликам. DelaySyncStateFieldName = "cluster.delay.sync.state" )
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 ¶
var ( // DelayReconnectDefault — интервал переподключения (10 секунд). // // 10 секунд — хороший баланс между частотой попыток и нагрузкой на сеть. DelayReconnectDefault = 10 * time.Second // DelaySyncStateDefault — интервал синхронизации состояния (5 секунд). // // 5 секунд — компромисс между актуальностью состояния и нагрузкой. // Для высоконагруженных систем можно увеличить до 10-15 секунд. DelaySyncStateDefault = 5 * time.Second )
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 — компонент для инициализации конфигурации менеджера.
Жизненный цикл компонента:
- Init — регистрирует конструкторы NewReplica и NewDelay в DI-контейнере.
- BindFlags — привязывает флаги командной строки для конфигурации реплики и задержек.
- 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 — интервал синхронизации состояния
var ReplicaScoreDefault = float32(1.0)
ReplicaScoreDefault — вес реплики по умолчанию (1.0).
Score влияет на выборы лидера:
- Чем выше Score, тем больше шансов стать мастером.
- Score может быть изменён динамически через Me.SetScore().
Functions ¶
This section is empty.
Types ¶
type Delay ¶
Delay содержит настройки таймаутов для менеджера кластера.
func DelayConfiguration ¶
func DelayConfiguration(config *Delay, configurator compogo.Configurator) *Delay
DelayConfiguration загружает конфигурацию из Configurator.
Важно: если параметры равны 0, они заменяются на значения по умолчанию.
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, потому что она:
- Парсит ID из строки в uuid.UUID.
- Генерирует новый UUID, если ID не задан.
- Использует ContainerId и Hostname из compogo.Config как значения по умолчанию.
- Проверяет, что роли существуют в domain.AvailableRoles.
- Возвращает ошибку, если роль неизвестна.
Важно: если Name и Host не заданы, они берутся из compogo.Config. Это позволяет не указывать их вручную при локальной разработке.