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




Аверин  Сергей
Badoo
                         —  это:
• Социальная  сеть  для  знакомств  с  новыми  людьми
• В  Top-­‐200  Alexa  c  2007  года
• 115  миллионов  зарегистрированных  пользователей
• 10  миллионов  пользователей  в  день
• 1,5  миллиона  фотографий  загружаются  ежедневно
                         —  это:
• 30  тыс.  запросов/с  к  PHP  backends
• MySQL,  PHP,  C/C++,  Linux,  nginx,  memcached
• Много  своего
Badoo  Desktop
• Бесплатная  Win/Mac  программа
• Поддерживает  ваш  онлайн-­‐статус  на  сайте  
• Уведомления  о  новых  событиях
• Дает  нам  местоположение  пользователя
• Удобный  доступ  к  разделам  badoo.com
Badoo  Desktop
• 1,7  миллиона  пользователей  в  месяц  
• 680  тыс.  подключенных  программ  в  пике
• 17  тыс.  запросов/с  к  PHP  backends
Поиск  тех,  кто  неподалеку
Сценарий  работы
    1. Соединяемся  с  главным  фронтендом
    2. Он  отправляет  нас  на  нужный  фронтенд
    3. Создаем/восстанавливаем  сессию
    4. Получаем  настройки,  перевод  и  меню
    5. Показываем  уведомления
    6. Посылаем  данные  о  wi-­‐fi  и  скрин-­‐сейвере
Набор  команд
Из  программы:
   • Создание/Восстановление  сессии
   • Авторизация
   • Данные  о  wi-­‐fi  сетях,  работе  скрин-­‐сейвера
В  программу:
   • Ваш  id  сессии,  язык  и  статус  авторизации
   • Настройки,  перевод,  меню
   • Уведомления
Server-­‐side  архитектура
Принципы  работы
Программы:
   • Протокол  асинхронный
   • Не  требует  ответа  на  большинство  команд
   • Как  можно  более  простые  протокол  и  логика  программ
Server-­‐side:
   • При  ошибке  не  пытаемся  восстановиться,  а  прерываем  обработку  
     команды
   • Нам  не  нужна  100%  синхронность  данных
Специфика  приложения
• Маленький  набор  и  размер  команд
• Большое  количество  постоянных  соединений
• Большой  поток  команд
• Обработка  одной  команды  занимает  мало  времени
• Время  ответа  сервера  не  так  критично,  как  для  веб-­‐страниц
• Ошибки  на  серверной  стороне  программы  сильно  не  расстраивают
Из  беты  в  устойчивую  систему
Оптимизации
Профилирование  и  поиск  тормозов
• top  и  профилирование  мало  результативны
• Можно  улучшить,  изменив  логику  работы
• Real-­‐|me  профилирование  (PINBA)
• PINBA:  мониторинг  приложения,  а  не  железок
Оптимизации
Железно-­‐площадочные  оптимизации
• 4  сетевые  карты
• Минимум  конкуренции
• MemCacheDB  -­‐>  Redis  -­‐>  MySQL+HandlerSocket
• Жесткие  тайм-­‐ауты
• pconnect
Оптимизации
Борьба  с  положительной  обратной  связью
• Сам  себе  DDOS’ер
• Прогрессивные  паузы  между  командами/реконнектами
• Реконнект  на  свой  сервер
Оптимизации
Client-­‐side  кеширование  и  логика
• Программы  отслеживают  время  обновления  статуса
• Реже  обновляют  статус  при  скрин-­‐сейвере
• Дружат  с  медленными  соединениями
Оптимизации
  Убираем  лишнюю  нагрузку
• Скешировали  все,  что  можно
• Ввели  rate-­‐limi|ng  обновления  данных
• Не  пишем,  если  не  поменялось
Оптимизации
Пороговые  срабатывания
• Порог  на  изменение  сетевой  среды
   -­‐ Для  медленных  изменений  принудительно  обновляем  раз  в  10  минут
• Порог  на  вычисление  города  по  координатам
Оптимизации
Асинхронность  и  пост-­‐обработка
• Ответ  на  команду  как  можно  раньше
• Все  сервисные  задачи  обрабатываем  отдельно
• Синхронизация  запуска  сервисных  задач
Заключение
• Мониторинг  и  профилирование
   -­‐ Необходимы
   -­‐ Если  вы  выпилили  все  медленые  места  в  php-­‐коде,  вы  сделали  1/7
   -­‐ Меняем  логику  работы  —  улучшаем  производительность  в  10  раз
• Предусмотрите  все  возможные  проблемы  заранее  
• We  build  wheels  while  exis|ng  suck  or  don't  exist
Спасибо!
PINBA, php-fpm, патчи к PHP:
   hŒp://dev.badoo.com/


         Контакты:
hŒp://twiŒer.com/ryba_xek
        s@averin.ru
   hŒp://averin.ru/slides/

More Related Content

PDF
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
PDF
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
PDF
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
PDF
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
PPT
Drupal 6 performance
PPTX
Балансировка нагрузки веб-серверов
PPSX
Сервер «Аллодов Онлайн». Архитектура и особенности разработки.
ODP
Зачем ускорять сайты
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Доклад Виталия Котова на конференции LoveQA. "Selenium тесты. От RC и одного ...
Drupal 6 performance
Балансировка нагрузки веб-серверов
Сервер «Аллодов Онлайн». Архитектура и особенности разработки.
Зачем ускорять сайты

What's hot (20)

PDF
Javascript-фреймворки:
 должен остаться только один
