Junior — Middle
Hogyan valósul meg a terheléselosztás a szerverek vagy rendszerkomponensek között?
sobes.tech MI
Válasz az MI-től
A terheléselosztás (load balancing) az a folyamat, amikor a bejövő kéréseket vagy feladatokat egyenletesen osztják szét több szerver vagy rendszerkomponens között a teljesítmény növelése és a hibákkal szembeni ellenállás érdekében.
Fő megvalósítási módok:
- Round Robin — a kérések egymás után, körkörösen kerülnek minden szerverhez.
- Least Connections — a kérés a legkevesebb aktív kapcsolattal rendelkező szerverhez kerül.
- IP Hash — a szerver kiválasztása az ügyfél IP-címének hash-én alapul, így biztosítva, hogy egy munkamenet egyetlen szerverhez tartozzon.
Go nyelven egyszerű load balancert lehet megvalósítani, például HTTP reverse proxy használatával, Round Robin kiválasztással:
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)
// Kérés átirányítása a célra
http.Redirect(w, r, target+r.RequestURI, http.StatusTemporaryRedirect)
}
Valós rendszerekben specializált load balancerek (nginx, HAProxy) vagy felhőalapú megoldások használatosak.