160 likes | 397 Views
Pinba статистика в режиме реального времени. Довгаль Антон, Badoo.com tony@daylessday.org. Немного о себе. Разработчик PHP с 2003-го года Автор OCI8, PECL/haru, PECL/memcache, PECL/libevent, PECL/memtrack, PECL/rar, PECL/sphinx и др. С 2007-го года работаю в Badoo.com. Что это?.
E N D
Pinbaстатистика в режиме реального времени Довгаль Антон, Badoo.com tony@daylessday.org
Немного о себе • Разработчик PHP с 2003-го года • Автор OCI8, PECL/haru, PECL/memcache, PECL/libevent, PECL/memtrack, PECL/rar, PECL/sphinx и др. • С 2007-го года работаю в Badoo.com
Что это? • Pinba — это демон для сбора данных о выполнении скриптов на рабочих серверах • Pinba — это custom storage engine для MySQL • Pinba — это «попугай лори» на языке австралийских аборигенов • Pinba — это PHP Is Not a Bottleneck Anymore
Зачем это? • Большой сервис требует постоянного контроля • Много серверов, много кода, много людей • Xdebug и ему подобные — для дебага, не для продакшена • Обработка данных на лету • Красивые графики радуют менеджеров
Как это работает? • Каждый скрипт шлет пакет с данными • Это происходит после окончания выполнения запроса • Для отсылки пакета используется UDP • Сервер хранит пул из последних N пакетов, т.е. данные по последним N запросам • Для пользователя всё выглядит, как обычная база MySQL
Данные • домен • имя физического сервера • имя скрипта • количество обработанных запросов • объем вывода скрипта • пиковое количество выделенной памяти • время выполнения скрипта • использованные системные ресурсы (user/system) • таймеры
Таймеры • Одна из главных причин создания Pinba • Позволяют засекать время исполнения произвольных частей кода • Для группировки и суммирования таймеров используются таги вида «имя» => «значение».
Примеры таймеров $timer1 = pinba_timer_start(array("db"=>$db_server, "op"=>"connect")); $c = mysql_connect($db_server, $user, $password); pinba_timer_stop($timer1); $timer2 = pinba_timer_start(array("db"=>$db_server, "op"=>"select", "query"=>"users")); $r = mysql_query("SELECT .. FROM User ..", $c); if (!$r) { pinba_timer_tags_merge($timer2, array("result"=>"failure")); } pinba_timer_stop($timer2);
Интерфейс к данным • «Виртуальные» таблицы с сырыми данными: • request — данные запроса • timer — значения таймеров • tag — имена тагов • timertag — таймеры <-> таги + значения тагов, «один ко многим»
Отчеты • Запросы по сырым данным — это медленно • Отчеты обновляются на лету • Фиксированные отчеты: • с группировкой по скрипту • по серверу • по домену • по серверу и скрипту • по домену и скрипту • по домену и серверу • по домену, серверу и скрипту • Отчеты по произвольным тагам
Пример из жизни Обратный пик на графике общего числа запросов в секунду
Пример из жизни Пики на графике среднего времени выполнения скриптов
Пример из жизни Одновременное замедление всех скриптов
Пример из жизни Причина — падение одной из баз
Есть чо? Вопросы?
http://pinba.org Спасибо!