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

Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...
Zabbix и миллионы метрик: наилучший опыт масштабного мониторинга / Алексей Вл...Ontico
 
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...
Как FB, Apple и Google разрушают традиции в компьютерном бизнесе, и почему эт...Ontico
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Positive Hack Days
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow Vadim Nesterov
 
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Практическая реализация распределенного отказоустойчивого Comet сервера на Er...
Практическая реализация распределенного отказоустойчивого Comet сервера на Er...Ontico
 
Alexei Vladishev - Zabbix 3.0 что дальше
Alexei Vladishev - Zabbix 3.0 что дальшеAlexei Vladishev - Zabbix 3.0 что дальше
Alexei Vladishev - Zabbix 3.0 что дальшеZabbix
 
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".
Доклад Ильи Аблеева на DevOps Meetup "Мониторинг высоконагруженного проекта".Badoo Development
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей КалинецFwdays
 
Андрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхАндрей Денисов – В ожидании мониторинга баз данных
Андрей Денисов – В ожидании мониторинга баз данныхBadoo Development
 
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...
Максим Барышников, Что такое типовые проблемы нагруженных проектов и как их р...Tanya Denisyuk
 
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при..."Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...
"Архитектурный шаблон Reflex - новый подход к разработке клиент-серверных при...Fwdays
 
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
 
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Общая концепция системы развёртывания серверного окружения на базе SaltStack ...
Общая концепция системы развёртывания серверного окружения на базе SaltStack ...Positive Hack Days
 
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)
NAS, Predictions, Preloading, Presudo-Isomorphism / Охрименко Алексей (Acronis)Ontico
 
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...
SECON'2016. Панин Сергей, Лебедев Андрей, Храмушин Дмитрий, IT-инфраструктура...SECON
 
Антон Галицын
Антон ГалицынАнтон Галицын
Антон ГалицынCodeFest
 
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...
Как жить в облаке почти без админов: мониторинг и эксплуатация сотен виртуаль...Uptime Community
 

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
 
Prezentatsia paketov po_franshizam_fz
Prezentatsia paketov po_franshizam_fzPrezentatsia paketov po_franshizam_fz
Prezentatsia paketov po_franshizam_fzFinZdrav
 
Продажа услуг B2B. Клиент под прицелом (1 модуль) #SuccessWin
Продажа услуг B2B. Клиент под прицелом (1 модуль) #SuccessWinПродажа услуг B2B. Клиент под прицелом (1 модуль) #SuccessWin
Продажа услуг B2B. Клиент под прицелом (1 модуль) #SuccessWinVatyutov.Tech
 
Презентация косметического бренда "Зеленая планета" 2012. Полная. Все пр...
Презентация косметического бренда "Зеленая   планета" 2012.  Полная.  Все  пр...Презентация косметического бренда "Зеленая   планета" 2012.  Полная.  Все  пр...
Презентация косметического бренда "Зеленая планета" 2012. Полная. Все пр...GREEN PLANET
 
Организация процесса продаж на предприятии
Организация процесса продаж на предприятииОрганизация процесса продаж на предприятии
Организация процесса продаж на предприятииRinat Shamsiev
 
Технология телефонных продаж. От А до Я.
Технология телефонных продаж. От А до Я.Технология телефонных продаж. От А до Я.
Технология телефонных продаж. От А до Я.Maiya Badlueva
 
Цифровые процессы бизнеса — Юрий Титков
Цифровые процессы бизнеса — Юрий ТитковЦифровые процессы бизнеса — Юрий Титков
Цифровые процессы бизнеса — Юрий ТитковЩербачев Михаил
 
Кирилл Кашук. Книга продавца. Скрипты. Днепропетровск. 2014.
Кирилл Кашук. Книга продавца. Скрипты. Днепропетровск. 2014.Кирилл Кашук. Книга продавца. Скрипты. Днепропетровск. 2014.
Кирилл Кашук. Книга продавца. Скрипты. Днепропетровск. 2014.Oleg Afanasyev
 
Виктория Шапран, Arrow Media
Виктория Шапран, Arrow MediaВиктория Шапран, Arrow Media
Виктория Шапран, Arrow Mediaweb2win
 
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»
Сергей Яременко: «Автоматизация на коленке. Скрипты в AdWords»Клуб Интернет-Маркетологов
 
10 звонков - 10 продаж
10 звонков - 10 продаж10 звонков - 10 продаж
10 звонков - 10 продажgrandunion24
 
Скрипт приема звонка от собственника на продажу квартиры
Скрипт приема звонка от собственника на продажу квартирыСкрипт приема звонка от собственника на продажу квартиры
Скрипт приема звонка от собственника на продажу квартирыГеннадий Метёлкин
 
Cтратегия продаж.
Cтратегия продаж.Cтратегия продаж.
Cтратегия продаж.Mark&Sales
 
Пример презентации скриптов продаж от In-scale
Пример презентации скриптов продаж от In-scaleПример презентации скриптов продаж от In-scale
Пример презентации скриптов продаж от In-scaleНикита Жестков
 
Управление call-центром интернет-магазина
Управление call-центром интернет-магазинаУправление call-центром интернет-магазина
Управление call-центром интернет-магазинаAdvantShop
 
холодные звонки
холодные звонкихолодные звонки
холодные звонки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

DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.
DevConf2013: Особенности применения WebSocket на примере работы в ERP системе.Alexander Frolov
 
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...
Как превратить Openstack Swift в хранилище для высоких нагрузок разных типов,...Ontico
 
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...
Дмитрий Куликовский, Алексей Лавренюк - Построение кластеров, нагрузочное тес...Yandex
 
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...
Дмитрий Куликовский - Построение кластеров, нагрузочное тестирование, capacit...Yandex
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитикиИлья Середа
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)Путь от монолита на PHP к микросервисам на Scala  / Денис Иванов (2GIS)
Путь от монолита на PHP к микросервисам на Scala / Денис Иванов (2GIS)Ontico
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Anton Baranov
 
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...
Мониторинг в высоконагруженных (и не только) проектах: сравнительный анализ с...Ontico
 
Быстрое масштабирование систем
Быстрое масштабирование системБыстрое масштабирование систем
Быстрое масштабирование системMedia Gorod
 
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...
Полмиллиона юзеров в онлайне без падений: оптимизация высоконагруженного se...Sergey Xek
 
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...
полмиллиона юзеров в онлайне без падений оптимизация высоконагруженной Server...rit2011
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 
NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...NoBigData - потоковая система аналитики clientside производительности, Сергей...
NoBigData - потоковая система аналитики clientside производительности, Сергей...Ontico
 
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...
«Рамблер Касса» как пример высокопроизводительного проекта на .Net (Дмитрий П...Ontico
 
High load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusHigh load2007 scaling-web-applications-rus
High load2007 scaling-web-applications-rusVladd Ev
 
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)
Облако в Badoo год спустя - работа над ошибками, Юрий Насретдинов (Badoo)Badoo Development
 

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

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 Simanovichphp-user-group-minsk
 
Symfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim RomanovskySymfony Under Control by Maxim Romanovsky
Symfony Under Control by Maxim Romanovskyphp-user-group-minsk
 
То, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьТо, что вы хотели знать о HandlerSocket, но не смогли нагуглить
То, что вы хотели знать о HandlerSocket, но не смогли нагуглитьphp-user-group-minsk
 
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 Bielawskiphp-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
 

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).