Доклад о том, как мы добились идеально ровной балансировки нагрузки по кластеру из 200+ серверов, реализовали автоматический подбор весов и получили разброс CPU usage в 2,5% в пике трафика. Это позволило сэкономить нам около 40-50 серверов и улучшить время отклика мобильного сайта в пике нагрузки. Реализацию приведенного алгоритма мы выложим в open-sourсe. Доклад Юрия Насретдинова на Highload 2015.
8. Балансировка нагрузки
• Балансировка —
распределение нагрузки по
набору серверов
• Чем равномернее
распределение, тем меньше
нужно серверов и лучше User
Experience
8
25. Проблемы
• Как не перегрузить машину?
• Что делать, если веса не
применяются?
• Как удалять машины?
• Максимальный вес для LTM
— 100, как быть?
25
26. Как не перегрузить машину
• Ограничение на множитель
• coef > 0.9 — не меньше -10% за раз
• coef < 1.05 — не больше +5% за раз
• weight >= 20 — вес целый, поэтому
5% должно быть не меньше 1
• Обновление веса раз в 15 минут
26
27. Нарушение обратной связи
• Ограничения на:
Вес на ядро (max:min=3:1)
Общий вес (max=1000)
Число ядер (max=500)
27
28. Как удалять машины
• Машина не отвечает на
heartbeat
• На кластере достаточно
CPU, чтобы обработать
пик трафика без этой
машины
28
30. Выводы
• Взвешенный round-robin работает
• Статические веса плохо работают
• Динамическое выставление весов дало
разброс всего 2,5%
• Админы избавлены от задачи ручного
подбора весов
• Большая экономия за счёт масштаба
(до 50 серверов в Badoo)
30