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.