Ты кто такой? WordPress? До свиданья!
реклама
Людям, знакомым хоть немного с созданием сайта наверняка знаком популярный блоговый движок WordPress.
Безусловно, он очень удобен. Под него написаны тысячи плагинов и визуальных тем. Интерфейс админки понятен любому человеку.
Всё это замечательно ровно до того момента, пока в один прекрасный день владелец сайта не заметит, что сайт уже неприлично тормозит.
Эта статья адресована предусмотрительным или потенциальным владельцам сайта на WordPress.
Зачем что-то менять?
Причин тормозов существует масса. Будем считать, что вэб-сервер настроен оптимально под высокие нагрузки и железо на хостинге не самое отстойное, какое только может быть. О настройке VPS/своего_сервера я еще возможно напишу, если будет интерес со вашей стороны.
В конечном итоге мы придем к тому, что потребуется поднять производительность вэб-приложения.
Не секрет, хотя может для кого-то это станет откровением, что во многом производительность вэб-приложения ограничивается самым медленным звеном. Как правило, этим звеном являются системы хранения данных. А что чаще всего выступает в их роли? База данных.
Типичная база данных (далее - БД) для PHP-приложение это MySQL, хотя бывает некоторые более продвинутые люди используют и PostgreSQL. Эти БД в совокупности с такими как MSSQL или OracleDB относятся к типу реляционных БД.
При этом относительно недавно стали набирать популярность нереляционные БД ( NoSQL). Я не стану копипастить из википедии, если интересны подробности - загуглите. Если вкратце, то обычные SQL БД, при всей их замечательности с точки зрения мощности функционала, не всегда оптимальны для решения конкретной задачи. Причина этому недостаточная производительность, стоимость или даже некоторые особенности хранения данных.
Одной из наиболее популярных, бесплатных, удобных и хорошо документированных NoSQL БД является MongoDB.
Встает закономерный вопрос: можно ли как-то использовать эту БД на своих проектах, где традиционно использовался MySQL? К сожалению, в силу структурных различий баз данных сходу, "из коробки", заменить не получится. Тем не менее, некоторые энтузиасты проявили инициативу и, к примеру, выпустили специальную версию WordPress под MongoDB. Назвали незатейливо и соответственно - MongoPress.
Пожалуй стоит привести несколько графиков, показывающих превосходство.
Конфигурация весьма производительная:
-
Linux Debian Lenny Kernel 2.6.26-2-amd64 -
Intel(R) Core(TM) i5 CPU 661 @ 3.33GHz -
4GB RAM -
HDD SATA Model Number: WDC WD5000AADS-00S9B0 (500GB)
Задача достаточно типовая:
-
MySQL: Select – Update – Insert – Delete -
MongoDB: Find – FindAndModify – Save – Remove
Первый случай: одно подключение к базе данных. График показывает зависимость времени выполнения запросов от количества операций в очереди.
Здесь в лидерах безусловно MySQL. Однако это не совсем характерная нагрузка, присущая вэб-сайтам, где обычно разрешается несколько десятков одновременных подключений к БД.
Посмотрим, как в таком случае справятся участники теста.
Здесь всё встает на свои места. MongoDB показывает чуть менее чем 2-кратное превосходство над MySQL!
Таким образом, мы убедились в том, что MongoPress должен показать заметно лучшую отзывчивость для сайтов с высокой посещаемостью.
Поехали?
Я использую Ubuntu Server 12.04 на своем VPS. Поэтому и буду описывать шаги установки и настройки под Debian-based систему.
Допустим, что у вас уже есть готовый вэб-сервер. Если хотите на тестовом попробовать - sudo apt-get install lamp-server^ :) MySQL и MongoDB мирно сосуществуют.
Хотя у Ubuntu есть mongo в штатном-репозитарии, для самой свежей версии лучше добавить mongodb-репозитарий в aptitude:
1) sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
2) sudo nano /etc/apt/sources.list
Добавляем в конец файла строчку
deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen
3) sudo apt-get update
4) sudo apt-get install mongodb-10gen
Если установка успешно завершена, то выполнив команду "mongo" вы попадете в консоль базы данных.
Теперь установим библиотеку для работы php с mongodb.
Нам понадобится PECL. Если у вас его нет, то скорее всего нет и php-pear. Решается это просто:
реклама
sudo apt-get install php-pear
Теперь ставим и подключаем библиотеку:
sudo pecl install mongo
В папке /etc/php5/conf.d/ создаем файл например mongo.ini (sudo nano /etc/php5/conf.d/mongo.ini) и пишем туда строчку
extension=mongo.so
Также вам понадобится библиотека php GD. Если ее все еще нет, то ставится с помощью команды:
реклама
sudo apt-get install php5-gd
И наконец, рестартуем вэб-сервер.
Для Apache это sudo /etc/init.d/apache2 restart
Если у вас nginx/php-fpm, то наверное и так поймете :)
Проверяем подключение библиотек через обычную функцию phpinfo()
Пора поставить MongoPress.
На сайте http://www.mongopress.org качаем его и распаковываем архив в корень вэб-сервера (если там ничего еще нет) или куда вам нужно.
Прописываем права на запись конфигов:
chmod 777 /var/www/mp-settings
chmod 777 -R /var/www/mp-cache
Открываем сайт - видим инсталлятор.
Заполняем, что он просит. После установки последуем его рекомендации безопасности и поставим права:
chmod 755 /var/www/mp-settings
Перезагружаем страницу. Если видим тоже самое сообщение, то этот баг лечится комментированием содержимого функции mongopress_install_error в файле mp-includes/mp-loader.php
После этого всё должно заработать.
P.S.
MongoPress требует наличия mod_rewrite или аналогичного движка.
Для администрирования MongoDB лично я поставил RockMongo.
Дефолтный логин/пароль на БД admin/admin
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают