Какие знаешь алгоритмы балансировки нагрузки

«Какие знаешь алгоритмы балансировки нагрузки» — вопрос из категории Сети, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Round Robin — простейший алгоритм, распределяющий запросы по серверам циклически. Подходит для однородных серверов.

servers := []string{"srv1", "srv2", "srv3"}
index := 0
func nextServer() string {
    server := servers[index]
    index = (index + 1) % len(servers)
    return server
}

Least Connections — направляет запрос на сервер с наименьшим количеством активных соединений. Эффективен при неравномерной нагрузке.

IP Hash — клиентский IP хешируется для постоянного назначения сервера, обеспечивая sticky sessions.

Weighted Round Robin/Least Connections — учитывает мощность серверов через веса (например, srv1 x2 мощнее → получает в 2 раза больше запросов).

Пример Weighted Round Robin:

servers := map[string]int{"srv1": 3, "srv2": 1} // веса
totalWeight := 4
// Логика выбора с учётом весов...