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

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

  • Wordpress
  • Joomla!
  • Drupal
  • Bitrix

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

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

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

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

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


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

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

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


Wordpress и memcache

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


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


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

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


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


Установить тип кеша PHP memcache:

Именно "PHP memcache", без d, так как в списке ещё есть "PHP 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';
    


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


    Установка плагина завершена, осталось его активировать, для это нужно зайти в административную панель сайта 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

    либо

    ./bitrix/.settings.php (если версия ядра выше 14.0)

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

    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.php, то следует добавить строки:

     '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), т.е. без контента, а это означает, что на рабочих и заполненных сайтах увеличение скорости работы будет видно более явно.





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