Junior — Middle
107
Жүйенің оңтайлы жұмыс істеуі үшін серверлер арасында трафикті қалай теңестіруге болады?
Сұралған компаниялар
AI-дан жауап
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))
}
Такой балансировщик будет последовательно перенаправлять запросы на сервера из списка.