Настройка и использование Memcached

В статье мы расскажем, что такое Memcache, зачем он нужен и как он влияет на работу некоторых популярных CMS.

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

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

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

Мы решили исправить этот недостаток, используя технологию контейнеров Docker, нами был создан специальный сервис "memcache". Теперь каждый может установить свой личный memcached, в котором будут гарантированно только Ваши данные.

Подключить персональный memcached возможно в Панели управления, в разделе Сервисы.

Сервисы Бегет

Для установки доступно несколько тарифов:
128 Мб - 2 руб./день
256 Мб - 4 руб./день
1024 Мб - 9 руб./день

memcached

Для многих систем управления сайтом (CMS) существуют механизмы работы с memcached. Далее мы рассмотрим настройку memcached для самых популярных CMS и проведем нагрузочное тестирование с целью узнать, как изменится производительность сайта.

Для тестирования производительности сайтов будем использовать утилиту siege.
Для каждой CMS будем проводить тестирование со временем 5 минут.

WordPress и memcache

Для установки плагина работы с memcache, нужно зайти в административную панель сайта (http://site.ru/wp-admin/), затем в выпадающем списке меню "Плагины", выбрать пункт "Добавить новый":

WordPress и memcache

На открывшейся странице в верхней части есть поиск по плагинам, нужно ввести в это поле название плагина WP-FFPC и нажать "Enter":

WP-FFPC

Затем нажать "Установить":

WP-FFPC установка

И активировать плагин:

WP-FFPC успешная установка

Готово, плагин установлен, осталось его настроить, для этого нужно зайти в настройки плагина:

WP-FFPC настройки

Установить тип расширения PHP Memcache (без d) можно для версий PHP 7.2 и ниже. Для версии 7.3 и выше Вы сможете выбрать только PHP Memcahed. Различия между этими двумя расширениями несущественны, оба расширения отвечают за подключение сайта к сервису Memcached.

PHP Memcache

Затем необходимо нажать "Сохранить настройки" (кнопка внизу страницы), в верхней части страницы должно появится сообщение о том, что настройки сохранены и плагин успешно работает с memcached:

Сохранить настройки

Также стоит отметить, что в настройках плагина (вкладка "Backend settings") есть возможность указать логин/пароль для подключения к memcached:

Backend settings

указывать их не нужно, так как доступ к memcached возможен только с вашего аккаунта.

Последний штрих - включение кеширования. Сделать это можно путем добавления специальной директивы:

define ( 'WP_CACHE', true );

в конфигурационный файл CMS wp-config.php (находится в корневой директории сайта), о чем нам напоминает сам плагин:

плагин конфигурационный файл

Отредактировать wp-config.php можно как через консоль ssh, например через утилиту PuTTy, так и через Файловый менеджер, который встроен в Панель управления хостингом:

Файловый менеджер в ПУ Бегет
Файловый менеджер в Бегет,
сохранить в файловом менеджере

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

Скорректировать настройки кеширования при необходимости можно в настройках плагина, например, время "жизни" кеша для определенных элементов сайта:

настройках плагина

Ключ для кеширования:

Ключ для кеширования

По умолчанию это:

$scheme://$host$request_uri

то есть ссылки вида http://site.ru/category/innovaciya/ , где

$scheme - тип соединения http или https
$host - доменное имя сайта
$request_uri - запрос, страница на сайте

На вкладке "Cache exceptions" можно настроить различные исключения для кеширования, такие как:

  • кеширование для залогиненных пользователей сайта (по умолчанию выключено);
  • кеширование отдельных элементов сайта (Exclude home/Exclude feeds/Exclude archives/Exclude pageg/Exclude singulars) и динамических страниц (Dynamic requests) по умолчанию включено;
  • кеширование для страниц, начинающихся с /wp- , по умолчанию выключено.
Cache exceptions

Проведем тестирование скорости загрузки страниц сайта, с помощью утилиты siege, время для тестирования - 5 минут. Результат при отключенном memcached:

Transactions:		        7258 hits
Availability:		      100.00 %
Elapsed time:		      359.89 secs
Data transferred:	       81.40 MB
Response time:		        0.49 secs
Transaction rate:	       20.17 trans/sec
Throughput:		            0.23 MB/sec
Concurrency:		        9.89
Successful transactions:    7258
Failed transactions:	       0
Longest transaction:	    6.54
Shortest transaction:	    0.34

Ключевые показатели:

Transactions: 7258 hits - количество опрошенных страниц сайта за 5 минут
Response time: 0.49 secs - среднее время ответа сервера при запросе

Результат с включенным memcached:

Transactions:		       11518 hits
Availability:		      100.00 %
Elapsed time:		      359.26 secs
Data transferred:         129.40 MB
Response time:		        0.12 secs
Transaction rate:	       32.06 trans/sec
Throughput:		            0.36 MB/sec
Concurrency:		        3.88
Successful transactions:   11518
Failed transactions:	       0
Longest transaction:	    5.35
Shortest transaction:	    0.07

Transactions: 11518 hits - количество опрошенных страниц сайта
Response time: 0.12 secs - среднее время ответа сервера

Как видно, кеширование уменьшило время ответа сервера в 4 раза.

Joomla и memcache

В CMS Joomla! система кеширования (memcached) уже присутствует, её нужно лишь включить. Для это необходимо зайти в панель управления сайтом (по умолчанию: http://site.ru/administrator/), затем перейти в раздел Сайт->Общие настройки:

Joomla и memcache

Выбрать пункт "Система":

пункт Система

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

  • Кеш -> Стандартное кеширование
  • Обработчик кэширования -> Memcache
настройки кеширования

Нажать кнопку "Сохранить" в верхней части страницы.

Сохранить в Джумла

Готово, сайт настроен для работы с memcached.

Проведем замер производительности, без использования memcached:

 Lifting the server siege...      done.
 Transactions:		       11431 hits
 Availability:		      100.00 %
 Elapsed time:		      359.61 secs
 Data transferred:	       42.37 MB
 Response time:		        0.13 secs
 Transaction rate:	       31.79 trans/sec
 Throughput:		        0.12 MB/sec
 Concurrency:		        4.01
 Successful transactions   11431
 Failed transactions:	       1
 Longest transaction:	    5.19
 Shortest transaction:	    0.00

С использованием memcached:

 Lifting the server siege...      done.
 Transactions:		       12203 hits
 Availability:		      100.00 %
 Elapsed time:		      359.21 secs
 Data transferred:	       44.46 MB
 Response time:		        0.09 secs
 Transaction rate:	       33.97 trans/sec
 Throughput:		        0.12 MB/sec
 Concurrency:		        2.96
 Successful transactions:  12203
 Failed transactions:	       2
 Longest transaction:	    5.10
 Shortest transaction:	    0.00

Видно уменьшение времени генерации ответа сервером - 0.09 сек. против 0.13 сек.

Хоть разница показателей и незначительна, но с увеличением количества контента на сайте и его посещаемости эта разница будет увеличиваться.

Drupal и memcache

Первым делом нужно подключится к серверу по ssh, например через утилиту PuTTy, затем в консоли ssh-клиента перейти в корневую директорию сайта с drupal'ом:

testtomas1@pixel:~$ cd /home/t/testtomas1/test123123.ru/public_html

Полный путь до сайта можно посмотреть в Панели управления, в разделе Сайты:

раздел Сайты

и выполнить команду:

testtomas1@pixel:~$ drush dl memcache

после чего появится сообщение:

Project memcache (7.x-1.5) downloaded to /home/t/testtomas1/test123123.ru/public_html/sites/all/modules/memcache. [success]

Project memcache contains 2 modules: memcache_admin, memcache.

Плагин установлен, осталось добавить несколько строк настроек в файл конфигурации CMS, по умолчанию этот файл (относительно корня сайта) находится по пути

./sites/default/settings.php

Для его редактирования из консоли можно воспользоваться одним из редакторов файлов, например vim или nano, также файл можно отредактировать из Панели управления, перейдя в раздел Файловый менеджер:

Файловый менеджер
правка в Файловом менеджере

В начало файла следуют добавить следующие строки:

$conf['cache_backends'][] = 'sites/all/modules/memcache/memcache.inc';
$conf['cache_default_class'] = 'MemCacheDrupal';
$conf['lock_inc'] = 'sites/all/modules/memcache/memcache-lock.inc';

И сохранить его:

Сохранить в файловом менеджере

Установка плагина завершена, осталось его активировать, для это нужно зайти в административную панель сайта http://site.ru/admin/ перейти в раздел "Модули":

раздел Модули

в самом низу страницы отметить чекбоксы для активации плагина и нажать кнопку "Сохранить":

кнопка Сохранить

Установка завершена, сайт использует кеширование memcache.

Проведем тест скорости загрузки страниц сайта с помощью siege:

Без использования memcached:

 Transactions:		         4501 hits
 Availability:		       100.00 %
 Elapsed time:		       359.76 secs
 Data transferred:	        43.80 MB
 Response time:		         1.09 secs
 Transaction rate:	        12.51 trans/sec
 Throughput:		         0.12 MB/sec
 Concurrency:		        13.62
 Successful transactions:    4501
 Failed transactions:	        7
 Longest transaction:	     7.88
 Shortest transaction:	     0.42

с использование memcached:

 Transactions:		         5894 hits
 Availability:		       100.00 %
 Elapsed time:		       359.68 secs
 Data transferred:	        57.49 MB
 Response time:		         0.72 secs
 Transaction rate:	        16.39 trans/sec
 Throughput:		         0.16 MB/sec
 Concurrency:		        11.76
 Successful transactions     5894
 Failed transactions:	        4
 Longest transaction:	     7.51
 Shortest transaction:	     0.40

Сравним разницу:

 Response time:		         1.09 secs
 Response time:		         0.72 secs

Видим прирост производительности на одну треть.

Bitrix и memcache

Для подключения кеширования memcache в CMS Bitrix необходимо отредактировать файл:

./bitrix/php_interface/dbconn.php (если версия ядра меньше 14.0)

либо

./bitrix/.settings_extra.php (если версия ядра выше 14.0). Если файл ./bitrix/.settings_extra.php отсутствует, то его необходимо создать.

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

http://site.ru/bitrix/admin/index.php

Bitrix о системе

Отредактировать необходимый файл можно, подключившись к серверу по ssh, используя утилиту PuTTy, или через Файловый менеджер, который встроен в Панель управления хостингом.

Файловый менеджер в панели управления

Если редактируется файл ./bitrix/php_interface/dbconn.php (версия ядра меньше 14.0), то следует добавить строки:

define("BX_CACHE_TYPE", "memcache");
define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01");
define("BX_MEMCACHE_HOST", "127.0.0.1");
сохранить в Файловом менеджере

Если редактируется файл ./bitrix/.settings_extra.php (версия ядра выше 14.0), то следует добавить строки:

<?php
return array(
  'cache' => array(
    'value' => array (
       'type' => 'memcache',
       'memcache' => array(
           'host' => '127.0.0.1',
           'port' => '11211'
       ),
       'sid' => $_SERVER["DOCUMENT_ROOT"]."#01"
       ),
    ),
 );
?>
editor в Файловом менеджере

Для проверки, что сайт использует memcached, следует перейти в административную панель сайта->настройки->панель производительности->Битрикс:

административная панель сайта

Хранение кеша должно быть установлено в memcache:

Хранение кеша

Сравним производительность сайта.

Без использования memcached:

 Lifting the server siege...      done.
 Transactions:		       13383 hits
 Availability:		      100.00 %
 Elapsed time:		      359.80 secs
 Data transferred:	        3.19 MB
 Response time:		        0.07 secs
 Transaction rate:	       37.20 trans/sec
 Throughput:		        0.01 MB/sec
 Concurrency:		        1.42
 Successful transactions:      0
 Failed transactions:	       5
 Longest transaction:	    2.42
 Shortest transaction:      0.00

с использование memcached:

 Lifting the server siege...      done.
 Transactions:		       13587 hits
 Availability:		      100.00 %
 Elapsed time:		      359.68 secs
 Data transferred:	        3.23 MB
 Response time:		        0.03 secs
 Transaction rate:	       37.78 trans/sec
 Throughput:		        0.01 MB/sec
 Concurrency:		        0.95
 Successful transactions:      0
 Failed transactions           0
 Longest transaction:       1.04
 Shortest transaction:      0.00

Видим, что сервер тратит меньше времени на генерацию страницы:

 Response time:		        0.07 secs
 Response time:		        0.03 secs

С увеличением контента и посетителей ресурса разница будет значительнее.

Насколько мы видим, все представленные CMS работают быстрее. При этом тестирование проводилось на CMS «из коробки» (установка производилась из Панели управления, раздел CMS), т.е. без контента, а это означает, что на рабочих и заполненных сайтах увеличение скорости работы будет видно более явно.

Webasyst и memcache

Для использования memcached с Webasyst требуется создать в каталоге сайта файл wa-config/cache.php с следующим содержимым:

<?php
return array(
    'default' => array(
        'type' => 'memcached',
        'servers' => array(
            array(
                'host' => 'localhost',
                'port' => 11211,
            ),
        )
    )
);

Убедиться, что кэширование работает, можно, создав в корне сайта файл с таким кодом:

<?php
$cache = new Memcached();
$cache->addServer('localhost', 11211);
echo '<pre>';
var_dump($cache->getAllKeys());
echo '</pre>'; 

При обращении к нему будут выведены все ключи данных, хранящихся в Memcached.

ModX Revolution и memcache

Для подключения Memcached к ModX Revolution необходимо выполнить следующие действия:

Перейдите в административную панель вашего сайта, после чего перейдите в раздел "Системные настройки":

системные настройки

После этого, вам нужно будет найти параметр "cache_handler": 

cache handler

Кликните на шестеренку справа. В строке Значение необходимо будет изменить параметр в соответствии с вашей версией CMS. Версия CMS указана рядом с логотипом в верхнем левом углу:

версия cms
версия cms

Для ModX версии 3 и выше укажите параметр xPDO\Cache\xPDOMemCache в строке Значение.

caching
Обратите внимание!
Для ModX версии 2 и ниже укажите параметр cache.xPDOMemcached в строке Значение.

Готово! Если несколько Ваших сайтов используют Memcached, то нужно будет так же указать префикс для каждого из сайтов, чтобы они не “тянули” данные друг друга. Сделать это можно создав параметр "cache_prefix" с значением domain_, где domain - название вашего сайта. 

Кликните Создать в этом же разделе:

создать

В открывшемся окне укажите необходимые параметры и выберите пространство имен core:

cache prefix

Если возникнут вопросы, напишите нам, пожалуйста, тикет из панели управления аккаунта (раздел “Помощь и поддержка”), а если вы захотите обсудить эту статью или наши продукты с коллегами по цеху и сотрудниками Бегета – ждем вас в нашем сообществе в Telegram.

Теги: