Sobes.tech
Junior — Middle

Jak realizowane jest rozdzielanie obciążenia między serwery lub komponenty systemu?

sobes.tech AI

Odpowiedź od AI

Równoważenie obciążenia (load balancing) to proces równomiernego rozkładania przychodzących żądań lub zadań pomiędzy kilka serwerów lub komponentów systemu w celu zwiększenia wydajności i odporności na awarie.

Główne metody implementacji:

  • Round Robin — żądania są kolejno kierowane do każdego serwera w cyklu.
  • Least Connections — żądanie jest kierowane do serwera z najmniejszą liczbą aktywnych połączeń.
  • IP Hash — wybór serwera na podstawie hasha IP klienta, co zapewnia sesję z jednym serwerem.

W Go można zaimplementować prosty load balancer, na przykład używając odwrotnego proxy HTTP z wyborem serwera metodą 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)
    // Przekierowujemy żądanie na target
    http.Redirect(w, r, target+r.RequestURI, http.StatusTemporaryRedirect)
}

W systemach produkcyjnych używa się specjalistycznych load balancerów (nginx, HAProxy) lub rozwiązań chmurowych.