Sobes.tech
Junior — Middle

Как се реализира разпределението на натоварването между сървърите или компонентите на системата?

sobes.tech AI

Отговор от AI

Разпределението на натоварването (load balancing) е процесът на равномерно разпределяне на входящите заявки или задачи между няколко сървъра или компоненти на системата с цел подобряване на производителността и устойчивостта при откази.

Основни начини за реализиране:

  • Round Robin — заявките се изпращат последователно по кръг към всеки сървър.
  • Least Connections — заявката се насочва към сървър с най-малко активни връзки.
  • IP Hash — избор на сървър въз основа на хеш на IP адреса на клиента, което осигурява сесия с един сървър.

В Go може да се реализира прост балансировач, например чрез използване на HTTP reverse proxy с избор на сървър по 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)
    // Пренасочване на заявката към target
    http.Redirect(w, r, target+r.RequestURI, http.StatusTemporaryRedirect)
}

В реалните системи се използват специализирани балансировачи (nginx, HAProxy) или облачни решения.