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.
Полмиллиона  юзеров  в  онлайне  без  падений:  оптимизация  высоконагруженного  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...
Upcoming SlideShare
Loading in …5
×

полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server side api десктопного приложения. с.аверин. зал 1

1,029 views

Published on

Published in: Technology
  • Be the first to comment

полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server side api десктопного приложения. с.аверин. зал 1

  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/

×