![Page 1: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/1.jpg)
Четкая, Ровная балансировка нагрузки на фронтенд-кластереЮрий Насретдинов
1
![Page 2: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/2.jpg)
О компании
2
5M загрузок фото в день
270M пользователей
70K RPS на PHP-FPM3K серверов
400K регистраций в сутки
50 языков перевода
![Page 3: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/3.jpg)
План• Архитектура Badoo • Алгоритмы балансировки • «Ручная» балансировка • Автоматический подбор весов
• Выводы, open-source
3
![Page 4: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/4.jpg)
План• Архитектура Badoo • Алгоритмы балансировки • «Ручная» балансировка • Автоматический подбор весов
• Выводы, open-source
4
![Page 5: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/5.jpg)
Архитектура Badoo
5
Local Traffic Manager ®™
Global Traffic Manager ®™
mobile backend
web backend
![Page 6: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/6.jpg)
Архитектура Badoo• GTM выбирает ДЦ • LTM передает мобильный трафик на nginx
• Веб-трафик балансируется через LTM
• Nginx проксирует запросы на мобильный кластер
6
![Page 7: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/7.jpg)
План• Архитектура Badoo • Алгоритмы балансировки • «Ручная» балансировка • Автоматический подбор весов
• Выводы, open-source
7
![Page 8: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/8.jpg)
Балансировка нагрузки• Балансировка — распределение нагрузки по набору серверов
• Чем равномернее распределение, тем меньше нужно серверов и лучше User Experience
8
![Page 9: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/9.jpg)
Алгоритмы балансировки
• “Dumb” • Round-robin • Weighted round-robin • “Smart”
9
![Page 10: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/10.jpg)
“Dumb”• Simple: proxy_pass server1 • Sticky: client_ip % cnt • Random
10
![Page 11: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/11.jpg)
Round-robin• Каждый следующий запрос на следующий (живой) сервер
• Равномерное распределение нагрузки в случае одинаковых запросов
11
![Page 12: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/12.jpg)
Weighted Round-robin• Каждый сервер имеет свой «вес»
• Чем больше вес, тем больший процент запросов сервер получит
12
![Page 13: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/13.jpg)
“Smart”• Least Connections • Weighted Least Connections • Weighted RR with dynamic
weights • Response time balancing
13
![Page 14: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/14.jpg)
План• Архитектура Badoo • Алгоритмы балансировки • «Ручная» балансировка • Автоматический подбор весов
• Выводы, open-source
14
![Page 15: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/15.jpg)
Ручная балансировка
15
![Page 16: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/16.jpg)
16
![Page 17: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/17.jpg)
Ручная балансировка• Подбор весов делался админами при добавлении новых машин
• Разброс CPU usage 20-30%
17
![Page 18: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/18.jpg)
План• Архитектура Badoo • Алгоритмы балансировки • «Ручная» балансировка • Автоматический подбор весов
• Выводы, open-source
18
![Page 19: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/19.jpg)
Автоматический подбор весов
• Статический: индекс производительности машины
• Динамический: менять вес со временем, в зависимости от нагрузки
19
![Page 20: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/20.jpg)
Индекс производительности
20
CPU usagePerformance
![Page 21: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/21.jpg)
Статический вес• Производительность непостоянна
• Особенно на виртуальных машинах
• Нужно брать макс. производительность?
21
![Page 22: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/22.jpg)
Динамический вес• Постепенное «уточнение весов» • new = old * coef • coef = (avg cpu) / (cur cpu) • Предполагаем линейную зависимость %CPU от веса
• Отрицательная обратная связь
22
![Page 23: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/23.jpg)
23
![Page 24: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/24.jpg)
24
![Page 25: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/25.jpg)
Проблемы• Как не перегрузить машину? • Что делать, если веса не применяются?
• Как удалять машины? • Максимальный вес для LTM
— 100, как быть?
25
![Page 26: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/26.jpg)
Как не перегрузить машину
• Ограничение на множитель • coef > 0.9 — не меньше -10% за раз • coef < 1.05 — не больше +5% за раз • weight >= 20 — вес целый, поэтому
5% должно быть не меньше 1 • Обновление веса раз в 15 минут
26
![Page 27: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/27.jpg)
Нарушение обратной связи
• Ограничения на: Вес на ядро (max:min=3:1)Общий вес (max=1000)Число ядер (max=500)
27
![Page 28: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/28.jpg)
Как удалять машины• Машина не отвечает на
heartbeat • На кластере достаточно
CPU, чтобы обработать пик трафика без этой машины
28
![Page 29: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/29.jpg)
План• Архитектура Badoo • Алгоритмы балансировки • «Ручная» балансировка • Автоматический подбор весов
• Выводы, open-source
29
![Page 30: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/30.jpg)
Выводы• Взвешенный round-robin работает • Статические веса плохо работают • Динамическое выставление весов дало разброс всего 2,5%
• Админы избавлены от задачи ручного подбора весов
• Большая экономия за счёт масштаба (до 50 серверов в Badoo)
30
![Page 31: Ровная балансировка нагрузки на фронтенд-кластере](https://reader031.vdocuments.pub/reader031/viewer/2022020717/58815d5b1a28ab80508b5009/html5/thumbnails/31.jpg)
Open-source
31
Балансировщик: https://github.com/badoo/balancer/
Остальные проекты: https://tech.badoo.com/open-source/