Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного server-side API десктопного приложения
•
0 likes•577 views
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного server-side API десктопного приложения. Сергей Аверин, Badoo.
Доклад рассказывает о реально примененных способах оптимизации производительности API компании Badoo для собственных десктоп-приложений: как специфика «много постоянных соединений/однотипные запросы/большая нагрузка» повлияла на стратегию оптимизации производительности.
Что было сделано:
• Планирование архитектуры изначально (fault-tolerance, адаптивные апдейты и тайм-ауты, отказ от попыток восстановления после ошибок для единичных команд).
• Переехали с redis на handlersocket.
• Rate-limiting запросов к демонам.
• Синхронизация записей.
• Асинхронность.
• Записи при достижении порога изменения параметров.
• Профилирование кода, анализ потребления CPU, времени ответа.
• Статистика, статистика и еще раз статистика.
• Pconnect.
Доклад будет интересен:
• системным архитекторам,
• server-side разработчикам.
1 of 21
Download to read offline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
More Related Content
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного server-side API десктопного приложения
1. Полмиллиона юзеров в онлайне
без падений: оптимизация
высоконагруженного server-‐side
API десктопного приложения
Аверин Сергей
Badoo
2. — это:
• Социальная сеть для знакомств с новыми людьми
• В Top-‐200 Alexa c 2007 года
• 115 миллионов зарегистрированных пользователей
• 10 миллионов пользователей в день
• 1,5 миллиона фотографий загружаются ежедневно
3. — это:
• 30 тыс. запросов/с к PHP backends
• MySQL, PHP, C/C++, Linux, nginx, PHP-‐FPM, memcached
• Много своего
4. Badoo Desktop
• Бесплатная Win/Mac программа
• Поддерживает ваш онлайн-‐статус на сайте
• Уведомления о новых событиях
• Дает нам местоположение пользователя
• Удобный доступ к разделам badoo.com
5. Badoo Desktop
• 1,7 миллиона пользователей в месяц
• 680 тыс. подключенных программ в пике
• 17 тыс. запросов/с к PHP backends
7. Сценарий работы
1. Соединяемся с главным фронтендом
2. Он отправляет нас на нужный фронтенд
3. Создаем/восстанавливаем сессию
4. Получаем настройки, перевод и меню
5. Показываем уведомления
6. Посылаем данные о wi-‐fi и скрин-‐сейвере
8. Набор команд
Из программы:
• Создание/Восстановление сессии
• Авторизация
• Данные о wi-‐fi сетях, работе скрин-‐сейвера
В программу:
• Ваш id сессии, язык и статус авторизации
• Настройки, перевод, меню
• Уведомления
10. Принципы работы
Программы:
• Протокол асинхронный
• Не требует ответа на большинство команд
• Как можно более простые протокол и логика программ
Server-‐side:
• При ошибке не пытаемся восстановиться, а прерываем обработку
команды
• Нам не нужна 100% синхронность данных
11. Специфика приложения
• Маленький набор и размер команд
• Большое количество постоянных соединений
• Большой поток команд
• Обработка одной команды занимает мало времени
• Время ответа сервера не так критично, как для веб-‐страниц
• Ошибки на серверной стороне программы сильно не расстраивают
13. Оптимизации
Профилирование и поиск тормозов
• top и профилирование мало результативны
• Можно улучшить, изменив логику работы
• Real-‐}me профилирование (PINBA)
• PINBA: мониторинг приложения, а не железок
15. Оптимизации
Борьба с положительной обратной связью
• Сам себе DDOS’ер
• Прогрессивные паузы между командами/реконнектами
• Реконнект на свой сервер
16. Оптимизации
Client-‐side кеширование и логика
• Программы отслеживают время обновления статуса
• Реже обновляют статус при скрин-‐сейвере
• Дружат с медленными соединениями
17. Оптимизации
Убираем лишнюю нагрузку
• Скешировали все, что можно
• Ввели rate-‐limi}ng обновления данных
• Не пишем, если не поменялось
18. Оптимизации
Пороговые срабатывания
• Порог на изменение сетевой среды
-‐ Для медленных изменений принудительно обновляем раз в 10 минут
• Порог на вычисление города по координатам
20. Заключение
• Мониторинг и профилирование
-‐ Необходимы
-‐ Если вы выпилили все медленые места в php-‐коде, вы сделали 1/7
-‐ Меняем логику работы — улучшаем производительность в 10 раз
• Предусмотрите все возможные проблемы заранее
• We build wheels while exis}ng suck or don't exist