SlideShare a Scribd company logo
1 of 33
Разработка на коленке
История оптимизации двух
маленьких проектов
А давайте напишем маленький
скрипт
• Пользователю могут выдаваться очки
• Очки можно поменять на бонус
• Возможность посмотреть баланс
• Нет баланса – нет учетки
• Ответы реализованы в виде http codes
(вроде как REST)
LAMP
• PHP
• Apache (mod_php, mod_rewrite)
• MySQL (куда же без него)
Выгрузились,
запустились,
всё работает,
клиенты ходят,
данные передаются
Первая проблема
• Возрастает количество
клиентов и MySQL
начинает потреблять
всё больше
процессорных ресурсов,
хотя slow query log
пустой.
• Проблема в частых
запросах к маленькой
табличке. Запросы
выполняются быстро
(менее 1 секунды), но
нагружается процессор.
Но ненадолго
Выгрузка нового билда
мобильного приложения
• Возникает проблема, когда клиент
начинает обращаться к серверу
несколько раз в секунду вместо одного
раза в 10 минут.
• Клиентов достаточно много, получаем
DDOS атаку.
Основные проблемы
• MySQL начинает сбрасывать
соединения.
• Apache начинает проявлять
прибалтийские кооорни.
Пути решения
• Увеличение мощности сервера
• Кэширование (memcached).
• Изменяем порядок обработки запросов
на php
Увеличение мощности сервера
• Поскольку дело было на Amazon,
увеличение мощности произошло с
помощью одного клика мыши.
Кэширование
• Самым частым запросом оказался
запрос на получение учетной записи
клиента. Однако для большинства
запросов учеток не было. Пришлось
кэшировать в memcache все ответы.
• Данные о пользователях сохранялись
по предсказуемым ключам.
• На MySQL Query Cache не
рассчитывали
Изменение порядка обработки
запросов на php
• Поскольку apache все равно не
выдерживал потока запросов, было
принято решение заменить его на
nginx+php-fpm (не только потому что его
использовать круто, а apache нет)
• Установка APC
Результаты
• Увеличение обслуживаемых rps больше
чем в два раза
• Падение нагрузки на сервер
• 99.9% hits в memcache
• Снижение нагрузки на дисковую
систему
• Нет ситуации с долгим ожиданием
ответа
Второй проект
• Сеть для показа рекламы
• Нужно было написать не маленький
скрипт, а мини систему управления
контентом.
• Клиенты делают запросы и тянут
рекламу с сервера.
Опять же Lamp
• PHP
• Apache
• MySQL
Опять же всё написано,
выгружено и вроде даже
стабильно работает, статистика
пишется и все происходит в
режиме реального времени
Первые проблемы
• Подсчет статистики
при показе списка
• Кэширование с
пересчетом раз в
полчаса
Появление новых возможностей
• Новые типы рекламы по запросу
• Начинаем собирать информацию о
пользователях ( взаимодействие с
приложениями - клиентами )
• Добавление рассылок push notifications
• Деление пользователей на группы
• Возможность фокусирования всех
типов реклам на отдельного
пользователя.
И вдруг одно из мобильных
приложений выводят в top и
буквально сразу же начинаются
проблемы с
производительностью серверной
части
Результаты вывода в top
• Много установленных приложений –
много запросов к системе (К.О. или таки
уже майор?)
• Приложения-будильники стартуют в
одной часовой зоне практически
одновременно (разбежка часов очень
небольшая)
• Apache забивается запросами статики
Что применялось
• Nginx
• Memcached
• Изменения в исходном коде
• APC
Nginx
• Отдача статики для всех проектов на
данном сервере
• Обратное проксирование
Memcached
• Компромисс между мгновенным
отражением изменений данных и
производительностью системы.
• Кэширование редко изменяющихся
данных
Изменения в исходном коде
• Проверка некоторых условий на
актуальность до главного запроса
• Изменение кода для избежания
deadlocks в MySQL.
Результаты
• Улучшение производительности, т.к. На
отдачу статики не расходуются ресурсы
apache
• Улучшение ситуации при работе с
медленными клиентами.
• Снижение нагрузки на MySQL.
Общие рекомендации
Отделение часто изменяемых
данных, от тех данных, которые
меняются редко. В частности это
упрощает создание эффективной
системы кэширования. Например
отделение информации о
пользователе от его баланса
Для упрощения поддержания
кэша в адекватном состоянии
стоит использовать
предсказуемые ключи,
например для пользователя
userdata_{id}
В некоторых случаях можно
отражать изменения с некоторой
задержкой
Кэширование не должно
использоваться как костыль для
решения проблем приложения (а
иногда так хочется).
В первую очередь кэширование
стоит применять для данных,
которые редко меняются.
MySQL query cache vs
кэширование на стороне
приложения.
Как правило, при кэшировании
всегда доступна операция delete.
В некоторых случаях имеет
смысл использовать постоянные
соединения (persistent
connections), однако надо
помнить, что некоторые модули
чистят состояние соединения
(mysqli), а некоторые – нет
(PDO).

