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

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

Материал из CustisWiki

(перенаправлено с «2b7-lamp-optimization-openx-chistyakov»)
Перейти к: навигация, поиск

Аннотация

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

Типичная ситуация: имеется существующий веб-проект, написанный с применением 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

Приглашаем на конференцию «Application Developer Days-2011»!

Задай вопросы председателю ПК (или ответь на пару вопросов и получи большую «скидку от шефа»)…

Конференция Application Developer Days-2011 приглашает участников и докладчиков!

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

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


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

Александр Чистяков рассказал об опыте оптимизации производительности в условиях политического давления :). ©
Александр Чистяков полгода оптимизировал php-приложение, не меняя его код. Очень сжатый и по существу доклад, построенный по принципу серии доктора Хауса. ©
Выступление Александра Чистякова с разгоном LAMP до второй космической скорости вообще целиком состояло из трюков и ощущалось как детективный сериал «Спрут». То мы их, то они нас, и таких двести итераций. Интересно, но несколько однообразно. ©


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

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




Внимание! Данная статья выбрана для репликации во внешнюю базу знаний компании. Пожалуйста, не допускайте в этой статье публикацию конфиденциальной информации, ведения обсуждений в теле статьи, и более ответственно относитесь к качеству самой статьи — проверяйте орфографию, пишите по-русски, избегайте непроверенной вами информации.