Как мы сделали ровную балансировку нагрузки на...

Post on 06-Jan-2017

1.286 views 7 download

Transcript of Как мы сделали ровную балансировку нагрузки на...

Четкая, Ровная балансировка нагрузки на фронтенд-кластереЮрий Насретдинов

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