Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo

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

6

Поиск  тех,  кто  неподалеку

7

Сценарий  работы
    1. Соединяемся  с  главным  фронтендом
    2. Он  отправляет  нас  на  нужный  фронтенд
    3. Создаем/восстанавливаем  сессию
    4. Получаем  настройки,  перевод  и  меню
    5. Показываем  уведомления
    6. Посылаем  данные  о  wi-­‐fi  и  скрин-­‐сейвере

8

Набор  команд
Из  программы:
   • Создание/Восстановление  сессии
   • Авторизация
   • Данные  о  wi-­‐fi  сетях,  работе  скрин-­‐сейвера
В  программу:
   • Ваш  id  сессии,  язык  и  статус  авторизации
   • Настройки,  перевод,  меню
   • Уведомления

9

Server-­‐side  архитектура

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/

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
  • 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/