More Related Content

What's hot

Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Ontico
 
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Ontico
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Ontico
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Ontico
 
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
it-people
 

What's hot (20)

Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Java Performance
Java PerformanceJava Performance
Java Performance
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
 
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
 
Alexei Vladishev - Zabbix 3.0 что дальше
Alexei Vladishev - Zabbix 3.0 что дальшеAlexei Vladishev - Zabbix 3.0 что дальше
Alexei Vladishev - Zabbix 3.0 что дальше
 
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данных
 
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
 
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при..."Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
DUMP-2013 Serverside - Архитектура Битрикс24 в Amazon Web Services – изнутри ...
 
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон Галицын
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
 

Viewers also liked

сергей булаев (скрипт) история создания купи батон!
сергей булаев (скрипт)   история создания купи батон!сергей булаев (скрипт)   история создания купи батон!
сергей булаев (скрипт) история создания купи батон!
PCampRussia
 
Виктория Шапран, Arrow Media
Виктория Шапран, Arrow MediaВиктория Шапран, Arrow Media
Виктория Шапран, Arrow Media
web2win
 
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»
Клуб Интернет-Маркетологов
 
10 звонков - 10 продаж
10 звонков - 10 продаж10 звонков - 10 продаж
10 звонков - 10 продаж
grandunion24
 
Cтратегия продаж.
Cтратегия продаж.Cтратегия продаж.
Cтратегия продаж.
Mark&Sales
 
холодные звонки
холодные звонкихолодные звонки
холодные звонки
Vitaly Farafontov
 
"Упаковка бизнеса" - презентация 4-часового воркшопа
"Упаковка бизнеса" - презентация 4-часового воркшопа "Упаковка бизнеса" - презентация 4-часового воркшопа
"Упаковка бизнеса" - презентация 4-часового воркшопа
LiftMarketing
 

Viewers also liked (20)

сергей булаев (скрипт) история создания купи батон!
сергей булаев (скрипт)   история создания купи батон!сергей булаев (скрипт)   история создания купи батон!
сергей булаев (скрипт) история создания купи батон!
 
Prezentatsia paketov po_franshizam_fz
Prezentatsia paketov po_franshizam_fzPrezentatsia paketov po_franshizam_fz
Prezentatsia paketov po_franshizam_fz
 
Продажа услуг B2B. Клиент под прицелом (1 модуль) #SuccessWin
Продажа услуг B2B. Клиент под прицелом (1 модуль) #SuccessWinПродажа услуг B2B. Клиент под прицелом (1 модуль) #SuccessWin
Продажа услуг B2B. Клиент под прицелом (1 модуль) #SuccessWin
 
Fast start-ka
Fast start-kaFast start-ka
Fast start-ka
 
Система Растущих Продаж
Система Растущих ПродажСистема Растущих Продаж
Система Растущих Продаж
 
Презентация косметического бренда "Зеленая планета" 2012. Полная. Все пр...
Презентация косметического бренда "Зеленая   планета" 2012.  Полная.  Все  пр...Презентация косметического бренда "Зеленая   планета" 2012.  Полная.  Все  пр...
Презентация косметического бренда "Зеленая планета" 2012. Полная. Все пр...
 
Организация процесса продаж на предприятии
Организация процесса продаж на предприятииОрганизация процесса продаж на предприятии
Организация процесса продаж на предприятии
 
Технология телефонных продаж. От А до Я.
Технология телефонных продаж. От А до Я.Технология телефонных продаж. От А до Я.
Технология телефонных продаж. От А до Я.
 
