Персональные инструменты
 

Оптимизация LAMP-приложения на примере OpenX: разгоняемся до 1000 запросов в секунду (Александр Чистяков, ADD-2011)

Материал из CustisWiki

Версия от 12:48, 18 мая 2011; StasFomin (обсуждение | вклад) (Примечания и отзывы)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск

Аннотация

Докладчик
Александр Чистяков

Типичная ситуация: имеется существующий веб-проект, написанный с применением Linux, Apache, MySQL и PHP, и заказчик хочет сделать проект быстрее с наиболее полным сохранением функциональности.

В данном случае в качестве существующего проекта выступает open source баннерная платформа OpenX, и существенное требование заказчика — разогнать OpenX до пиковой нагрузки в 1000 запросов в секунду и долговременной нагрузки в 600 запросов в секунду.

Постановка задачи: отдача JavaScript-баннеров с заданными параметрами производительности при заданном числе объектов системы.


  • Краткий обзор объектов предметной области OpenX: баннеры, кампании, зоны.
  • Особенности OpenX: подходы к оптимизации, предлагаемые производителем, несколько раундов оптимизации уже было.
  • Проблемы: алгоритм скрипта выбора баннеров плохо работает при требуемом количестве объектов, имеем CPU-bound систему (обычно IO-bound).
  • Решение: кэширование предрассчитанных данных в БД.
  • Новые вводные от заказчика, поиск компромисса.
  • Сбор информации о системе: точки профилирования в коде скрипта, мониторинг с помощью Cacti и Zabbix.
  • Архитектура системы: типы узлов и связи между узлами. Балансирование нагрузки: nginx vs. HAProxy.
  • Действия после перенесения нагрузки на уровень БД: кэширование в памяти, проблема: много записи на диск.
  • MySQL vs MySQL (выбор движка хранилища), MySQL vs MySQL (выбор сборки: stock, Percona Server, MariaDB), MySQL vs PostgreSQL, MySQL vs in-memory RDBMS, MySQL vs NoSQL.
  • Тюнинг MySQL: параметры конфигурации, параметры платформы (файловая система).
  • Нагрузочное тестирование: как получить 1000 rps от клиента? siege vs JMeter vs Tsung.
  • Эволюция архитектуры. Поиск возможностей шардирования данных.
  • Отказоустойчивость: memcached, moxi, Membase.
  • Управление конфигурацией: проблема развертывания нод и управления нодами.
  • Использование Puppet для управления конфигурацией.

Видео

Видео в HD-качестве, смотрите в полноэкранном режиме.

HTML-код включения <iframe src="http://player.vimeo.com/video/23900952?byline=0&portrait=0" width="720" height="405" frameborder="0"></iframe>

Скачать
http://ftp.linux.kiev.ua/pub/conference/peers/addconf/2011/2b7-lamp-optimization-openx-chistyakov.avs.avi


Для этого доклада нужен подкаст (аудиозапись)?

  •  Да, многое понятно и без видео части, есть смысл его прослушать.
  •  Нет, аудиозапись бесполезна (не понять без видео или вообще мало смысла в докладе).


Примечания и отзывы

Александр Чистяков рассказал об опыте оптимизации производительности в условиях политического давления :). ©

Сразу возник вопрос: кем докладчик — Александр Чистяков приходится Владиславу Чистякову (контрибутору Nemerle)? Насколько известно, они просто однофамильцы.

Очень бодро рассказывал про оптимизацию платформы OpenX. Доклад проходил в стиле «Такая-то проблема. OK. Пробуем то-то». Больше всего цепляет то, с какой легкостью в проекте опробуются и внедряются различные инструменты/технологии, без постоянного опасения рисков от «нового». В нашей жизни такой динамики, конечно, не хватает.



Призыв к зрителям!

Мы призываем всех зрителей видеозаписей докладов давать хоть какой-нибудь, желательно конструктивный feedback.

Где? — неважно. В блогах, в форумах, в комментах — пофиг, лишь бы можно было найти, например, поиском по блогам, по ключевому слову «ADD-2011» (ну и/или по названию доклада).

Что-то побольше твиттер-вскрика, хотя бы пару абзацев. Да, иногда краткая характеристика бывает достаточной («маркетинговый булшит», «унылый самопиар» — обычно в адрес «спонсорских докладов»), но это очень, очень редко, а так хочется прочитать что-то большее, чем «сижу на XXX, говорят о YYY».

Что писать? Что хорошо, что плохо («плохо» неудачное слово, скажем, «неправильно на ваш взгляд»), как вы поняли то, что рассказано, как это спроецировалось конкретно на вас — все это фантастически важно и полезно:

  • Другим потенциальным зрителям (смотреть/не смотреть, «правильно ли я понял»).
  • И докладчикам:
    • «Правильно ли меня поняли»,
    • «Что я делал правильно, а что улучшить»
    • Даже критический отзыв лучше, чем никакого!
    • Плюс — это мотивация, это награда за немалый труд многие готовятся долго, раскрывают свой опыт, старательно делают слайды, репетируют выступление — и ради чего? двадцать минут театра перед парой десятков зритетелей и все?
  • Организаторам конференций (этой и других) — они внимательно следят за отзывами, и пытаются понять, кого имеет смысл звать («рубит фишку и жжет!»), а к кому отнестись скептически, и если брать, то, например, «прокачать в части выступлений» — мы, например, старались это делать, итеративно рецензировали слайды, рассылали подборку литературы о правильных слайдах и искусстве выступлений.
  • Безотносительно лично докладчиков — важно понять, исчерпала себя тема или для народа еще остаются откровениями то, что для более пресыщенных инфопотоками людей (а организаторы обычно такие) уже выглядит как «аццкий боян». Ну и вообще — что еще интересно, и что было бы интересно услышать-увидеть-пообщаться на тему о…
  • Ну и кстати, мне тоже важно — вообще имел ли смысл весь этот сыр-бор с сьемкой, видеомонтажем и обработкой и публикацией (это, вообще-то дорогая работа, расценки профессионалов в этой области весьма недетские, при том, что до этого уровня монтажа им, как правило очень далеко), или кроме участников конференции эти темы никому не интересны. Может есть какие-то косяки в видео? или предложения как сделать лучше? — связывайтесь со мной, возможно это можно будет исправить (или хотя бы вырезать). Это кстати относится и к докладчикам — если есть какие-то позорные неудачные моменты, или что-то не нравится — это можно убрать.


Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».


Репликация: База Знаний «Заказных Информ Систем» → «Оптимизация LAMP-приложения на примере OpenX: разгоняемся до 1000 запросов в секунду (Александр Чистяков, ADD-2011)»