В докладе я расскажу о том, как мы добились идеально ровной балансировки нагрузки по кластеру из 200+ серверов, реализовали автоматический подбор весов и получили разброс CPU usage в 2,5% в пике трафика. Это позволило сэкономить нам около 40-50 серверов и улучшить время отклика мобильного сайта в пике нагрузки. Реализацию приведенного алгоритма мы выложим в open-sourсe.
Итак, в чем была проблема?
На наш backend-сервис (PHP-FPM) приходит до 70000 запросов в секунду, большую их часть составляет мобильный трафик. Нагрузку на сервера мы распределяем с помощью LTM и nginx. До недавнего времени веса для каждой машины в обоих кластерах выставлялись админами «на глаз», что давало немалый разброс по загрузке процессора, особенно в пике трафика.
Поскольку машин в мобильном кластере у нас больше 200, то нам бы хотелось уметь равномерно распределять нагрузку по машинам. Это позволяет улучшить отзывчивость сайта в пике трафика за счёт того, что машины не «перегружаются», и мы можем справиться с нагрузкой с помощью меньшего количества серверов.
Поскольку «ручная» балансировка показала себя плохо, мы решили сделать автоматическую. Мы попробовали несколько разных решений, но по сути они попадают в 2 категории:
1) использование какого-либо стабильного индекса производительности, который определяется автоматически и один раз;
2) попытка корректировать веса, немного изменяя их до тех пор, пока нагрузка не выровняется.
Первый способ плохо себя показал, поэтому мы использовали второй. Про него и будет мой доклад.