Этот проект представляет собой HTTP-балансировщик нагрузки, реализующий алгоритм наименьшего количества соединений (Least Connections) с поддержкой rate limiting на основе Token Bucket, health-чеками и конфигурацией через config.json.
- Алгоритм балансировки: Least Connections
- Обработка отказов бэкендов
- Rate Limiting по IP на основе Token Bucket
- Health checks с заданным интервалом
- Конфигурация через JSON или переменные окружения
- Поддержка Docker и Docker Compose
git clone https://github.com/IlyaAGL/balancer.git
cd balancer
go build -o balancer ./cmd/main.godocker build -t balancer .go run ./cmd/main.go --config=config/config.jsonexport BACKEND_CONFIG=config/config.json
go run ./cmd/main.godocker-compose up --buildСервис будет доступен по адресу: http://localhost:8080
{
"port": "8080",
"healthCheckInterval": "5s",
"rateLimit": {
"enabled": true,
"defaultCapacity": 10,
"defaultRate": 5
},
"backends": [
{
"url": "http://backend1:80",
"weight": 1,
"name": "backend-1"
},
{
"url": "http://backend2:80",
"weight": 2,
"name": "backend-2"
}
]
}curl http://localhost:8080Если превышен лимит:
{ "error": "rate limit exceeded" }