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,  PHP-­‐FPM,  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

Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Поддержка высоконагруженного проекта: мониторинг, резервирование, обслуживани...
Ontico
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
Ontico
 
Mafiozi Performance1
Mafiozi Performance1Mafiozi Performance1
Mafiozi Performance1
barcamplv09
 
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
Ontico
 
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...
Ontico
 
сергей спиридонов
сергей спиридоновсергей спиридонов
сергей спиридонов
kuchinskaya
 
Server-side JavaScript
Server-side JavaScriptServer-side JavaScript
Server-side JavaScript
Media Gorod
 
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest 2010. Игумнов Е. — Особенности архитектуры веб-сервисов LAMP для выс...
CodeFest
 
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
AWS и GCP: трудная жизнь в облаках / Максим Пугачев (IPONWEB)
Ontico
 
Брокер сообщений Kafka в условиях повышенной нагрузки
Брокер сообщений Kafka в условиях повышенной нагрузкиБрокер сообщений Kafka в условиях повышенной нагрузки
Брокер сообщений Kafka в условиях повышенной нагрузки
Artyom Vybornov
 

Mais procurados (19)

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

Destaque

Globalisation 100119101548-phpapp01
Globalisation 100119101548-phpapp01Globalisation 100119101548-phpapp01
Globalisation 100119101548-phpapp01
Mehak Sukhramani
 
Wordpress testing powerpoint
Wordpress testing powerpointWordpress testing powerpoint
Wordpress testing powerpoint
LeneB
 
Doublerbuxtutorial
DoublerbuxtutorialDoublerbuxtutorial
Doublerbuxtutorial
cutiekate78
 
Back 2 School Night 2011
Back 2 School Night 2011Back 2 School Night 2011
Back 2 School Night 2011
jmori1
 
Настоящий уровень инфляции
Настоящий уровень инфляцииНастоящий уровень инфляции
Настоящий уровень инфляции
alexeykonkov
 
Механизмы адаптации организма к гипоксии
Механизмы адаптации организма к гипоксииМеханизмы адаптации организма к гипоксии
Механизмы адаптации организма к гипоксии
crasgmu
 
Xpflow training ppt_update_may 2007-051807
Xpflow training ppt_update_may 2007-051807Xpflow training ppt_update_may 2007-051807
Xpflow training ppt_update_may 2007-051807
Debjani Roy
 
KGI Knauf insulation plafonds (1)
KGI Knauf insulation plafonds (1)KGI Knauf insulation plafonds (1)
KGI Knauf insulation plafonds (1)
Quietroom Label
 
Gothic, Poe
Gothic, PoeGothic, Poe
Gothic, Poe
ms_faris
 

Destaque (20)

FOCUS#5
FOCUS#5FOCUS#5
FOCUS#5
 
Globalisation 100119101548-phpapp01
Globalisation 100119101548-phpapp01Globalisation 100119101548-phpapp01
Globalisation 100119101548-phpapp01
 
Ayuda 1 plan matematicas oct 12
Ayuda 1 plan matematicas oct 12Ayuda 1 plan matematicas oct 12
Ayuda 1 plan matematicas oct 12
 
直接照会により公開された芸術監督データ
直接照会により公開された芸術監督データ直接照会により公開された芸術監督データ
直接照会により公開された芸術監督データ
 
Wordpress testing powerpoint
Wordpress testing powerpointWordpress testing powerpoint
Wordpress testing powerpoint
 
Cornell Notes Parts 1 & 2
Cornell Notes Parts 1 & 2Cornell Notes Parts 1 & 2
Cornell Notes Parts 1 & 2
 
Doublerbuxtutorial
DoublerbuxtutorialDoublerbuxtutorial
Doublerbuxtutorial
 
Jdsu
JdsuJdsu
Jdsu
 
Investment Support Network
Investment Support NetworkInvestment Support Network
Investment Support Network
 
Classification of Matter Overview
Classification of Matter OverviewClassification of Matter Overview
Classification of Matter Overview
 
Республиканский конкурс идей «Инновационный Казахстан»
Республиканский конкурс идей «Инновационный Казахстан»Республиканский конкурс идей «Инновационный Казахстан»
Республиканский конкурс идей «Инновационный Казахстан»
 
Lake minatare student survey
Lake minatare student surveyLake minatare student survey
Lake minatare student survey
 
Back 2 School Night 2011
Back 2 School Night 2011Back 2 School Night 2011
Back 2 School Night 2011
 
Настоящий уровень инфляции
Настоящий уровень инфляцииНастоящий уровень инфляции
Настоящий уровень инфляции
 
District student survey
District student surveyDistrict student survey
District student survey
 
Механизмы адаптации организма к гипоксии
Механизмы адаптации организма к гипоксииМеханизмы адаптации организма к гипоксии
Механизмы адаптации организма к гипоксии
 
Tecido conjuntivo
Tecido conjuntivoTecido conjuntivo
Tecido conjuntivo
 
Xpflow training ppt_update_may 2007-051807
Xpflow training ppt_update_may 2007-051807Xpflow training ppt_update_may 2007-051807
Xpflow training ppt_update_may 2007-051807
 
KGI Knauf insulation plafonds (1)
KGI Knauf insulation plafonds (1)KGI Knauf insulation plafonds (1)
KGI Knauf insulation plafonds (1)
 
Gothic, Poe
Gothic, PoeGothic, Poe
Gothic, Poe
 

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

Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
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
 
Марат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная системаМарат Мавлютов - Современный веб как сложная система
Марат Мавлютов - Современный веб как сложная система
Yandex
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
Andrey Smirnov
 

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

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

Mais de Sergey Xek

Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»
Sergey Xek
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
Sergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
Sergey Xek
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL
Sergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
Sergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
Sergey Xek
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Sergey Xek
 

Mais de Sergey Xek (15)

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
Стартап: формирование технической команды
Стартап: формирование технической командыСтартап: формирование технической команды
Стартап: формирование технической команды
 
Ездим на батарейках
Ездим на батарейкахЕздим на батарейках
Ездим на батарейках
 
Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»Mind map для «Архитектура А/Б тестирования: сделай сам»
Mind map для «Архитектура А/Б тестирования: сделай сам»
 
Архитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай самАрхитектура А/Б тестирования: сделай сам
Архитектура А/Б тестирования: сделай сам
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 То, что вы хотели знать о HandlerSocket, но не смогли нагуглить То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL MySQL+HandlerSocket=NoSQL
MySQL+HandlerSocket=NoSQL
 
Mysql+handlersocket=nosql
Mysql+handlersocket=nosqlMysql+handlersocket=nosql
Mysql+handlersocket=nosql
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данных
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяны
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
 

Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного 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/