Junior — Middle
Kako se realizuje raspodela opterećenja između servera ili komponenti sistema?
sobes.tech АИ
Одговор од АИ
Raspoređivanje opterećenja (load balancing) je proces ravnomernog raspoređivanja ulaznih zahteva ili zadataka između više servera ili komponenti sistema radi povećanja performansi i otpornosti na kvarove.
Glupi načini implementacije:
- Round Robin — zahtevi se sukcesivno šalju u krug svakom serveru.
- Least Connections — zahtev se usmerava na server sa najmanjim brojem aktivnih veza.
- IP Hash — izbor servera na osnovu hasha IP adrese klijenta, što obezbeđuje sesiju sa jednim serverom.
U Go jeziku, može se implementirati jednostavan balansator, na primer, koristeći HTTP reverse proxy sa izborom servera po 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)
// Preusmeravanje zahteva na target
http.Redirect(w, r, target+r.RequestURI, http.StatusTemporaryRedirect)
}
U stvarnim sistemima koriste se specijalizovani balanseri (nginx, HAProxy) ili cloud rešenja.