SlideShare una empresa de Scribd logo
1 de 21
Descargar para leer sin conexión
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/

Más contenido relacionado

La actualidad más candente

Сервер «Аллодов Онлайн». Архитектура и особенности разработки.
Сервер «Аллодов Онлайн». Архитектура и особенности разработки. Сервер «Аллодов Онлайн». Архитектура и особенности разработки.
Сервер «Аллодов Онлайн». Архитектура и особенности разработки. Андрей Бростовский
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Mafiozi Performance1
Mafiozi Performance1Mafiozi Performance1
Mafiozi Performance1barcamplv09
 
Система управления конфигурациями Ansible
Система управления конфигурациями AnsibleСистема управления конфигурациями Ansible
Система управления конфигурациями AnsibleITCrowd Almaty
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Andrew Minkin
 
Балансировка нагрузки веб-серверов
Балансировка нагрузки веб-серверовБалансировка нагрузки веб-серверов
Балансировка нагрузки веб-серверовEkaterina Giganova
 
Компонентная архитектура игровой механики MMORPG.
Компонентная архитектура игровой механики MMORPG.Компонентная архитектура игровой механики MMORPG.
Компонентная архитектура игровой механики MMORPG.Андрей Бростовский
 
Дмитрий Главацкий, CDNvideo: "Ускорение сайта как способ повысить конверсию"
Дмитрий Главацкий, CDNvideo: "Ускорение сайта как способ повысить конверсию"Дмитрий Главацкий, CDNvideo: "Ускорение сайта как способ повысить конверсию"
Дмитрий Главацкий, CDNvideo: "Ускорение сайта как способ повысить конверсию"web2win
 
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при..."Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...Fwdays
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей КалинецFwdays
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Anton Baranov
 
Облачные решения на платформе IO
Облачные решения на платформе IOОблачные решения на платформе IO
Облачные решения на платформе IOOntheIO
 
Подготовка интернет-магазина к боевым условиям
Подготовка интернет-магазина к боевым условиямПодготовка интернет-магазина к боевым условиям
Подготовка интернет-магазина к боевым условиямAnton Baranov
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Николай Лавлинский
 
High load для начинающих
High load для начинающихHigh load для начинающих
High load для начинающихAndrew Minkin
 
Development on the Knee by Vladimir Khramtsov
Development on the Knee by Vladimir KhramtsovDevelopment on the Knee by Vladimir Khramtsov
Development on the Knee by Vladimir Khramtsovphp-user-group-minsk
 
«Хайлоад в рассылке почты: как спать спокойно»
«Хайлоад в рассылке почты: как спать спокойно»«Хайлоад в рассылке почты: как спать спокойно»
«Хайлоад в рассылке почты: как спать спокойно»Nata_Churda
 
Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Oleg Poludnenko
 
CDNvideo: ускорение сайтов
CDNvideo: ускорение сайтовCDNvideo: ускорение сайтов
CDNvideo: ускорение сайтовDmitry Glavatskiy
 

La actualidad más candente (19)

Сервер «Аллодов Онлайн». Архитектура и особенности разработки.
Сервер «Аллодов Онлайн». Архитектура и особенности разработки. Сервер «Аллодов Онлайн». Архитектура и особенности разработки.
Сервер «Аллодов Онлайн». Архитектура и особенности разработки.
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Mafiozi Performance1
Mafiozi Performance1Mafiozi Performance1
Mafiozi Performance1
 
Система управления конфигурациями Ansible
Система управления конфигурациями AnsibleСистема управления конфигурациями Ansible
Система управления конфигурациями Ansible
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Балансировка нагрузки веб-серверов
Балансировка нагрузки веб-серверовБалансировка нагрузки веб-серверов
Балансировка нагрузки веб-серверов
 
Компонентная архитектура игровой механики MMORPG.
Компонентная архитектура игровой механики MMORPG.Компонентная архитектура игровой механики MMORPG.
Компонентная архитектура игровой механики MMORPG.
 
Дмитрий Главацкий, CDNvideo: "Ускорение сайта как способ повысить конверсию"
Дмитрий Главацкий, CDNvideo: "Ускорение сайта как способ повысить конверсию"Дмитрий Главацкий, CDNvideo: "Ускорение сайта как способ повысить конверсию"
Дмитрий Главацкий, CDNvideo: "Ускорение сайта как способ повысить конверсию"
 
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при..."Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...Организация надежного резервного копирования веб-проекта. Практика и подводны...
Организация надежного резервного копирования веб-проекта. Практика и подводны...
 
Облачные решения на платформе IO
Облачные решения на платформе IOОблачные решения на платформе IO
Облачные решения на платформе IO
 
Подготовка интернет-магазина к боевым условиям
Подготовка интернет-магазина к боевым условиямПодготовка интернет-магазина к боевым условиям
Подготовка интернет-магазина к боевым условиям
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
High load для начинающих
High load для начинающихHigh load для начинающих
High load для начинающих
 
Development on the Knee by Vladimir Khramtsov
Development on the Knee by Vladimir KhramtsovDevelopment on the Knee by Vladimir Khramtsov
Development on the Knee by Vladimir Khramtsov
 
«Хайлоад в рассылке почты: как спать спокойно»
«Хайлоад в рассылке почты: как спать спокойно»«Хайлоад в рассылке почты: как спать спокойно»
«Хайлоад в рассылке почты: как спать спокойно»
 
Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥Макс Волошин: Php + shell = ♥
Макс Волошин: Php + shell = ♥
 
CDNvideo: ускорение сайтов
CDNvideo: ускорение сайтовCDNvideo: ускорение сайтов
CDNvideo: ускорение сайтов
 

Destacado

