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) или облачни решения.