Sobes.tech
Junior — Middle

Jak je realizováno rozdělení zátěže mezi servery nebo komponenty systému?

sobes.tech AI

Odpověď od AI

Vyvažování zátěže (load balancing) je proces rovnoměrného rozdělení příchozích požadavků nebo úkolů mezi více serverů nebo komponent systému za účelem zvýšení výkonu a odolnosti vůči chybám.

Hlavní způsoby implementace:

  • Round Robin — požadavky jsou postupně směrovány v kruhu na každý server.
  • Least Connections — požadavek je směrován na server s nejmenším počtem aktivních spojení.
  • IP Hash — výběr serveru na základě hashe IP adresy klienta, což zajišťuje relaci s jedním serverem.

V Go lze implementovat jednoduchý load balancer, například pomocí HTTP reverzního proxy s výběrem serveru podle 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)
    // Přesměrování požadavku na target
    http.Redirect(w, r, target+r.RequestURI, http.StatusTemporaryRedirect)
}

V reálných systémech se používají specializované load balancery (nginx, HAProxy) nebo cloudová řešení.