Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Badoo Desktop:оптимизация приложения на  миллион юзеров онлайн       Аверин Сергей, Badoo
                   —  это:• Социальная сеть для знакомств с новыми людьми• В Top-200 Alexa c 2007 года• 115 миллионов заре...
                   —  это:• 30 тыс. запросов/с к PHP backends• MySQL, PHP, C/C++, Linux, nginx, PHP-FPM, memcached• Много ...
Badoo  Desktop• Бесплатная Win/Mac программа• Поддерживает ваш онлайн-статус• Уведомления о новых событиях• Дает нам ваше ...
Badoo  Desktop• 1,7 миллиона юзеров в месяц• 680 тыс. постоянных коннектов• 17 тыс. запросов/с к PHP backends
Поиск тех, кто неподалеку
Сценарий работы  Соединяемся с главным фронтендом  Он отправляет нас на нужный фронтенд  Создаем/восстанавливаем сессию  П...
Набор командИз программы:  • Создание/Восстановление сессии  • Авторизация  • Данные о wi-fi сетях, работе скрин-сейвераВ ...
Server-side архитектура
Принципы работыПрограммы:  • Протокол асинхронный  • Не требует ответа на большинство команд  • Как можно более простые пр...
Специфика приложения• Маленький набор и размер команд• Большое количество постоянных соединений• Большой поток команд• Обр...
Из беты в устойчивую систему
ОптимизацииПрофилирование и поиск тормозов• Top и профилирование мало результативны• Можно улучшить, изменив логику работы...
ОптимизацииЖелезно-площадочные оптимизации• 4 сетевые карты• Минимум конкуренции• MemCacheDB -> Redis -> MySQL+HandlerSock...
ОптимизацииБорьба с положительной обратной связью• Сам себе DDOS’ер• Прогрессивные паузы между командами/реконнектами• Рек...
ОптимизацииClient-side кеширование и логика• Программы отслеживают время обновления статуса• Реже обновляют статус при скр...
ОптимизацииУбираем лишнюю нагрузку• Скешировали все, что можно• Ввели rate-limiting обновления данных• Не пишем, если не п...
ОптимизацииПороговые срабатывания• Порог на изменение сетевой среды   – Для медленных изменений принудительно обновляем   ...
ОптимизацииАсинхронность и пост-обработка• Ответ на команду как можно раньше• Все сервисные задачи обрабатываем отдельно• ...
Заключение• Мониторинг и профилирование• Необходимы• Если вы выпилили все медленые места в php-коде, вы  сделали 1/7• Меня...
Спасибо!PINBA, PHP-FPM, патчи к PHP:   http://dev.badoo.com/         Контакты:http://twitter.com/ryba_xek        s@averin....
Upcoming SlideShare
Loading in …5
×

Badoo Desktop: оптимизация приложения на миллион юзеров онлайн

1,300 views

Published on

Badoo Desktop: оптимизация приложения на миллион юзеров онлайн. Сергей Аверин, Badoo.

Доклад рассказывает о реально примененных способах оптимизации производительности API компании Badoo для собственных десктоп-приложений: как специфика «много постоянных соединений/однотипные запросы/большая нагрузка» повлияла на стратегию оптимизации производительности.

Что было сделано:
• Планирование архитектуры изначально (fault-tolerance, адаптивные апдейты и тайм-ауты, отказ от попыток восстановления после ошибок для единичных команд).
• Переехали с redis на handlersocket.
• Rate-limiting запросов к демонам.
• Синхронизация записей.
• Асинхронность.
• Записи при достижении порога изменения параметров.
• Профилирование кода, анализ потребления CPU, времени ответа.
• Статистика, статистика и еще раз статистика.
• Pconnect.

