Простой алгоритм здесь не так уж и сложен.
Допустим, у вас есть список серверов со следующими весами:
A 10
B 20
C 30
Там, где указан больший вес, он может обрабатывать больше трафика.
Просто поделите количество трафика, отправляемого на каждый сервер, на вес и сортируйте от наименьшего к наибольшему. Сервер, который выходит на первое место, получает пользователя.
например, скажем, каждый сервер начинается с 10 пользователей, тогда порядок будет:
C - 10 / 30 = 0.33
B - 10 / 20 = 0.50
A - 10 / 10 = 1.00
Это означает, что следующие 5 запросов будут отправлены на сервер C. Шестой запрос будет отправлен либо в C, либо в В. 7-й запрос пойдет на тот, который не обработал 6-й.
Чтобы усложнить ситуацию, вы можете захотеть, чтобы балансировщик был более умным. В этом случае необходимо отслеживать, сколько запросов в настоящее время обслуживается каждым из серверов, и уменьшать их, когда запрос полностью выполнен.
Дальнейшие осложнения включают добавление липкости к сеансам. Это означает, что балансировщик должен проверять каждый запрос идентификатора сеанса и отслеживать, куда они отправились в прошлый раз.
В целом, если вы можете просто купить продукт у компании, которая уже делает это.