Николай Ланец
7 нояб. 2015 г., 15:54

modMonitor. Мониторинг и оптимизация производительности MODX-сайтов.

Полтора месяца назад я писал про наше новое направление — управляемые сервера на базе технологии puppet. Это позволяет быстро настраивать свои собственные веб-сервера. Преимущество данной технологии заключается в том, что мы не завязываемся на каком-то одном хостинг-провайдере, а предоставляем именно технологию по настройке и управлению веб-сервера, а хостинг-провайдера каждый может выбрать себе сам (кто-то по цене/качеству, кто-то по физическому расположению, не важно).
Эти полтора месяца прошли не зря и работа не останавливалась. И вот сегодня я хочу рассказать о новом продукте на этой базе — специальный сервер мониторинга, основанного на технологии zabbix. Суть его в том, что есть единый мастер-сервер (на самом деле не один, но это не суть), и к этому серверу могут подключаться сторонние веб-серверы с помощью zabbix-клиента, который устанавливается и настраивается автоматически нашим puppet-сервером. Далее все происходит автоматически: мастер-сервер запрашивает с конечного сервера список имеющихся на нем сайтов и автоматические добавляет их в статистику, выделяя на каждый сайт отдельный график.
?
После этого он регулярно обращается на zabbix-клиент за информацией о скорости загрузки этих сайтов. В дальнейшем можно отслеживать на каких сайтах есть проблемы с производительностью.
Вот сразу парочка кейсов:
?
?
Видно не вооруженным глазом, что производительность сайтов увеличилась. Понятное дело, что одного только мониторинга для этого не достаточно, но мониторинг позволяет постоянно следить за производительностью сайтов, и можно даже настроить автоматические действия на те или иные показатели.
Вот про второй пример я расскажу сейчас детальней. Дело в том, что на нем пришлось выполнить не сложную, но хитрую оптимизацию, и здесь как раз сыграла роль наша еще одна наработка — modMonitor. Внимательный читатель результат его работы мог видеть еще здесь. В чем его смысл? Он встраивается в механизм шаблонизации MODX-а и отслеживает все вызовы MODX-элементов по мере отработки страницы и аккуратно все это дело складывает в базу данных. Таким образом у нас собирается информация не только о том, какая страница сколько по времени грузится, сколько на ней запросов к БД и т.п., но еще и какие элементы на ней сколько выполняются. Это позволяет не просто узнать на какой странице проблемы, а какой именно элемент доставляет эти проблемы и что надо оптимизировать, чтобы сайт заработал лучше. Рассмотрим лучше как это используется, на примере оптимизации городских бань. Вот мы видим какие на нем элементы медленней всего работали: [modSnippet 'smarty']. Время выполнения: 0.3769 [modSnippet 'smarty']. Время выполнения: 0.3926 [modSnippet 'smarty']. Время выполнения: 0.2937 В нашем случае это шаблоны вывода последних публикаций, обзоров и комментариев. Проблема в том, что на сайте различные уровни доступов используются и по сути эти выборки должны быть не кешируемые, так как какие-то публикации/комментарии просто не должны быть видны тем, кому нельзя их видеть. Но так как функционал и объем сайта вырос, а выборки усложнились, скорость выполнения скриптов упала и без кеширования здесь уже как-то совсем не очень. Что я здесь сделал? На самом деле решение очень простое: я просто в выборки добавил кастомные префиксы с учетом id текущего пользователя. ‘cache’ => 1, ‘cache_prefix’ => “getdata/{$modx->user->id}/” Эти параметры передаются в getdata-процессоры, а там уже прописано кеширование.
Учитывая, что за сутки львиная доля пользователей на сайте анонимы (id=0), и не более двух-трех десятков авторизованных пользователей, там мы получаем и индивидуальные выборки с учетом прав пользователя, и существенно снижаем нагрузку на сервер.
В итоге уже после оптимизации первого элемента у нас получается вот такая картина: [modSnippet 'smarty']. Время выполнения: 0.0956 [modSnippet 'smarty']. Время выполнения: 0.3832 [modSnippet 'smarty']. Время выполнения: 0.3039
То есть где-то в 4 раза сразу нагрузку по элементу сократили.
Оптимизировав еще два элемента получаем: [modSnippet 'smarty']. Время выполнения: 0.0997 [modSnippet 'smarty']. Время выполнения: 0.1363 [modSnippet 'smarty']. Время выполнения: 0.0376
В итоге, подправив еще пару мелочей, я получил скорость загрузки главной страницы 0.17-0.25 сек против 1.5-2.5 сек ранее. И все это за 30-40 минут работы. Собственно, для этого modMonitor и писался, чтобы отслеживать в каких именно местах править, чтобы нагрузка существенно снижалась.
Вообще, прежде чем писать modMonitor, я глянул сначала аналогичный модуль debugParser от Василия. Но он имеет пару важных недочетов, которые не позволили мне его использовать. Во-первых, он не отслеживает вызовы элементов через API, к примеру, $modx->runSnippet($snippet). Учитывая то, что у нас Smarty и что мы часто используем MODX API (а в pdoTools активно развивается fenom, в котором тоже API позволяется выполнять), я не мог этот недостаток игнорировать. Не буду сейчас объяснять с какими трудностями я столкнулся в реализации данного функционала, но скажу, что даже у меня это заняло часа 4 и не явилось тривиальной задачкой. Во-вторых, он не сохраняет информацию в БД, он просто выводил лог где что сколько выполняется. Хоть это и не особая проблема, но все же. Но плюс ко всему мне еще важно было реализовать сохранение этой статистики в отдельную базу данных. В нашем случае это особенно важно, так как хочется на один сервер выделять отдельную базу данных, куда бы сливалась статистика производительности со всех сайтов на нем. Собственно, это следующий ближайший шаг развития нашей технологии хостинг+мониторинг — мониторинг производительности всего сайта, а не только его главной страницы. Большинство сервисов мониторинга следят только за главной страницей или какими-то отдельными страницами. Наш же modMonitor в базу будет складывать информацию о всех запрашиваемых страницах и информация о производительности всегда будет комплексная и очень точная. Таким образом можно будет отследить любую тормозящую страницу. Ведь здесь может быть очень много факторов (что за страница, из кеша или нет, авторизован пользователь или нет и т.д. и т.п.). Важно еще учитывать и то, что на один MODX-движок может вести сразу несколько доменов, то есть на нем может висеть несколько сайтов. modMonitor учитывает и это. Очень скоро серверные скрипты будут переписаны на то, чтобы информацию о сайтах получать из единой базы modMonitor и графики будут создаваться для всех запрашиваемых хостов, даже если на сайт прописана маска поддоменов.
Здесь еще есть один приятный момент: если кто хочет для себя получить такой мониторинг сервера, не обязательно, чтобы сервер был с нуля создан нашим паппет-мастером. Достаточно, чтобы сервер крутился на ubuntu-14+ + nginx (+ не важно что). То есть его так же можно подключить к нашему мастеру, только просто мы включаем для него классы nginx, mysql и т.п., а только прописываем zabbix-client. Если кто-то хочет себе такой мониторинг, цена вопроса 2000 рублей на один сервер в год. Это будет подключение сервера к мониторингу + выделенная панель с графиками. Участники получат дополнительно наши консультации и бонусы, а так же поддержат развитие очень важных для всех нас технологий. Так же, мы можем взять к себе на обслуживание и мониторинг ваш MODX-сайт, если вы конечный собственник, а не веб-студия/разработчик. Цена договорная.
P.S. modMonitor пока не опубликован, но скоро будет. И для его работы не обязательно будет использовать наш монитор-сервер, он будет работать и автономно.
UPD: Тем же самым способом немного оптимизировал сайт Клуба. Результат: ?
У меня была большая проблема с предыдущим хостингом. Прежде всего очень медленно работала админка, любое изменение на сайте было долгим и нудным. Все зависало, причем, сайт становился недоступным — ибо шел большой перегруз на сервер. На хостинге проблемы не видели. Создал страницу, загрузил картинку — подвисло все. Если объем работы был большой, то через какое то время становился недоступным сайт. В общем все было грустно и лишний раз что то делать не было горячего желания. В конце концов я все таки решил перейти на новый хостинг и выбрал от Модекс клуба с анализом. Огромное спасибо Николаю, который исправил достаточно серьезные ошибки, из за которых происходили все эти странные и неприятные вещи с зависаниями и доступностью. Ну и кроме того нельзя не отметить скорость с которой все начало загружаться, открываться, двигаться — разница ощутима. Что касается админки и работы в ней — то это в разы просто стало быстрее. Что называется- " не успел подумать и начать, а оно уже сделано". Просто милисекунды. Я даже не могу привыкнуть после старых тормозов. Так что если вы сталкиваетесь с проблемами, то можно рекомендовать этот хостинг, чтобы ни посетителям не доставлять неудобства, да и самому приятно, когда твой сайт просто «летает» и с ним приятно и легко работать. Обращайтесь не пожалеете. Отдельно надо отметить профессионализм Николая, который наладил все буквально в течении короткого времени, причем все в режиме приятного диалога, чувствуется «рука мастера». Спасибо.

Добавить комментарий