4 июня(суббота) 2011 Москва

Телефон: +7 (495) 502-33-78
E-mail: 2011@devconf.ru

Архив 2011года - актуальная информация тут

Оптимизация LAMP-приложения на примере OpenX: разгоняемся до 1000 запросов в секунду

Александр Чистяков:
Разрабатываю ПО с 98-го года.
Писал на VHDL, Java, Perl, PHP, C, C++, Python.
Опкод 0x90 это NOP.

Доклад(45 мин)    Презентация (ppt, 398 Kb)

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


Список заявок секции