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