Junior — Middle
Come viene implementata la distribuzione del carico tra server o componenti del sistema?
sobes.tech AI
Risposta dell'AI
Il bilanciamento del carico (load balancing) è il processo di distribuzione uniforme delle richieste o dei compiti in ingresso tra più server o componenti del sistema per migliorare le prestazioni e la tolleranza ai guasti.
Principali metodi di implementazione:
- Round Robin — le richieste vengono inviate sequenzialmente in cerchio a ogni server.
- Least Connections — la richiesta viene indirizzata al server con il minor numero di connessioni attive.
- IP Hash — scelta del server basata su un hash dell'IP del cliente, garantendo una sessione con un solo server.
In Go, si può implementare un semplice bilanciatore, ad esempio, usando un reverse proxy HTTP con selezione del server tramite Round Robin:
var servers = []string{"http://server1", "http://server2"}
var current int
func loadBalancer(w http.ResponseWriter, r *http.Request) {
target := servers[current]
current = (current + 1) % len(servers)
// Reindirizza la richiesta a target
http.Redirect(w, r, target+r.RequestURI, http.StatusTemporaryRedirect)
}
Nei sistemi reali, si utilizzano bilanciatori specializzati (nginx, HAProxy) o soluzioni cloud.