Sobes.tech
Junior — Middle

Kaip vykdomas apkrovos paskirstymas tarp serverių ar sistemos komponentų?

sobes.tech AI

Atsakymas iš AI

Krovinių paskirstymas (load balancing) — tai procesas, kai įeinantys užklausos ar užduotys tolygiai paskirstomos tarp kelių serverių ar komponentų sistemoje, siekiant pagerinti našumą ir atsparumą gedimams.

Pagrindiniai įgyvendinimo būdai:

  • Round Robin — užklausos nuosekliai siunčiamos po vieną kiekvienam serveriui ratu.
  • Least Connections — užklausa nukreipiama į serverį su mažiausiu aktyvių ryšių skaičiumi.
  • IP Hash — serverio pasirinkimas pagal kliento IP adreso hash'ą, užtikrinant sesiją su vienu serveriu.

Go kalboje galima įgyvendinti paprastą balansierių, pvz., naudojant HTTP reverse proxy su serverio pasirinkimu pagal 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)
    // Peradresuojame užklausą į tikslą
    http.Redirect(w, r, target+r.RequestURI, http.StatusTemporaryRedirect)
}

Realiuose sistemose naudojami specializuoti balansieriai (nginx, HAProxy) arba debesų sprendimai.