Четкая,
Ровная балансировка
нагрузки на
фронтенд-кластере
Юрий Насретдинов
1
О компании
2
5M загрузок фото в день
270M пользователей
70K RPS на PHP-FPM
3K серверов
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

More Related Content

PPTX
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
PDF
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
PDF
Javascript-фреймворки:
 должен остаться только один
PDF
Near-realtime аналитика событий в высоконагруженном проекте
PDF
Ровная балансировка нагрузки на фронтенд-кластере
PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
PDF
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Javascript-фреймворки:
 должен остаться только один
Near-realtime аналитика событий в высоконагруженном проекте
Ровная балансировка нагрузки на фронтенд-кластере
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
NodeJS в HighLoad проекте / Акрицкий Владимир (iAge Engineering)

What's hot (20)

PPTX
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
PDF
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
PPTX
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
PDF
Балансировка нагрузки и отказоустойчивость в Одноклассниках
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
PDF
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
PPTX
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
PDF
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
PDF
Юрий Насретдинов, Badoo
PPTX
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
PDF
My talk at Highload++ 2015
PDF
Архитектура HAWQ / Алексей Грищенко (Pivotal)
PDF
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
PDF
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
PPTX
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
PPTX
Масштабирование баз данных. (Database Scalability)
PDF
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
PDF
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
PDF
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
PPTX
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Виртуальный ЦОД для корпоративных клиентов на базе Virtuozzo: стабильность, п...
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
101 способ приготовления RabbitMQ и немного о pipeline архитектуре / Филонов ...
Балансировка нагрузки и отказоустойчивость в Одноклассниках
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Стратегия и тактика улучшения производительности BSS систем оператора мобильн...
Сравнение решений по балансировке высоконагруженных систем / Евгений Пивень (...
Юрий Насретдинов, Badoo
Мастер-класс "Микросервисы: удобно, надежно, серебрянопульно" / Евгений Павло...
My talk at Highload++ 2015
Архитектура HAWQ / Алексей Грищенко (Pivotal)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
Производительность WebGL-приложений / Дмитренко Кирилл (Яндекс)
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Масштабирование баз данных. (Database Scalability)
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Брокер сообщений Kafka в условиях повышенной нагрузки / Артём Выборнов (Rambl...
Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)
Как SRE следит за стабильностью и скоростью HeadHunter / Антон Иванов (HeadHu...
Ad

Viewers also liked (20)

PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
PPTX
Как устроен поиск / Андрей Аксенов (Sphinx)
PDF
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
PPTX
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
PDF
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
PDF
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
PDF
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
PDF
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
PPT
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
PPTX
Object-oriented Network Function Virtualization / Антоненко Виталий (ЦПИКС)
PDF
Визуализация данных в браузере с помощью D3.js / Михаил Дунаев (Rambler&Co)
PDF
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
PDF
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
PDF
Высоконагруженная отправка push-уведомлений / Алексей Акулович
PDF
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
PDF
Максим Дунин, Nginx, Inc.
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Сага о кластере. Все что вы хотели знать про горизонтальное масштабирование в...
Как устроен поиск / Андрей Аксенов (Sphinx)
Как балансировать на «сетевом» канате под куполом тяжелой нагрузки? / Сергей ...
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Какие бывают провайдеры услуг дата-центров и как выбрать оптимальный? / Игорь...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Производительность запросов в PostgreSQL - шаг за шагом / Илья Космодемьянски...
NoSQL - коротко о главном / Сергей Туленцев (TextMaster)
Кэширование данных в web приложениях. Использование memcached / Юрий Красноще...
Бинарные (файловые) хранилища: страшная сказка с мрачным концом / Даниил Подо...
С чего начать внедрение Hadoop в компании / Алексей Еремихин (Badoo)
Tarantool: как сэкономить миллион долларов на базе данных на высоконагруженно...
Object-oriented Network Function Virtualization / Антоненко Виталий (ЦПИКС)
Визуализация данных в браузере с помощью D3.js / Михаил Дунаев (Rambler&Co)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Near-realtime аналитика событий в высоконагруженном проекте / Александр Краше...
Высоконагруженная отправка push-уведомлений / Алексей Акулович
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Максим Дунин, Nginx, Inc.
Ad

More from Ontico (20)

PDF
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
PDF
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
PPTX
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
PDF
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PDF
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
PDF
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
PPTX
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
PDF
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
PPTX
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
PPTX
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
PDF
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
PPT
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
PPTX
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
PPTX
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
PPTX
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
PPTX
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...

Как мы сделали ровную балансировку нагрузки на фронтенд-кластере / Насретдинов Юрий (Badoo)