Новости, акции и скидки для нынешних и будущих клиентов, инструкции по настройке сайта и сервера, лайфхаки

27 Июля 2017
Технологии

Как уменьшить нагрузку на сервер и ускорить WordPress с помощью Memcached

Memcached — система распределенного кэширования памяти
Memcached кэширует данные и объекты прямо в память RAM и сокращает время доступа к внешнему ресурсу (например, вызовы БД или API-вызовы). Это особенно помогает динамическим системам, таким как WordPress или Joomla!, заметно ускоряя время обработки запроса.

Важно: перед началом хотим заметить, что Memcached не имеет встроенных мер безопасности для работы на shared-хостинге! Данная инструкция подходит только для выделенного сервера (VPS).
 

Установка Memcached


На нашем сервере используется Plesk с CentOS 7.x. Тем не менее, это руководство применимо и к другим системам, однако при выполнении следующих операций нужно использовать утилиты, специфичные для определённых систем (например, apt-get вместо yum). Для того чтобы установить Memcached, в первую очередь следует подключиться к серверу по SSH и использовать командную строку:

# yum install memcached

После завершения установки вводим следующую команду:

# service memcached start

Далее следует установить PECL-версию Memcached для нужной версии PHP. WordPress полностью совместим с PHP 7, поэтому давайте активируем Memcached для последней версии PHP — 7.1. Начнём с установки всех необходимых пакетов для добавления их к нашему кастомному PHP-модую в Plesk:

# yum install make plesk-php71-devel gcc glibc-devel libmemcached-devel zlib-devel

Соберите модуль, следуя этим инструкциям. Вы можете не указывать директорию Memcached вручную, просто нажмите Ввод при запросе:

/opt/plesk/php/7.1/bin/pecl install memcached

Следующим шагом станет добавление строчки к соответствующему конфигурационному файлу, чтобы зарегистрировать модуль в PHP. Вы можете использовать командную строку, не открывая самого файла в редакторе:

# echo "extension=memcached.so" > /opt/plesk/php/7.1/etc/php.d/memcached.ini

И наконец, перечитайте обработчики PHP, чтобы модуль отобразился в информации о PHP в графическом меню Plesk.

# plesk bin php_handler —reread

Теперь Вы можете вызвать страницу phpinfo(), чтобы проверить корректную загрузку модуля Memcached:

post img

Информация о memcached в phpinfo()

Либо используйте командную строку:

post img

Проверка работы memcached в командной строке

# /opt/plesk/php/7.1/bin/php -i | grep "memcached support"
 

Защитите и контролируйте ваш Memcached


Memcached по умолчанию использует порт 12211.Из соображений безопасности можно перенаправить данный порт на локальную машину.
Добавьте следующую строку в конец файла /etc/sysconfig/memcached и перезагрузите службу Memcached:

OPTIONS="-l 127.0.0.1"

Для мониторинга и получения статистики от Memcached используйте следующие команды:

echo "stats settings" | nc localhost 11211
/usr/bin/memcached-tool localhost:11211

 

Активируйте Memcached в WordPress


Как только Memcached установлен на сервер, он доступен для активации в WordPress. В первую очередь нужно активировать бэкенд Memcached специальным скриптом, который автоматически определяет, использовать ли Memcached в качестве кэширующего механизма.

Скачайте скрипт с https://github.com/bonny/memcachy и переносите все файлы в директорию /wp-content/.

Если Вы не меняли порт Memcached по умолчанию (11211), Вы можете использовать его напрямую. Если вы изменили его, то в файл wp-config.php, лежащий в корневой директории вашей установки WordPress, следует добавить следующий код:

$memcached_servers = array( array( '127.0.0.1', 11211 ) );

Теперь, когда активирован бэкенд, мы установим кэширующий плагин для сохранения и предоставления обработанных страниц через Memcached. Установите плагин Batcache (https://WordPress.org/plugins/batcache/) используя инструкцию по установке:

Важно: убедитесь, что Memcached для выбранной версии PHP включён корректно, иначе добавление этой строки вызовет ошибку!

  1. скачайте и разархивируйте архив;
  2. загрузите файл advancaed-cache.php в директорию /wp-content/;
  3. откройте wp-config.php и добавьте следующую строку: define('WP_CACHE', true);
  4. загрузите batcache.php в директорию /wp-content/plugins.



Вот и всё! Теперь можете открыть advanced-cache.php и отрегулировать настройки по вашему усмотрению. Файл batcache.php — это небольшой плагин, который регенерирует кэш на статьях и страницах. Не забудьте активировать плагин в бэкенде на странице плагина!
 

Проверьте правильность работы Memcached в WordPress


Теперь давайте убедимся, что все действия были выполнены как нужно. Самым простым способом подтвердить то, что генерируемая страница выдаётся из кэша, станет добавление дополнительного поля заголовка к ответу.

Чтобы это сделать, нужно изменить файл advanced-cache.php. Откройте его и найдите строку

var $headers = array();

Замените её на:

var $headers = array('memcached' => 'activated');

Откройте инструменты разработчика в своём браузере (F12 для Crhome), выберите вкладку «Network» и перезагрузите страницу несколько раз, чтобы быть уверенным, что страница грузится из кэша, и проверьте ответные заголовки. Если вы видите поле memcached — у уас всё получилось!

post img

Memcached – проверка ответных заголовков
 

Memcached – проверка ответных заголовков


Обратите внимание, если вы вошли (залогинились) в административную панель сайта на WordPress, кэширование не будет задействовано и система всегда будет отдавать незакэшированную версию страницы. Каким образом проверить функциональность кэша в этом случае? Разлогиньтесь или откройте новую вкладку браузера в режиме «Инкогнито» и используйте инструменты разработчика в браузере.

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

post img

Исходный код загружаемой страницы
 

Проведём стресс-тест вместе с Blitz.io



Мы можем провести нагрузочное тестирование с помощью стресс-теста, симулирующего множество одновременных посещений ресурса на протяжении определённого времени. Если ваш сервер не защищён от повышенной нагрузки, он начнёт отвечать медленнее до тех пор, пока не сможет больше обрабатывать запросы. Если Memcached активирован, сервер продержится дольше и не будет выдавать ошибок.

Давайте запустим некоторые тесты на загрузку и производительность с помощью сервиса Blitz.io.
Отметим: для этого стресс-теста использован небольшой сервер с одним CPU и 500Мб памяти.

post img

Стресс-тест без использования Memcached

Результат БЕЗ использования Memcached:

Результат такой же, как у стресс-теста Varnish. Как видите, пришлось прекратить стресс-тест, так как сервер не смог обрабатывать запросы быстрее 5 секунд при 50 одновременных подключённых пользователях. Всего лишь через 15 секунд сервер полностью перестал отвечать на запросы.

post img

Стресс-тест WordPress и включённый Memcached

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

Таким образом, использование Memcached — отличная идея для тех, кто хочет большей устойчивости к нагрузке. При помощи этой системы даже можно обезопасить сайт от небольших атак. Для защиты сервера от настоящей ДдоС-атаки (Distributed Denial of Service — атака на отказ в обслуживании) следует использовать сервис CloudFlare, Куратор или аналогичные системы фильтрации.
 

Заключение: WordPress отлично работает с Memcached


Memcached может значительно улучшить производительность сайта на WordPress и снизить нагрузку на CPU вашего сервера. Он прост в установке и работает «из коробки».

Перевод: Антон Ларгин (Русоникс)
Оригинал: plesk.com