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

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

  • Upload
    rit2011

  • View
    230

  • Download
    2

Embed Size (px)

DESCRIPTION

 

Citation preview

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

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

Аверин  СергейBadoo

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

                         —  это:• Социальная  сеть  для  знакомств  с  новыми  людьми

• В  Top-­‐200  Alexa  c  2007  года

• 115  миллионов  зарегистрированных  пользователей

• 10  миллионов  пользователей  в  день

• 1,5  миллиона  фотографий  загружаются  ежедневно

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

                         —  это:• 30  тыс.  запросов/с  к  PHP  backends

• MySQL,  PHP,  C/C++,  Linux,  nginx,  memcached

• Много  своего

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

Badoo  Desktop• Бесплатная  Win/Mac  программа

• Поддерживает  ваш  онлайн-­‐статус  на  сайте  

• Уведомления  о  новых  событиях

• Дает  нам  местоположение  пользователя

• Удобный  доступ  к  разделам  badoo.com

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

Badoo  Desktop• 1,7  миллиона  пользователей  в  месяц  

• 680  тыс.  подключенных  программ  в  пике

• 17  тыс.  запросов/с  к  PHP  backends

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

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

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

Сценарий  работы1. Соединяемся  с  главным  фронтендом

2. Он  отправляет  нас  на  нужный  фронтенд

3. Создаем/восстанавливаем  сессию

4. Получаем  настройки,  перевод  и  меню

5. Показываем  уведомления

6. Посылаем  данные  о  wi-­‐fi  и  скрин-­‐сейвере

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

Набор  командИз  программы:

• Создание/Восстановление  сессии

• Авторизация

• Данные  о  wi-­‐fi  сетях,  работе  скрин-­‐сейвера

В  программу:

• Ваш  id  сессии,  язык  и  статус  авторизации

• Настройки,  перевод,  меню

• Уведомления

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

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

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

Принципы  работыПрограммы:

• Протокол  асинхронный

• Не  требует  ответа  на  большинство  команд

• Как  можно  более  простые  протокол  и  логика  программ

Server-­‐side:

• При  ошибке  не  пытаемся  восстановиться,  а  прерываем  обработку  команды

• Нам  не  нужна  100%  синхронность  данных

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

Специфика  приложения• Маленький  набор  и  размер  команд

• Большое  количество  постоянных  соединений

• Большой  поток  команд

• Обработка  одной  команды  занимает  мало  времени

• Время  ответа  сервера  не  так  критично,  как  для  веб-­‐страниц

• Ошибки  на  серверной  стороне  программы  сильно  не  расстраивают

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

Из  беты  в  устойчивую  систему

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

ОптимизацииПрофилирование  и  поиск  тормозов

• top  и  профилирование  мало  результативны

• Можно  улучшить,  изменив  логику  работы

• Real-­‐|me  профилирование  (PINBA)

• PINBA:  мониторинг  приложения,  а  не  железок

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

ОптимизацииЖелезно-­‐площадочные  оптимизации

• 4  сетевые  карты

• Минимум  конкуренции

• MemCacheDB  -­‐>  Redis  -­‐>  MySQL+HandlerSocket

• Жесткие  тайм-­‐ауты

• pconnect

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

ОптимизацииБорьба  с  положительной  обратной  связью

• Сам  себе  DDOS’ер

• Прогрессивные  паузы  между  командами/реконнектами

• Реконнект  на  свой  сервер

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

ОптимизацииClient-­‐side  кеширование  и  логика

• Программы  отслеживают  время  обновления  статуса

• Реже  обновляют  статус  при  скрин-­‐сейвере

• Дружат  с  медленными  соединениями

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

Оптимизации  Убираем  лишнюю  нагрузку

• Скешировали  все,  что  можно

• Ввели  rate-­‐limi|ng  обновления  данных

• Не  пишем,  если  не  поменялось

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

ОптимизацииПороговые  срабатывания

• Порог  на  изменение  сетевой  среды

-­‐ Для  медленных  изменений  принудительно  обновляем  раз  в  10  минут

• Порог  на  вычисление  города  по  координатам

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

ОптимизацииАсинхронность  и  пост-­‐обработка

• Ответ  на  команду  как  можно  раньше

• Все  сервисные  задачи  обрабатываем  отдельно

• Синхронизация  запуска  сервисных  задач

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

Заключение• Мониторинг  и  профилирование

-­‐ Необходимы

-­‐ Если  вы  выпилили  все  медленые  места  в  php-­‐коде,  вы  сделали  1/7

-­‐ Меняем  логику  работы  —  улучшаем  производительность  в  10  раз

• Предусмотрите  все  возможные  проблемы  заранее  

• We  build  wheels  while  exis|ng  suck  or  don't  exist

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

Спасибо!PINBA, php-fpm, патчи к PHP:

h�p://dev.badoo.com/

Контакты:

h�p://twi�er.com/ryba_xek

[email protected]

h�p://averin.ru/slides/