SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Полмиллиона  юзеров  в  онлайне  
без  падений:  оптимизация  
высоконагруженного  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/

Mais conteúdo relacionado

Mais procurados

Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
Sergey Xek
 
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
Ontico
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Sergey Xek
 
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Ontico
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
Mafiozi Performance1
Mafiozi Performance1Mafiozi Performance1
Mafiozi Performance1
barcamplv09
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 
сергей спиридонов
сергей спиридоновсергей спиридонов
сергей спиридонов
kuchinskaya
 
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest
 
Server-side JavaScript
Server-side JavaScriptServer-side JavaScript
Server-side JavaScript
Media Gorod
 
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
[JAM 1.0] CMS. Обзор. (Alexei Yanochkin)
Evgeny Kaziak
 
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Ontico
 

Mais procurados (20)

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

Destaque (12)

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

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

Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Anton Baranov
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
Alex Chistyakov
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
Roman Pavlushko
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
Alex Chistyakov
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailru
rit2010
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Sergey Xek
 
Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)
Ontico
 

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

Sivko
SivkoSivko
Sivko
 
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
FT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это простоFT & HA Rails приложений приложений — это просто
FT & HA Rails приложений приложений — это просто
 
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
 
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailru
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
 
Андрей Завадский "Бессерверная архитектура"
 Андрей Завадский "Бессерверная архитектура" Андрей Завадский "Бессерверная архитектура"
Андрей Завадский "Бессерверная архитектура"
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяны
 
Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)Pconnect: граната в руках обезьяны (Сергей Аверин)
Pconnect: граната в руках обезьяны (Сергей Аверин)
 

Mais de rit2011

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

Mais de rit2011 (20)

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