Цифровые процессы бизнеса — Юрий Титков
Цифровые процессы бизнеса — Юрий ТитковЦифровые процессы бизнеса — Юрий Титков
Цифровые процессы бизнеса — Юрий Титков
 
Кирилл Кашук. Книга продавца. Скрипты. Днепропетровск. 2014.
Кирилл Кашук. Книга продавца. Скрипты. Днепропетровск. 2014.Кирилл Кашук. Книга продавца. Скрипты. Днепропетровск. 2014.
Кирилл Кашук. Книга продавца. Скрипты. Днепропетровск. 2014.
 
Виктория Шапран, Arrow Media
Виктория Шапран, Arrow MediaВиктория Шапран, Arrow Media
Виктория Шапран, Arrow Media
 
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»
 
10 звонков - 10 продаж
10 звонков - 10 продаж10 звонков - 10 продаж
10 звонков - 10 продаж
 
Скрипт приема звонка от собственника на продажу квартиры
Скрипт приема звонка от собственника на продажу квартирыСкрипт приема звонка от собственника на продажу квартиры
Скрипт приема звонка от собственника на продажу квартиры
 
Cтратегия продаж.
Cтратегия продаж.Cтратегия продаж.
Cтратегия продаж.
 
Пример презентации скриптов продаж от In-scale
Пример презентации скриптов продаж от In-scaleПример презентации скриптов продаж от In-scale
Пример презентации скриптов продаж от In-scale
 
Управление call-центром интернет-магазина
Управление call-центром интернет-магазинаУправление call-центром интернет-магазина
Управление call-центром интернет-магазина
 
холодные звонки
холодные звонкихолодные звонки
холодные звонки
 
"Упаковка бизнеса" - презентация 4-часового воркшопа
"Упаковка бизнеса" - презентация 4-часового воркшопа "Упаковка бизнеса" - презентация 4-часового воркшопа
"Упаковка бизнеса" - презентация 4-часового воркшопа
 
Пример речевых модулей
Пример речевых модулейПример речевых модулей
Пример речевых модулей
 

Similar to Development on the Knee by Vladimir Khramtsov

Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Ontico
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Yandex
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
Alex Chistyakov
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Ontico
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Anton Baranov
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
Media Gorod
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Sergey Xek
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
rit2011
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Ontico
 
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
Ontico
 

Similar to Development on the Knee by Vladimir Khramtsov (20)

Errors Tracker
Errors TrackerErrors Tracker
Errors Tracker
 
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
 
Sivko
SivkoSivko
Sivko
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование систем
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...
 
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rus
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
 

More from php-user-group-minsk

More from php-user-group-minsk (6)

Continuous Integration for PHP projects - Theory by Alex Simanovich
Continuous Integration for PHP projects - Theory by Alex SimanovichContinuous Integration for PHP projects - Theory by Alex Simanovich
Continuous Integration for PHP projects - Theory by Alex Simanovich
 
Symfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim RomanovskySymfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim Romanovsky
 
MongoDB & PHP by Alex Litvinok
MongoDB & PHP by Alex LitvinokMongoDB & PHP by Alex Litvinok
MongoDB & PHP by Alex Litvinok
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьТо, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
 
Composer talk by Maxim Romanovsky
Composer talk by Maxim RomanovskyComposer talk by Maxim Romanovsky
Composer talk by Maxim Romanovsky
 
Composer in the wilderness by Josef Bielawski
Composer in the wilderness by Josef BielawskiComposer in the wilderness by Josef Bielawski
Composer in the wilderness by Josef Bielawski
 

Recently uploaded

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 

Recently uploaded (9)

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 

