Skip to content

a1sarpi/gloadbal

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gloadbal

gloadbal — простой HTTP load balancer (reverse proxy), который распределяет входящие запросы по набору backend-серверов с помощью сменяемых алгоритмов балансировки. Маршрутизация реализована через net/http + httputil.ReverseProxy, а выбор backend инкапсулирован в интерфейсе итератора.

Возможности

  • Reverse proxy на httputil.NewSingleHostReverseProxy для каждого backend.
  • Плагинообразные алгоритмы выбора backend через интерфейс Iterator:
    • Round Robin
    • Weighted Round Robin (с весами)
    • Least Connections (по текущему числу активных запросов)
    • Random
  • Учет текущей нагрузки backend (число параллельных запросов) через атомарный счетчик.
  • Подготовлен модуль health-check’ов: периодическая TCP-проверка доступности origin (DialTimeout), с возможностью подмены check-функции и периода.

Архитектура

  • proxy.Proxy — обертка над httputil.ReverseProxy, считает текущую нагрузку (load) и проксирует запросы.
  • iterator.Iterator — интерфейс стратегии балансировки: Next() (*proxy.Proxy, error).
  • loadbalancer.LoadBalancerhttp.Handler, который на каждый запрос берет Next() и делегирует ServeHTTP выбранному прокси.
  • health.ProxyHealth — отдельная сущность для фоновой проверки доступности origin по таймеру.

Алгоритмы балансировки

  • Round Robin: циклический проход по списку прокси (атомарный индекс).
  • Weighted Round Robin: держит текущий backend и счетчик запросов; переключается, когда достигнут weight.
  • Least Connections: делает копию списка, сортирует по GetLoad() и берет наименее загруженный доступный.
  • Random: случайный индекс (seed передается снаружи).

В репозитории также есть демонстрационный main.go, который создает балансировщик и запускает тестовые сервера (см. main.go).

Стек

Go, net/http, httputil.ReverseProxy, sync/atomic, goroutines, mutex, TCP health-check (DialTimeout).

About

Load Balancer on Golang

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages