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

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

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

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

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

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

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

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

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

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

WordPress и memcache

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

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

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

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

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

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

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

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

указывать их не нужно, так как доступ к 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- , по умолчанию выключено.

Проведем тестирование скорости загрузки страниц сайта, с помощью утилиты 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/), затем перейти в раздел Сайт->Общие настройки:

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

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

  • Кеш -> Стандартное кеширование
  • Обработчик кэширования -> 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

Отредактировать необходимый файл можно, подключившись к серверу по 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"
       ),
    ),
 );
?>

Для проверки, что сайт использует 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.

Удачной работы! Если возникнут вопросы - напишите нам, пожалуйста, тикет из Панели управления аккаунта, раздел "Помощь и поддержка".

Теги:

39
28588