Development on the Knee by Vladimir Khramtsov

  • 1. Разработка на коленке История оптимизации двух маленьких проектов
  • 2. А давайте напишем маленький скрипт • Пользователю могут выдаваться очки • Очки можно поменять на бонус • Возможность посмотреть баланс • Нет баланса – нет учетки • Ответы реализованы в виде http codes (вроде как REST)
  • 3. LAMP • PHP • Apache (mod_php, mod_rewrite) • MySQL (куда же без него)
  • 5. Первая проблема • Возрастает количество клиентов и MySQL начинает потреблять всё больше процессорных ресурсов, хотя slow query log пустой. • Проблема в частых запросах к маленькой табличке. Запросы выполняются быстро (менее 1 секунды), но нагружается процессор.
  • 7. Выгрузка нового билда мобильного приложения • Возникает проблема, когда клиент начинает обращаться к серверу несколько раз в секунду вместо одного раза в 10 минут. • Клиентов достаточно много, получаем DDOS атаку.
  • 8. Основные проблемы • MySQL начинает сбрасывать соединения. • Apache начинает проявлять прибалтийские кооорни.
  • 9. Пути решения • Увеличение мощности сервера • Кэширование (memcached). • Изменяем порядок обработки запросов на php
  • 10. Увеличение мощности сервера • Поскольку дело было на Amazon, увеличение мощности произошло с помощью одного клика мыши.
  • 11. Кэширование • Самым частым запросом оказался запрос на получение учетной записи клиента. Однако для большинства запросов учеток не было. Пришлось кэшировать в memcache все ответы. • Данные о пользователях сохранялись по предсказуемым ключам. • На MySQL Query Cache не рассчитывали
  • 12. Изменение порядка обработки запросов на php • Поскольку apache все равно не выдерживал потока запросов, было принято решение заменить его на nginx+php-fpm (не только потому что его использовать круто, а apache нет) • Установка APC
  • 13. Результаты • Увеличение обслуживаемых rps больше чем в два раза • Падение нагрузки на сервер • 99.9% hits в memcache • Снижение нагрузки на дисковую систему • Нет ситуации с долгим ожиданием ответа
  • 14. Второй проект • Сеть для показа рекламы • Нужно было написать не маленький скрипт, а мини систему управления контентом. • Клиенты делают запросы и тянут рекламу с сервера.
  • 15. Опять же Lamp • PHP • Apache • MySQL
  • 16. Опять же всё написано, выгружено и вроде даже стабильно работает, статистика пишется и все происходит в режиме реального времени
  • 17. Первые проблемы • Подсчет статистики при показе списка • Кэширование с пересчетом раз в полчаса
  • 18. Появление новых возможностей • Новые типы рекламы по запросу • Начинаем собирать информацию о пользователях ( взаимодействие с приложениями - клиентами ) • Добавление рассылок push notifications • Деление пользователей на группы • Возможность фокусирования всех типов реклам на отдельного пользователя.
  • 19. И вдруг одно из мобильных приложений выводят в top и буквально сразу же начинаются проблемы с производительностью серверной части
  • 20. Результаты вывода в top • Много установленных приложений – много запросов к системе (К.О. или таки уже майор?) • Приложения-будильники стартуют в одной часовой зоне практически одновременно (разбежка часов очень небольшая) • Apache забивается запросами статики
  • 21. Что применялось • Nginx • Memcached • Изменения в исходном коде • APC
  • 22. Nginx • Отдача статики для всех проектов на данном сервере • Обратное проксирование
  • 23. Memcached • Компромисс между мгновенным отражением изменений данных и производительностью системы. • Кэширование редко изменяющихся данных
  • 24. Изменения в исходном коде • Проверка некоторых условий на актуальность до главного запроса • Изменение кода для избежания deadlocks в MySQL.
  • 25. Результаты • Улучшение производительности, т.к. На отдачу статики не расходуются ресурсы apache • Улучшение ситуации при работе с медленными клиентами. • Снижение нагрузки на MySQL.
  • 27. Отделение часто изменяемых данных, от тех данных, которые меняются редко. В частности это упрощает создание эффективной системы кэширования. Например отделение информации о пользователе от его баланса
  • 28. Для упрощения поддержания кэша в адекватном состоянии стоит использовать предсказуемые ключи, например для пользователя userdata_{id}
  • 29. В некоторых случаях можно отражать изменения с некоторой задержкой
  • 30. Кэширование не должно использоваться как костыль для решения проблем приложения (а иногда так хочется).
  • 31. В первую очередь кэширование стоит применять для данных, которые редко меняются. MySQL query cache vs кэширование на стороне приложения.
  • 32. Как правило, при кэшировании всегда доступна операция delete.
  • 33. В некоторых случаях имеет смысл использовать постоянные соединения (persistent connections), однако надо помнить, что некоторые модули чистят состояние соединения (mysqli), а некоторые – нет (PDO).