Sobes.tech
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.