Имеется два (кол-во в будущем будет расти) сервера на которых крутиться один и тот же высоконагруженный веб проект, код одинаковый, ось — CentOS. По железу сервера различаются, первый — 2-ядерный с 4 гигами оперативы, второй — 4-ядерный с 8 гигами оперативы.
На входе имеем — кучу пользователей каждый из которых грузит сервер, причем по разному — кто то больше, кто то меньше, 10 минут назад так, сейчас уже сяк; может добавиться новый юзер, который создаст очень большую нагрузку и тд. Имеется статистика всего этого. Задача — распределить юзеров по серверам, чтобы загруженность этих серверов была более менее одинакова. Так как юзер загружает сервер по разному, то и перераспределять юзеров по серверам надо каждые 10-20 минут.
Для распределения необходимы данные по загруженности серверов. Получить их надо средствами php или операционной системы в виде процентного отношения, мол средняя загруженность сервера №1 за последние 15 минут = 85%. Средствами php можно получить при помощи функции
sys_getloadavg, однако получаемое значение это «the number of processes in the system run queue», и, как я понял, оно не имеет максимального значения, т.е. в процентах загруженность выразить не получится, из-за чего нельзя определить условную «мощность» каждого сервера — максимальное кол-во юзеров которых можно отправлять на тот или иной сервер. Есть вариант писать в лог или мэмкэш данные из top, однако это придется делать очень часто (каждую секунду?) дабы получить наиболее достоверные данные, нагрузка то скачет. В общем, хабратоварищи, Ваши предложения =)