Skip to content

Latest commit

 

History

History
128 lines (83 loc) · 4.3 KB

README.md

File metadata and controls

128 lines (83 loc) · 4.3 KB

Barber

Пакет для работы с Circuit Breaker.

Архитектура

Можно прочитать по ссылке.

Здесь используется бакетный алгоритм. Вставка ошибки занимает O(1), доступность - O(n).

Можно улучшить путём добавления внешней горутины, пересчитывающей доступность брейкера. Тогда проверка доступности брейкера будет занимать О(1).

Barber

Содержит интерфейс Barber со следующими методами

Метод Возвращаемое значение Описание
IsAvailable(int, time.Time) boolean Проверяет доступность выбранного сервера в переданный момент времени
AddError(int, time.Time) - Добавляет ошибку для переданного момента времени
Stats() pointer Stats Получает статистику ошибок для всех серверов в Barber

Barber: описание методов

IsAvailable

Описание параметров

Параметр Тип Описание
serverID integer ID сервера (или функционала)
tm time.Time Метка времени

Возвращаемое значение boolean обозначает доступность сервера (или функционала).

Пример вызова

if barber.IsAvailable(42, time.Now()) {
  return false, fmt.Errorf("server %d is not available", 42)
}

AddError

Описание параметров

Параметр Тип Описание
serverID integer ID сервера (или функционала)
tm time.Time Метка времени

Пример вызова

barber.AddError(42, time.Now())

Stats

Возвращает указатель на структуру Stats.

Описания методов

NewBarber

Описание параметров

Параметр Тип Описание
hosts array integer ID серверов (или функционалов)
config pointer Config Конфигурация

Возвращаемое значение Barber является новым инстансом Barber.

Пример вызова

barber := NewBarber([]int{42, 43, 44}, &Config{})

NewConfig

Описание параметров

Параметр Тип Описание
prefix string Префикс, по которому будут найдены параметры в конфигурационном файле

Возвращаемое значение func() *Config является Callback, который необходимо вызвать после успешной инициализации конфигурации приложения.

Пример использования

cfg := NewConfig("some_prefix")
_ = config.InitOnce() // или app.Init()
brb := NewBarber([]int{42, 43, 44}, cfg())

Описания структур

Config

Описание полей

Поле Тип Описание
Threshold integer Время, после которого обнуляется первая замеченная ошибка
MaxFails integer Максимальное количество ошибок, после которого сервер (или функционал) закрывается CircuitBreaker"ом

StatHost

Описание полей

Поле Тип Описание
ServerID integer ID сервера(или функционала)
FailsCount integer Количество ошибок за интервал времени [now - config.threshold; now]

Stats

Описание полей

Поле Тип Описание
Hosts array pointer StatsHost Статистика по всем серверам (или функционалу)