Назад к вопросам
Mail.ru
Junior — Middle
82
Каким образом можно осуществить балансировку трафика между серверами для оптимальной работы системы?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Для балансировки трафика между серверами обычно используют следующие подходы:
- Round Robin — простой метод, при котором запросы последовательно направляются на каждый сервер по очереди.
- Least Connections — запрос направляется на сервер с наименьшим количеством активных соединений.
- IP Hash — выбор сервера на основе хэширования IP клиента, что обеспечивает сессию на одном сервере.
В Go можно использовать готовые решения, например, встроенный пакет net/http/httputil с ReverseProxy для создания балансировщика, или внешние инструменты (NGINX, HAProxy).
Пример простого балансировщика на Go с Round Robin:
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
"sync/atomic"
)
var servers = []string{
"http://localhost:8081",
"http://localhost:8082",
}
var current uint32
func getNextServer() *url.URL {
idx := atomic.AddUint32(¤t, 1)
serverURL, _ := url.Parse(servers[int(idx)%len(servers)])
return serverURL
}
func handler(w http.ResponseWriter, r *http.Request) {
target := getNextServer()
proxy := httputil.NewSingleHostReverseProxy(target)
proxy.ServeHTTP(w, r)
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}
Такой балансировщик будет последовательно перенаправлять запросы на сервера из списка.