Destacado (20)

Art:knowledge
Art:knowledgeArt:knowledge
Art:knowledge
 
MARI KITA SUKSESKAN PROGRAM INDONESIA PINTAR
MARI KITA SUKSESKAN PROGRAM INDONESIA PINTARMARI KITA SUKSESKAN PROGRAM INDONESIA PINTAR
MARI KITA SUKSESKAN PROGRAM INDONESIA PINTAR
 
Four Freedom
Four FreedomFour Freedom
Four Freedom
 
Rangkuman Addressing
Rangkuman AddressingRangkuman Addressing
Rangkuman Addressing
 
Bab 8 Islam dan Ilmu Pengetahuan
Bab 8 Islam dan Ilmu PengetahuanBab 8 Islam dan Ilmu Pengetahuan
Bab 8 Islam dan Ilmu Pengetahuan
 
Vogue
VogueVogue
Vogue
 
Social media security
Social media securitySocial media security
Social media security
 
Ts 4783 1
Ts 4783 1Ts 4783 1
Ts 4783 1
 
19286 eae b39a-4e42-beeae9d8b3f22fc7
19286 eae b39a-4e42-beeae9d8b3f22fc719286 eae b39a-4e42-beeae9d8b3f22fc7
19286 eae b39a-4e42-beeae9d8b3f22fc7
 
CG Realty Solution Pvt.Ltd.
CG Realty Solution Pvt.Ltd.CG Realty Solution Pvt.Ltd.
CG Realty Solution Pvt.Ltd.
 
Declarative security-oes
Declarative security-oesDeclarative security-oes
Declarative security-oes
 
Module 2
Module 2Module 2
Module 2
 
C 9
C 9C 9
C 9
 
Calendario javier jhonatan
Calendario javier jhonatanCalendario javier jhonatan
Calendario javier jhonatan
 
Egoera: La economía de Bizkaia - Enero 2016 - nº19
Egoera: La economía de Bizkaia - Enero 2016 - nº19Egoera: La economía de Bizkaia - Enero 2016 - nº19
Egoera: La economía de Bizkaia - Enero 2016 - nº19
 
Mainstreaming of Land Governance in National Agricultural and Food Security I...
Mainstreaming of Land Governance in National Agricultural and Food Security I...Mainstreaming of Land Governance in National Agricultural and Food Security I...
Mainstreaming of Land Governance in National Agricultural and Food Security I...
 
3interview1 ima
3interview1 ima3interview1 ima
3interview1 ima
 
Cells homeostasis_and_disease
Cells  homeostasis_and_diseaseCells  homeostasis_and_disease
Cells homeostasis_and_disease
 
Violence prevention data 2011
Violence prevention data 2011Violence prevention data 2011
Violence prevention data 2011
 
Twitter basico
Twitter basicoTwitter basico
Twitter basico
 

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

Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Igor Miniailo
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Anton Baranov
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailrurit2010
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Sergey Xek
 
Клиентские приложения под нагрузкой, Андрей Смирнов
Клиентские приложения под нагрузкой, Андрей СмирновКлиентские приложения под нагрузкой, Андрей Смирнов
Клиентские приложения под нагрузкой, Андрей СмирновOntico
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Andrey Smirnov
 
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"St. Petersburg Foundation for SME Development
 
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Ontico
 
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...Ontico
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтендViacheslav Slinko
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Ontico
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Mad Devs
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON
 
Lesson1
Lesson1Lesson1
Lesson1jinol
 

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

Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
Мониторинг веб приложений на PHP в режиме реального времени с помощью Pinba. ...
 
Sivko
SivkoSivko
Sivko
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Bykov monitoring mailru
Bykov monitoring mailruBykov monitoring mailru
Bykov monitoring mailru
 
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
Mind map от «Полмиллиона юзеров в онлайне без падений: оптимизация высокона...
 
Клиентские приложения под нагрузкой, Андрей Смирнов
Клиентские приложения под нагрузкой, Андрей СмирновКлиентские приложения под нагрузкой, Андрей Смирнов
Клиентские приложения под нагрузкой, Андрей Смирнов
 
Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)Клиентские приложения под нагрузкой (HighLoad 2014)
Клиентские приложения под нагрузкой (HighLoad 2014)
 
Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"
Виртуальная ИТ-инфраструктура предприятия на базе свободного ПО "под ключ"
 
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
Чеклист по клиентской оптимизации / Николай Лавлинский (Метод Лаб)
 
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
Самые частые проблемы и пути решения при росте нагрузки и масштабировании про...
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
 
Lesson1
Lesson1Lesson1
Lesson1
 

Más de Sergey Xek

Формирование технической команды на старте
Формирование технической команды на старте Формирование технической команды на старте
Формирование технической команды на старте Sergey Xek
 
Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
Стартап: формирование технической команды
Стартап: формирование технической командыСтартап: формирование технической команды
Стартап: формирование технической командыSergey Xek
 
Ездим на батарейках
Ездим на батарейкахЕздим на батарейках
Ездим на батарейкахSergey Xek
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один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
 
Badoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнBadoo Desktop: оптимизация приложения на миллион юзеров онлайн
Badoo Desktop: оптимизация приложения на миллион юзеров онлайнSergey Xek
 
Mysql+handlersocket=nosql
Mysql+handlersocket=nosqlMysql+handlersocket=nosql
Mysql+handlersocket=nosqlSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Распространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхРаспространенные ошибки применения баз данных
Распространенные ошибки применения баз данныхSergey Xek
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Pconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныPconnect: граната в руках обезьяны
Pconnect: граната в руках обезьяныSergey Xek
 

Más de Sergey Xek (16)

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

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/