Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Полмиллиона  юзеров  в  онлайне  без  падений:  оптимизация  высоконагруженного  server-­‐side  API  десктопного  приложен...
                         —  это:• Социальная  сеть  для  знакомств  с  новыми  людьми• В  Top-­‐200  Alexa  c  2007  года•...
                         —  это:• 30  тыс.  запросов/с  к  PHP  backends• MySQL,  PHP,  C/C++,  Linux,  nginx,  PHP-­‐FPM,...
Badoo  Desktop• Бесплатная  Win/Mac  программа• Поддерживает  ваш  онлайн-­‐статус  на  сайте  • Уведомления  о  новых  со...
Badoo  Desktop• 1,7  миллиона  пользователей  в  месяц  • 680  тыс.  подключенных  программ  в  пике• 17  тыс.  запросов/с...
Поиск  тех,  кто  неподалеку
Сценарий  работы    1. Соединяемся  с  главным  фронтендом    2. Он  отправляет  нас  на  нужный  фронтенд    3. Создаем/в...
Набор  командИз  программы:   • Создание/Восстановление  сессии   • Авторизация   • Данные  о  wi-­‐fi  сетях,  работе  скр...
Server-­‐side  архитектура
Принципы  работыПрограммы:   • Протокол  асинхронный   • Не  требует  ответа  на  большинство  команд   • Как  можно  боле...
Специфика  приложения• Маленький  набор  и  размер  команд• Большое  количество  постоянных  соединений• Большой  поток  к...
Из  беты  в  устойчивую  систему
ОптимизацииПрофилирование  и  поиск  тормозов• top  и  профилирование  мало  результативны• Можно  улучшить,  изменив  лог...
ОптимизацииЖелезно-­‐площадочные  оптимизации• 4  сетевые  карты• Минимум  конкуренции• MemCacheDB  -­‐>  Redis  -­‐>  MyS...
ОптимизацииБорьба  с  положительной  обратной  связью• Сам  себе  DDOS’ер• Прогрессивные  паузы  между  командами/реконнек...
ОптимизацииClient-­‐side  кеширование  и  логика• Программы  отслеживают  время  обновления  статуса• Реже  обновляют  ста...
Оптимизации  Убираем  лишнюю  нагрузку• Скешировали  все,  что  можно• Ввели  rate-­‐limi}ng  обновления  данных• Не  пише...
ОптимизацииПороговые  срабатывания• Порог  на  изменение  сетевой  среды   -­‐ Для  медленных  изменений  принудительно  о...
ОптимизацииАсинхронность  и  пост-­‐обработка• Ответ  на  команду  как  можно  раньше• Все  сервисные  задачи  обрабатывае...
Заключение• Мониторинг  и  профилирование   -­‐ Необходимы   -­‐ Если  вы  выпилили  все  медленые  места  в  php-­‐коде, ...
Спасибо!PINBA, PHP-FPM, патчи к PHP:   h•p://dev.badoo.com/         Контакты: h•p://twi•er.com/ryba_xek        s@averin.ru...
Nächste SlideShare
Wird geladen in …5
×

Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного server-side API десктопного приложения

827 Aufrufe

Veröffentlicht am

Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного server-side API десктопного приложения. Сергей Аверин, Badoo.

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

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

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