PPTX
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
PDF
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
PPTX
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
PDF
Как не положить тысячи серверов с помощью системы централизованного управлени...
PPT
Mafiozi Performance1
PPT
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
PPTX
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
PPTX
Организация надежного резервного копирования веб-проекта. Практика и подводны...
PPSX
Компонентная архитектура игровой механики MMORPG.
PPTX
Система управления конфигурациями Ansible
PPTX
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
PPTX
сергей спиридонов
PPT
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
PPT
Server-side JavaScript
PDF
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
PDF
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
PDF
Rsnx tsvetkov che btrix conf 2015
PPTX
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
PPTX
High load для начинающих
Javascript-фреймворки:
 должен остаться только один
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Mafiozi Performance1
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Компонентная архитектура игровой механики MMORPG.
Система управления конфигурациями Ansible
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
сергей спиридонов
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
Server-side JavaScript
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Rsnx tsvetkov che btrix conf 2015
Мониторинг веб-проектов real-time мониторинг и аналитика, поиск ошибок и боев...
High load для начинающих
Ad

Viewers also liked (12)

PPT
автоматизация Ecom expo
PDF
Atlantida el continente perdido de Platón
PDF
Bachelor degree
PPTX
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
PDF
Rebeliaodasmassas
PDF
20081026 structuralcomplexitytheory lecture05-06
DOCX
Ficha 1 93 ruben cruz e stone costa
PPTX
Human flora
PDF
20100228 virtualization igotti_lecture03
PDF
Lucy Isolators - Trojan Mini Street Lighting Isolators - 2 Way System
PDF
Bioinf lecture1
PPT
ANNA KARLA MOURA
автоматизация Ecom expo
Atlantida el continente perdido de Platón
Bachelor degree
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
Rebeliaodasmassas
20081026 structuralcomplexitytheory lecture05-06
Ficha 1 93 ruben cruz e stone costa
Human flora
20100228 virtualization igotti_lecture03
Lucy Isolators - Trojan Mini Street Lighting Isolators - 2 Way System
Bioinf lecture1
ANNA KARLA MOURA
Ad

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

PDF
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
PPTX
Hosting for forbes.ru_
PPTX
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
PPT
Development on the Knee by Vladimir Khramtsov
PPT
Highload2009 Rybak Badoo Os
PPTX
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
PPTX
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
PPTX
Chef @DevWeb
PDF
PDF
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
PDF
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
PPT
1С-Битрикс - Производительность
PPTX
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
PDF
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
PDF
Cергей Коржнев, 2ГИС
PDF
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
PPT
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
PDF
Павел Брылов, Skype
PDF
Облако в Badoo год спустя
PDF
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Hosting for forbes.ru_
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Development on the Knee by Vladimir Khramtsov
Highload2009 Rybak Badoo Os
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
(1 часть) 1С-Битрикс. Как настроить двухуровневую конфигурацию веб-приложения...
Chef @DevWeb
Горизонтальное масштабирование: что, зачем, когда и как /Александр Макаров (Y...
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
1С-Битрикс - Производительность
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
«Архитектура Справочного API 2ГИС» — Сергей Коржнев, 2ГИС
Cергей Коржнев, 2ГИС
PUG #9 at OWOX: Поиск узких мест в приложении на PHP
Тестирование и оптимизация 1С-Битрикс (Александр Демидов, Олег Бунин)
Павел Брылов, Skype
Облако в Badoo год спустя
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)

More from rit2011 (20)

PPT
классификация Ddos. александр лямин, артем гавриченков. зал 2
PDF
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
PPT
как объяснить заказчику, что он не прав. денис тучин. зал 3
PDF
классификация Ddos. александр лямин, артем гавриченков. зал 2
PPTX
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
PDF
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
PDF
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
PPT
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
PDF
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
PPT
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
PDF
как стать хорошим веб технологом. нарек мкртчян. зал 4
PPTX
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
PPT
выращиваем интерфейс своими руками. ольга павлова. зал 3
PDF
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
PPT
от Flash к html5. александр бацуев. зал 4
PPTX
Ie9 и ie10. алекс могилевский. зал 2
POTX
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
PPTX
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
PPTX
круглый стол по найму. александр зиза. зал 2
PDF
бэм! в.харисов, с. бережной. зал 2
классификация Ddos. александр лямин, артем гавриченков. зал 2
Chef. кто на кухне хозяин. концепция devops. а,титов. зал 2
как объяснить заказчику, что он не прав. денис тучин. зал 3
классификация Ddos. александр лямин, артем гавриченков. зал 2
Kpi разработчика vs kpi разработки. евгения фирсова. зал 1
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
ускорение Front end разработки с помощью haml, sass и compass. андрей ситник....
что и почему вы должны программировать на Erlang.максим лапшин. зал 4
I pv6 малоизвестные подробности. андрей пантюхин. зал 2
безопасность веб приложений сегодня. дмитрий евтеев. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
выращиваем интерфейс своими руками. ольга павлова. зал 3
распределенное файловое хранилище (Nginx, zfs, perl). перепелица мамонтов. зал 2
от Flash к html5. александр бацуев. зал 4
Ie9 и ie10. алекс могилевский. зал 2
рисуем тз. эффективный способ коммуникации в веб проектах. артем вольфтруб. з...
типология личности и прогноз отношений по а. афанасьеву. сергей котырев. зал 2
круглый стол по найму. александр зиза. зал 2
бэм! в.харисов, с. бережной. зал 2

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

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