HighLoad++ 2015 завершён! Ждём вас в 2016 году!

Профессиональная конференция разработчиков высоконагруженных систем

2 и 3 ноября 2015 Крокус-Экспо МОСКВА
Профессиональная конференция разработчиков высоконагруженных систем

Как мы сделали ровную балансировку нагрузки на фронтенд-кластере
Архитектуры

Доклад принят в Программу конференции
Badoo

Разработчик «платформы» в компании Badoo.

В компании занимаюсь всем подряд, но можно выделить основные компоненты:
- система переводов (прозрачное вычленение лексем из HTML-шаблонов, многоверсионность, интеграция с git);
- деплой-утилиты (PHP-код, статика);
- «облако» для запуска CLI-скриптов (обеспечивает запуск 3 тыс. запусков заданий в секунду на 200 серверах);
- подбор весов для балансировки нагрузки на веб-кластерах (около 500 хостов);
- мелкие демона на go, в том числе для доставки событий и логов (доставка и роутинг сотен тысяч событий в секунду).

До Badoo работал в паре мест и занимался full-stack веб-разработкой на PHP и JS.

Тезисы

В докладе я расскажу о том, как мы добились идеально ровной балансировки нагрузки по кластеру из 200+ серверов, реализовали автоматический подбор весов и получили разброс CPU usage в 2,5% в пике трафика. Это позволило сэкономить нам около 40-50 серверов и улучшить время отклика мобильного сайта в пике нагрузки. Реализацию приведенного алгоритма мы выложим в open-sourсe.

Итак, в чем была проблема?

На наш backend-сервис (PHP-FPM) приходит до 70000 запросов в секунду, большую их часть составляет мобильный трафик. Нагрузку на сервера мы распределяем с помощью LTM и nginx. До недавнего времени веса для каждой машины в обоих кластерах выставлялись админами «на глаз», что давало немалый разброс по загрузке процессора, особенно в пике трафика.

Поскольку машин в мобильном кластере у нас больше 200, то нам бы хотелось уметь равномерно распределять нагрузку по машинам. Это позволяет улучшить отзывчивость сайта в пике трафика за счёт того, что машины не «перегружаются», и мы можем справиться с нагрузкой с помощью меньшего количества серверов.

Поскольку «ручная» балансировка показала себя плохо, мы решили сделать автоматическую. Мы попробовали несколько разных решений, но по сути они попадают в 2 категории:
1) использование какого-либо стабильного индекса производительности, который определяется автоматически и один раз;
2) попытка корректировать веса, немного изменяя их до тех пор, пока нагрузка не выровняется.

Первый способ плохо себя показал, поэтому мы использовали второй. Про него и будет мой доклад.

Другие доклады секции
Архитектуры

НП "Центр Прикладных Исследований Компьютерных Сетей"
Rambler's Top100