Кеш базы данных

Для снижения нагрузки на основную СУБД Drupal применяется кеширование. Загруженные данные сохраняются в кеш для быстрого доступа к ним при последующих запросах.

ELiS также активно использует системный кеш Drupal для хранения собранных объектов книг. Для повышения производительности ELiS следует опитмально настроить кеширование в Drupal.

В Drupal кеш по-умолчанию хранится в основной базе данных. Для повышения производительности кеш можно перенести в память локального сервера (APCu Cache), в память сетевого сервера (Redis, Memcache) или использовать для хранения кеша базу данных (MongoDB).

APCu Cache данные хранит локально, т.е. не пригоден при использовании фермы серверов приложений, но является эффективным на одиночном сервере при достаточно большом объеме оперативной памяти. При перезагрузке сервера, данный кеш сбрасывается, в связи с чем его использование не рекомендуется в инсталляциях ELiS с большим числом документов.

Memcache не совместим с ELiS т.к. имеет ограничение на максимальный размер закешированных объектов в 1 МБ, который иногда может быть превышен.

Redis хранит данные в оперативной памяти, но периодически сохраняет снимки памяти диск, что позволяет обеспечить высокую производительность и сохранность кеша после перезагрузки.

MongoDB имеет модуль кеширования. Не рекомендуется использовать т.к. Redis опережает MongoDB по производительности.

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

Рекомендации по выбору системы кеширования

В конфигурациях с малым объемом оперативной памяти и в отсутствии возможности вынести кеш на отдельный сервер, рекомендуется оставить кеш в основной СУБД Drupal.

В случае достаточно большого количества оперативной памяти, рекомендуется применять Redis. При большой нагрузке Redis следует вынести на отдельный сервер с числом ядер процессора от двух до четырех и объемом оперативной памяти от 4 ГБ.

Настройка кеширования в Redis

Установите сервер Redis и настройте его автозапуск при загрузке сервера.

Установите модуль Redis и настройте его согласно инструкции. При этом вам потребуется добавить в php расширение для работы с Redis.

Настройка локального кеширования в APCu

Установите расширение к PHP с поддержкой APCu:

# dnf install php-pecl-apcu

Установите модуль apcu и настройте его согласно инструкции:

В /etc/php.d/40-apcu.ini установите для размера кеша то количество оперативной памяти сервера, которое вы готовы выделить под кеш в apc.shm_size:

apc.shm_size=1024M

Перезагрузите PHP:

# systemctl restart php-fpm

Скачайте и включите модули:

# cd /var/www/vh/library
# su elis
$ drush cc all
$ drush en apcu chained_fast

В файле /var/www/vh/library/sites/default/settings.php подключите использование кеша, разрешив для начала запись в файл:

$ chmod 0664 /var/www/vh/library/sites/default/settings.php
$ vi /var/www/vh/library/sites/default/settings.php

В конец файла /var/www/vh/library/sites/default/settings.php следует добавить сторчки:

$conf['cache_backends'][] = 'sites/all/modules/apcu/apcu.cache.inc';
$conf['cache_backends'][] = 'sites/all/modules/chained_fast/chained_fast.cache.inc';
$conf['chained_fast']['fast_backend'] = 'DrupalAPCuCache';
$conf['cache_default_class'] = 'ChainedFastBackend';
$conf['cache_class_cache_form'] = 'DrupalDatabaseCache';

Если у вас будут проблемы с кешем, сначала эти строчки надо будет закомментировать и лишь затем отключить модули apcu и chained_fast.