Масштабирование веб-сайта на Drupal CMS.

10 ноября 2007

Не секрет, что одной из самых популярных систем управления контентом с открытым кодом является система Drupal. На ней построено достаточно много сайтов, в том числе и всем известные mozilla.org, эта же система получила недавно первое место в конкурсе Packt Publishing Overall 2007 Open Source CMS Award. Написанная на популярном языке РНР и основанная на СУБД MySQL, Drupal имеет модульную структуру и развитые возможности построения веб-сайтов любого размера и назначения. В частности, она позиционируется и как комьюнити-платформа, способная реализовать все требуемые для социальных сетей функции. Действительно, имея внушительное число модулей, разработанных сторонними программистами, множество тем и шаблонов, Drupal может помочь в создании любого проекта, а мощное комьюнити, готовое как бесплатно, так и за вознаграждение предоставить техническую поддержку делают эту CMS интересным кандидатом.

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

Недавно и я столкнулся с такой проблемой, вернее, столкнулся с таким поведением, изучая отзывы других пользователей, выбирая CMS для проекта социальной сети, где обязательно нужно применять различные модули, часто запрашивающие данные с базы, а количество пользователей легко достигает нескольких тысяч посетителей в сутки. Конечно, сначала разработчик с такими нагрузками вряд ли столкнётся, поэтому первой его реакцией на возникшие затруднения будет настройка самой системы, благо почти каждый модуль умеет использовать кёширование, а в сети есть патчи, добавляющие даже поддержку memchached. Но таким способом также нельзя бесконечно улучшать производительность. А ведь есть в сети высоконагруженные проекты, базирующиеся именно на Drupal. Так что, сделать вывод, что эта система пригодна только для малых и средних проектов? Никак нет!

Наверное точно таким же вопросом озаботился и John Quinn, автор блога www.johnandcailin.com. Именно ему мы обязаны великолепной серией публикаций о масштабировании системы Drupal. Причём, в отличие от других авторов, John отлично иллюстрирует свои статьи, приводит примеры и детально разбирает файлы конфигураций используемых систем, а также основательно подходит к теме. Весь цикл состоит из 5 шагов, пока что детально разобраны только первые три, последние, по утверждению автора, как раз в работе. Далее мы кратко ознакомимся с содержанием материала.

Первая статья цикла анонсирует все последующие, а также описывает базовое окружение - автор применяет PHP 5, Drupal 5 и Apache 2, а в качестве операционной системы на сервере используется Debian Etch. Здесь же приведена сводная таблица параметров, и их оценка на каждом шаге.

Шаг 0. В этом руководстве описывается пошагово полная установка как самой CMS Drupal, так и всех необходимых для неё модулей - веб-сервера Apache, РНР и MySQL. Примечание: на мой взгляд автор все же упустил момент именно настройки самого Drupal и модулей, в частности, задействование штатных режимов кёширования, а также самостоятельную доработку для уменьшения нагрузки на базу. Хотя это, наверное, была бы уже совсем другая история.

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

Шаг 2. Здесь уже начинается понемногу "высший пилотаж". Устанавливаем два веб-сервера, а между ними балансировщик нагрузки, в виде модуля Apache proxy_balancer, таким образом получаем небольшой кластер веб-серверов, правда, база данных пока все равно одна. Автор описывает и подробности настройки Drupal в такой конфигурации, и отладку, и решение проблемы сессий, а также указывает на инструменты управления нашими серверами. В принципе, уже такая конфигурация во многих случаях сможет поддерживать нагруженный проект.

Шаг 3. Продолжаем совершенствовать наш кластер, добавив кластеризацию и балансировщика, а также динамическое переключение между узлами, что позволяет получить отказоустойчивую архитектуру. Мы применяем пакет heartbeat для реализации отказоустойчивого кластера и опроса состояния узлов для выявления сбоя и переключения на резервный.

Шаги 4 и 5 будут посвящены кластеризации сервера базы данных и будут доступны чуть позже.

От себя могу добавить, что материалы действительно очень интересны и полезны, написанные очень доходчиво и просто, и не должны вызвать особых сложностей при повторении.

  1. 31 декабря 2007 в 13:06 | #1

    Круто. Только до создания кластера стоит проделать следующие вещи:

    1) поставить memcached вместо стандартного кэширования Друпала
    2) поставить nginx
    3) поставить eaccelerator / APC
    4) увеличить оперативку чтобы почти вся БД кэшировалась

    У меня на 30 000 хитов при такой настройке сервер Sempron 3200 1Гб использует в среднем менее 20% ресурсов (по команде top). Debian Etch то что я описал… Среднее количество запросов mysql в секунду — от 100 до 150-200.

  2. 11 июня 2008 в 02:01 | #2

    А не поделитесь ли вы на mr.meew {at} gmail.com как оптимально настроить debian для drupal?

  3. 12 июня 2008 в 08:19 | #3

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

Комментирование отключено.