Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Badoo Desktop:
оптимизация приложения на
  миллион юзеров онлайн
       Аверин Сергей, Badoo
                   —  это:
• Социальная сеть для знакомств с новыми людьми
• В Top-200 Alexa c 2007 года
• 115 миллионов зарегистрированных пользователей
• 10 миллионов пользователей в день
• 1,5 миллиона фотографий загружаются ежедневно
                   —  это:
• 30 тыс. запросов/с к PHP backends
• MySQL, PHP, C/C++, Linux, nginx, PHP-FPM, memcached
• Много своего
Badoo  Desktop
• Бесплатная Win/Mac программа
• Поддерживает ваш онлайн-статус
• Уведомления о новых событиях
• Дает нам ваше местоположение
• Удобный доступ на сайт
Badoo  Desktop
• 1,7 миллиона юзеров в месяц
• 680 тыс. постоянных коннектов
• 17 тыс. запросов/с к PHP backends
Поиск тех, кто неподалеку
Сценарий работы

  Соединяемся с главным фронтендом
  Он отправляет нас на нужный фронтенд
  Создаем/восстанавливаем сессию
  Получаем настройки, перевод и меню
  Показываем уведомления
  Посылаем данные о wi-fi и скринсейвере
Набор команд

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

Программы:
  • Протокол асинхронный
  • Не требует ответа на большинство команд
  • Как можно более простые протокол и логика программ
Server-side:
  • При ошибке не пытаемся восстановиться, а
    прерываем обработку команды
  • Нам не нужна 100% синхронность данных
Специфика приложения

• Маленький набор и размер команд
• Большое количество постоянных соединений
• Большой поток команд
• Обработка одной команды занимает мало времени
• Время ответа не так критично, как для веб-страниц
• Ошибки на серверной стороне программы сильно не
  расстраивают
Из беты в устойчивую систему
Оптимизации

Профилирование и поиск тормозов
• Top и профилирование мало результативны
• Можно улучшить, изменив логику работы
• Real-time профилирование (PINBA)
• PINBA: мониторинг приложения, а не железок
Оптимизации

Железно-площадочные оптимизации
• 4 сетевые карты
• Минимум конкуренции
• MemCacheDB -> Redis -> MySQL+HandlerSocket
• Жесткие тайм-ауты
• pconnect
Оптимизации

Борьба с положительной обратной связью
• Сам себе DDOS’ер
• Прогрессивные паузы между командами/реконнектами
• Реконнект на свой сервер
Оптимизации

Client-side кеширование и логика
• Программы отслеживают время обновления статуса
• Реже обновляют статус при скрин-сейвере
• Дружат с медленными соединениями
Оптимизации

Убираем лишнюю нагрузку
• Скешировали все, что можно
• Ввели rate-limiting обновления данных
• Не пишем, если не поменялось
Оптимизации

Пороговые срабатывания
• Порог на изменение сетевой среды
   – Для медленных изменений принудительно обновляем
     раз в 10 минут
• Порог на вычисление города по координатам
Оптимизации

Асинхронность и пост-обработка
• Ответ на команду как можно раньше
• Все сервисные задачи обрабатываем отдельно
• Синхронизация запуска сервисных задач
Заключение

• Мониторинг и профилирование
• Необходимы
• Если вы выпилили все медленые места в php-коде, вы
  сделали 1/7
• Меняем логику работы — улучшаем в 10 раз
• Предусмотрите все возможные проблемы заранее
• We build wheels while existing suck or don't exist
Спасибо!

PINBA, PHP-FPM, патчи к PHP:
   http://dev.badoo.com/


         Контакты:
http://twitter.com/ryba_xek
        s@averin.ru
  http://averin.ru/slides/

More Related Content

Badoo Desktop: оптимизация приложения на миллион юзеров онлайн

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