Skip to content

Kosench/go-load-balancer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

go-load-balancer

Простой HTTP load balancer на Go с round-robin балансировкой и rate limiting.

Возможности

  • Round-robin распределение запросов между бэкендами
  • Health checks для автоматического отключения недоступных бэкендов
  • Rate limiting на основе API ключей
  • Graceful shutdown
  • Управление клиентами через REST API

Установка и запуск

# Клонировать репозиторий
git clone <repo-url>
cd go-load-balancer

# Скачать зависимости
go mod download

# Запустить
go run cmd/loadbalancer/main.go

Конфигурация

Создайте файл app.env в корне проекта (или используйте переменные окружения):

LISTEN_ADDRESS=:8080
BACKENDS=localhost:9001,localhost:9002,localhost:9003
RATE_LIMIT_CAPACITY=5
RATE_LIMIT_REFILL_RATE=1

Если файл не найден, используются значения по умолчанию.

Использование

Создание клиента

curl -X POST http://localhost:8080/clients \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "user1",
    "capacity": 10,
    "rate_per_sec": 2,
    "api_key": "secret-key-123"
  }'

Отправка запроса

curl http://localhost:8080/ \
  -H "X-API-Key: secret-key-123"

Управление клиентами

# Получить список клиентов
curl http://localhost:8080/clients

# Получить клиента по ID
curl http://localhost:8080/clients/user1

# Удалить клиента
curl -X DELETE http://localhost:8080/clients/user1

Структура проекта

.
├── cmd/loadbalancer/     # Точка входа
├── internal/
│   ├── backend/          # Управление бэкендами
│   ├── balancer/         # Стратегии балансировки
│   ├── client/           # Управление клиентами
│   ├── config/           # Конфигурация
│   ├── health/           # Health checks
│   └── server/           # HTTP сервер и middleware
└── app.env              # Конфигурационный файл

Тесты

go test ./...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages