Кеширование на Drupal-сайте. Сравнение встроенного в Drupal кеша, статического файлового кеша (модуль Boost) и Varnish

Публикую текст своего доклада для Друпалконфа, который прошел 4 июня 2012 года в Москве. Хочу акцентировать внимание на том, что этот текст не адаптирован под блогпост и публикуется в том виде, в котором я рассказывал его на конференции.

Введение

В текущем Drupal 6 проекте, над которым я работаю последние 2 года, в пике мы отдаем до 2 млн просмотров страниц в день и забиваем полностью наш 200-мегабитный интернет-канал. Судя по отчетам нашей системы мониторинга с текущей архитектурой и железом (6 серверов: 2 фронтэнда с nginx, 2 бэкенда с Varnish + Apache + Drupal и 2 MySQL-сервера с master-slave репликацией) мы можем выдерживать втрое большую нагрузку, если решим вопрос с каналом.

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

Я хочу рассказать о том, какие для Друпала существуют средства оптимизации скорости отдачи контента и сравнить их плюсы и минусы. Я не буду вдаваться в детали и приводить примеры конфигов, это все можно найти в интернете (я у себя в блоге выложу в ближайшее время пример конфига, используемого в наших проектах). Я не буду рассказаывать об оптимизации конфигов MySQL, установке систем кеширования опкода, так как это большая тема достойная отдельного доклада, она хорошо раскрыта, в интернете можно найти много статей по оптимизации окружения, в котором работает сайт. Кроме того, эта тема имеет мало отношения к Друпалу и больше должна быть интересна системным администраторам, чем программистам (хотя программистам тоже неплохо бы в ней разбираться).

Основная идея доклада в том, что на контеных сайтах (речь идет о блогах, интернет-магазинах, новостных сайтах, а не веб-сервисах типа поисковых систем) большинство пользователей видят то же содержимое страниц, что и все другие посетители это сайта, поэтому умело закешированные данные могут значительно снизить нагрузку на веб-сервер и базу данных и, как следствие, увеличить скорость отдачи контента, и при этом не навредить сайту, так как, например, для новостного сайта кеш страниц на 1 час совершенно неприемлем.

Читать дальше ➠

Любопытное поведение модуля syslog в шестом Друпале (баг?)

Описание проблемы

На сайте используется Drupal 6 и модуль theme key, который позволяет задавать разный дизайн для разных страниц. Столкнулся с неприятной и трудноуловимой проблемой: есть 2 полностью идентично настроенных (как казалось изначально) сервера, на одном из которых theme key отрабатывает корректно, а на втором нет — все время отображает контент в дефолтной теме оформления. Похожая проблема также встречалась в другом проекте, не использующем theme key, на странице управления блоками.

После некоторых экспериментов удалось выяснить, что сервера отличаются настройкой PHP error_reporting. На глючащем сервере она была задана так:

error_reporting = E_ALL & ~E_DEPRECATED

на работающем так:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE

Обновление этой настройки на некорректно работающем сервере решало проблему. Может показаться что это магия какая-то, мне так изначально и показалось: ну какое отношение имеют сообщения, выводимые в лог, к работе модулей и выбору темы оформления Друпала? В итоге, оказалось, имеют самое непосредственное отношение. Ниже описание причины проблемы и её решение.

Читать дальше ➠

Arduino + bluetooth, небольшая проблема

Вдохновленный вот этой серией статей об Ардуино, ставлю разные эксперименты над Ардуино, сегодня таки сумел подружить её с Bluetooth-модулем (скетч взял прямо из документации), но столкнулся с проблемой. При попытке загрузить скетч в Ардуино, когда схема уже собрана вот так:

Arduino

получал ошибку:

avrdude: stk500_getsync(): not in sync: resp=0x00

в Гугле про эту ошибку много чего понаписано, но ни одно решение не оказалось рабочим для меня. В итоге проблема решилась очень просто: перед загрузкой скетча я просто отсоединял блютуз-модуль из схемы.

Гугл 1 марта прекратил поддержку сервиса Google Friend Connect

Не ожидал такого от Гугла. Теперь встала задача придумать способ восстановить свои аккаунты толпе юзеров, которые использовали Google Friend Connect для авторизации на сайте и не знают свои пароли, и не могут вспомнить свои логины.

Проба пера в HTML5 + canvas. Эффект ластика

Задача Создать эффект “ластика” с помощью html5 тэга canvas. Суть эффекта простая: выводится картинка, поверх картинки выводится полупрозрачный фон, если пользователь нажимает на левую кнопку мыши и начинает двигать курсор по холсту, то полупрозрачный фон должен стираться.

Читать дальше ➠

Шесть рукопожатий

Интересная мысль о феномене “тесного мира” (или теории “шести рукопожатий”):

То, что существует шесть степеней отчуждения, вовсе не означает, что каждый человек отделен от любого другого максимум на шесть шагов. Это значит, что лишь небольшая группа людей связана со всеми и отделена от них всего несколькими шагами. А остальные имеют связь со всем миром благодаря этим избранным людям с широким кругом связей и знакомств.

Малкольм Гладуэлл

Доклад на DrupalConfMoscow 2011

23 апреля 2011 года принял участие в конференции DrupalConfMoscow 2011. Вместе с Тарасом Савчуком рассказал о том, как мы настраивали Друпал и системное окружение, чтобы сайт forbes.ru мог выдержать нагрузку 250 тысяч уников в сутки. Ниже видео и текстовая версия моей части доклада.

 

Читать дальше ➠

Статусы разных сущностей в Друпале 6

Запомни! В шестом Друпале для нод поле status равное 1 означает опубликованную ноду, 0 — неопубликованную, для блоков и комментариев наоборот! 0 — опубликованный блок/комментарий, 1 — неопубликованный.

Про эту особенность для блоков только сейчас узнал, часа 2 убил на поиск проблемы в работе hook_block.

Футер, прибитый к низу страницы

Давно не занимался версткой, сейчас понадобилось сверстать страницу с прибитым к низу страницы футером, помню что раньше не мог найти простого и универсального решения этой задачи, по этому обрадовался, когда нашел вот это решение: http://ryanfait.

Читать дальше ➠