HTTP‑балансировщик с алгоритмом round‑robin и встроенным Token‑Bucket rate‑limiter.
- распределение запросов по пулу бэкендов (round‑robin);
- переключение на следующий сервер при ошибке;
- ограничение частоты запросов на IP (общий лимит + индивидуальные правила);
- логирование запросов, ошибок и превышений лимита;
- Отредактируйте при необходимости
config.json. - Поднимите всё одной командой:
docker compose up --build -dСоздаются четыре контейнера. Проверка:
curl http://localhost:8080/При последовательных вызовах ответы идут по кругу: Backend 1 → 2 → 3 ….
Остановить:
docker compose downgo run ./cmd --config config.jsonи отдельно поднять три любых HTTP‑сервера на 9001‑9003.
{
"listen": ":8080",
"backends": [
"http://backend1:9001",
"http://backend2:9002",
"http://backend3:9003"
],
"rate_limit": {
"capacity": 10,
"fill_rate": 5,
"clients": [
{ "id": "127.0.0.1", "capacity": 4, "fill_rate": 2 }
]
}
}- capacity — максимальное число токенов в бакете.
- fill_rate — пополнение токенов за секунду.
- clients — индивидуальные лимиты (по IP или API‑ключу). Если значение 0, берётся общий default.
# первые 10 запросов = 200, остальные = 429
for i in {1..15}; do \
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:8080/ ; \
doneЧерез 2 секунды токены пополнятся, следующие 5 запросов снова получат 200.
[INFO ] GET / from 172.19.0.1 -> http://backend1:9001, 415µs
[WARN ] 429 GET / – IP 172.19.0.1
[ERROR] backend http://backend2:9002 недоступен: dial tcp ...
docker build -t load-balancer .
docker run -p 8080:8080 load-balancer