Доклад будет интересен:
• системным архитекторам,
• server-side разработчикам.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Badoo Desktop: оптимизация приложения на миллион юзеров онлайн

  1. 1. Badoo Desktop:оптимизация приложения на миллион юзеров онлайн Аверин Сергей, Badoo
  2. 2.                    —  это:• Социальная сеть для знакомств с новыми людьми• В Top-200 Alexa c 2007 года• 115 миллионов зарегистрированных пользователей• 10 миллионов пользователей в день• 1,5 миллиона фотографий загружаются ежедневно
  3. 3.                    —  это:• 30 тыс. запросов/с к PHP backends• MySQL, PHP, C/C++, Linux, nginx, PHP-FPM, memcached• Много своего
  4. 4. Badoo  Desktop• Бесплатная Win/Mac программа• Поддерживает ваш онлайн-статус• Уведомления о новых событиях• Дает нам ваше местоположение• Удобный доступ на сайт
  5. 5. Badoo  Desktop• 1,7 миллиона юзеров в месяц• 680 тыс. постоянных коннектов• 17 тыс. запросов/с к PHP backends
  6. 6. Поиск тех, кто неподалеку
  7. 7. Сценарий работы Соединяемся с главным фронтендом Он отправляет нас на нужный фронтенд Создаем/восстанавливаем сессию Получаем настройки, перевод и меню Показываем уведомления Посылаем данные о wi-fi и скринсейвере
  8. 8. Набор командИз программы: • Создание/Восстановление сессии • Авторизация • Данные о wi-fi сетях, работе скрин-сейвераВ программу: • Ваш id сессии, язык и статус авторизации • Настройки, перевод, меню • Уведомления
  9. 9. Server-side архитектура
  10. 10. Принципы работыПрограммы: • Протокол асинхронный • Не требует ответа на большинство команд • Как можно более простые протокол и логика программServer-side: • При ошибке не пытаемся восстановиться, а прерываем обработку команды • Нам не нужна 100% синхронность данных
  11. 11. Специфика приложения• Маленький набор и размер команд• Большое количество постоянных соединений• Большой поток команд• Обработка одной команды занимает мало времени• Время ответа не так критично, как для веб-страниц• Ошибки на серверной стороне программы сильно не расстраивают
  12. 12. Из беты в устойчивую систему
  13. 13. ОптимизацииПрофилирование и поиск тормозов• Top и профилирование мало результативны• Можно улучшить, изменив логику работы• Real-time профилирование (PINBA)• PINBA: мониторинг приложения, а не железок
  14. 14. ОптимизацииЖелезно-площадочные оптимизации• 4 сетевые карты• Минимум конкуренции• MemCacheDB -> Redis -> MySQL+HandlerSocket• Жесткие тайм-ауты• pconnect
  15. 15. ОптимизацииБорьба с положительной обратной связью• Сам себе DDOS’ер• Прогрессивные паузы между командами/реконнектами• Реконнект на свой сервер
  16. 16. ОптимизацииClient-side кеширование и логика• Программы отслеживают время обновления статуса• Реже обновляют статус при скрин-сейвере• Дружат с медленными соединениями
  17. 17. ОптимизацииУбираем лишнюю нагрузку• Скешировали все, что можно• Ввели rate-limiting обновления данных• Не пишем, если не поменялось
  18. 18. ОптимизацииПороговые срабатывания• Порог на изменение сетевой среды – Для медленных изменений принудительно обновляем раз в 10 минут• Порог на вычисление города по координатам
  19. 19. ОптимизацииАсинхронность и пост-обработка• Ответ на команду как можно раньше• Все сервисные задачи обрабатываем отдельно• Синхронизация запуска сервисных задач
  20. 20. Заключение• Мониторинг и профилирование• Необходимы• Если вы выпилили все медленые места в php-коде, вы сделали 1/7• Меняем логику работы — улучшаем в 10 раз• Предусмотрите все возможные проблемы заранее• We build wheels while existing suck or dont exist
  21. 21. Спасибо!PINBA, PHP-FPM, патчи к PHP: http://dev.badoo.com/ Контакты:http://twitter.com/ryba_xek s@averin.ru http://averin.ru/slides/

×