badoo desktop: оптимизация приложения на миллион юзеров...

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

Upload: sergey-xek

Post on 22-Jun-2015

420 views

Category:

Technology


3 download

DESCRIPTION

Badoo Desktop: оптимизация приложения на миллион юзеров онлайн. Сергей Аверин, Badoo. Доклад рассказывает о реально примененных способах оптимизации производительности API компании Badoo для собственных десктоп-приложений: как специфика «много постоянных соединений/однотипные запросы/большая нагрузка» повлияла на стратегию оптимизации производительности. Что было сделано: • Планирование архитектуры изначально (fault-tolerance, адаптивные апдейты и тайм-ауты, отказ от попыток восстановления после ошибок для единичных команд). • Переехали с redis на handlersocket. • Rate-limiting запросов к демонам. • Синхронизация записей. • Асинхронность. • Записи при достижении порога изменения параметров. • Профилирование кода, анализ потребления CPU, времени ответа. • Статистика, статистика и еще раз статистика. • Pconnect. Доклад будет интересен: • системным архитекторам, • server-side разработчикам.

TRANSCRIPT

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

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

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

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

                   —  это:

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

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

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

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

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

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

                   —  это:

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

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

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

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

Badoo  Desktop

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

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

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

• Дает нам ваше местоположение

• Удобный доступ на сайт

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

Badoo  Desktop

• 1,7 миллиона юзеров в месяц

• 680 тыс. постоянных коннектов

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

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

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

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

Сценарий работы

Соединяемся с главным фронтендом

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

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

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

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

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

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

Набор команд

Из программы:

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

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

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

В программу:

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

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

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

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

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

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

Принципы работы

Программы:

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

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

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

Server-side:

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

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

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

Специфика приложения

• Маленький набор и размер команд

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

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

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

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

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

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

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

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

Оптимизации

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

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

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

• Real-time профилирование (PINBA)

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

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

Оптимизации

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

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

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

• MemCacheDB -> Redis -> MySQL+HandlerSocket

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

• pconnect

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

Оптимизации

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

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

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

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

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

Оптимизации

Client-side кеширование и логика

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

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

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

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

Оптимизации

Убираем лишнюю нагрузку

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

• Ввели rate-limiting обновления данных

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

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

Оптимизации

Пороговые срабатывания

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

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

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

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

Оптимизации

Асинхронность и пост-обработка

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

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

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

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

Заключение

• Мониторинг и профилирование

• Необходимы

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

• Меняем логику работы — улучшаем в 10 раз

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

• We build wheels while existing suck or don't exist