Veröffentlicht in: Technologie
  • Loggen Sie sich ein, um Kommentare anzuzeigen.

  • Gehören Sie zu den Ersten, denen das gefällt!

Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного server-side API десктопного приложения

  1. 1. Полмиллиона  юзеров  в  онлайне  без  падений:  оптимизация  высоконагруженного  server-­‐side  API  десктопного  приложенияАверин  Сергей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  программа• Поддерживает  ваш  онлайн-­‐статус  на  сайте  • Уведомления  о  новых  событиях• Дает  нам  местоположение  пользователя• Удобный  доступ  к  разделам  badoo.com
  5. 5. Badoo  Desktop• 1,7  миллиона  пользователей  в  месяц  • 680  тыс.  подключенных  программ  в  пике• 17  тыс.  запросов/с  к  PHP  backends
  6. 6. Поиск  тех,  кто  неподалеку
  7. 7. Сценарий  работы 1. Соединяемся  с  главным  фронтендом 2. Он  отправляет  нас  на  нужный  фронтенд 3. Создаем/восстанавливаем  сессию 4. Получаем  настройки,  перевод  и  меню 5. Показываем  уведомления 6. Посылаем  данные  о  wi-­‐fi  и  скрин-­‐сейвере
  8. 8. Набор  командИз  программы: • Создание/Восстановление  сессии • Авторизация • Данные  о  wi-­‐fi  сетях,  работе  скрин-­‐сейвераВ  программу: • Ваш  id  сессии,  язык  и  статус  авторизации • Настройки,  перевод,  меню • Уведомления
  9. 9. Server-­‐side  архитектура
  10. 10. Принципы  работыПрограммы: • Протокол  асинхронный • Не  требует  ответа  на  большинство  команд • Как  можно  более  простые  протокол  и  логика  программServer-­‐side: • При  ошибке  не  пытаемся  восстановиться,  а  прерываем  обработку   команды • Нам  не  нужна  100%  синхронность  данных
  11. 11. Специфика  приложения• Маленький  набор  и  размер  команд• Большое  количество  постоянных  соединений• Большой  поток  команд• Обработка  одной  команды  занимает  мало  времени• Время  ответа  сервера  не  так  критично,  как  для  веб-­‐страниц• Ошибки  на  серверной  стороне  программы  сильно  не  расстраивают
  12. 12. Из  беты  в  устойчивую  систему
  13. 13. ОптимизацииПрофилирование  и  поиск  тормозов• top  и  профилирование  мало  результативны• Можно  улучшить,  изменив  логику  работы• Real-­‐}me  профилирование  (PINBA)• PINBA:  мониторинг  приложения,  а  не  железок
  14. 14. ОптимизацииЖелезно-­‐площадочные  оптимизации• 4  сетевые  карты• Минимум  конкуренции• MemCacheDB  -­‐>  Redis  -­‐>  MySQL+HandlerSocket• Жесткие  тайм-­‐ауты• pconnect
  15. 15. ОптимизацииБорьба  с  положительной  обратной  связью• Сам  себе  DDOS’ер• Прогрессивные  паузы  между  командами/реконнектами• Реконнект  на  свой  сервер
  16. 16. ОптимизацииClient-­‐side  кеширование  и  логика• Программы  отслеживают  время  обновления  статуса• Реже  обновляют  статус  при  скрин-­‐сейвере• Дружат  с  медленными  соединениями
  17. 17. Оптимизации  Убираем  лишнюю  нагрузку• Скешировали  все,  что  можно• Ввели  rate-­‐limi}ng  обновления  данных• Не  пишем,  если  не  поменялось
  18. 18. ОптимизацииПороговые  срабатывания• Порог  на  изменение  сетевой  среды -­‐ Для  медленных  изменений  принудительно  обновляем  раз  в  10  минут• Порог  на  вычисление  города  по  координатам
  19. 19. ОптимизацииАсинхронность  и  пост-­‐обработка• Ответ  на  команду  как  можно  раньше• Все  сервисные  задачи  обрабатываем  отдельно• Синхронизация  запуска  сервисных  задач
  20. 20. Заключение• Мониторинг  и  профилирование -­‐ Необходимы -­‐ Если  вы  выпилили  все  медленые  места  в  php-­‐коде,  вы  сделали  1/7 -­‐ Меняем  логику  работы  —  улучшаем  производительность  в  10  раз• Предусмотрите  все  возможные  проблемы  заранее  • We  build  wheels  while  exis}ng  suck  or  dont  exist
  21. 21. Спасибо!PINBA, PHP-FPM, патчи к PHP: h•p://dev.badoo.com/ Контакты: h•p://twi•er.com/ryba_xek s@averin.ru h•p://averin.ru/slides/

×