Sobes.tech
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.