В версии 8.5.1 главного модуля появилась поддержка кеширования не только на диск, но и в разделяемую память. [spoiler] Акселераторы PHP поддерживают API работы с разделяемой памятью. Это значит, что все процессы веб-сервера могут читать и писать в общее адресное пространство. Это позволяет организовать совместно используемый синхронный кеш.
Вы можете сказать: "Но ведь данные приложения, кешированные в файл, кешируются на уровне файловой системы". На что можно ответить: "Бывают ситуации (например: резервное копирование) когда этот кеш вытесняется и становится не эффективным для использования". Преимуществом разделяемого кеша акселераторов является его нахождение в оперативной памяти. Случай свопинга не рассматриваем т.к. наличие свопинга говорит о неадекватной настройке хостинга. На производительной системе свопинга быть не должно. Вообще. Недостатком - его полный сброс при перезапуске веб сервера.
1. APC Использует уже имеющиеся механизмы разделяемой памяти. Предоставляя PHP программисту функции apc_fetch, apc_store и apc_delete. Недостаток 1: использует общую для скриптов и кеша память. Недостаток 2: при кешировании требуется сериализация данных.
2. eAccelerator При сборке расширения необходимо указать "--with-eaccelerator-shared-memory". Имеет те же недостатки, что и APC. Достоинство: есть возможность настроить сохранение кеша на диск.
3. Кроме акселераторов, схожим, но гораздо более богатым функционалом обладает демон memcached.
Это отдельный процесс использующий для коммуникаций протокол TCP/IP, который может поддерживать распределенный, разделяемый, синхронный кеш. К серверу на котором запущен memcached можно подключить более одного веб сервера. Использование memcached решает проблемы кеша акселераторов, но на первое место выходит штраф производительности из-за транспорта протокола.
На Ubuntu запустить memcached проще простого: Установка:
aptitude install memcached
настройки находятся в хорошо документированном файле:
/etc/memcached.conf
Запуск:
/etc/init.d/memcached start
Для PHP имеется три расширения для работы с сервером memcached. На данный момент Битрикс поддерживает "memcache".
4 Настройка Битрикса: Управление кешем реализуется через константы определяемые в файле dbconn.php Самая важная "BX_CACHE_TYPE" может принимать следующие значения:
files - использовать в качестве хранилища кеша диск. Это полностью совместимое поведение. При неудачных попытках включения других типов кеша будет использован именно этот тип.
memcache - подключаться к memcached для сохранения кеша. Включится только приналичии загруженного расширения "memcache" и установлении соединения с сервером.
eaccelerator - использовать в качестве хранилища разделяемую область памяти eAccelerator'а.
apc - APC.
Пример:
define("BX_CACHE_TYPE", "memcache");
Вторая константа "BX_CACHE_SID". Ее просто НЕОБХОДИМО определять, если на одном сервере запущено более одного Битрикса. Это соль которая будет подмешана ко всем ключам кеша. И позволит им "не перепутаться" (что я удивленный и наблюдал во время тестирования).
Результаты тестирования довольно противоречивы. Однозначного плюса (как и минуса) не получил ни один из механизмов.
А можете поделиться методикой тестирования и хотя бы в каких ситуациях происходило падение производительности?
P.S. Обновились до 8.5: первым в плане на тестирование и выкатку в продакшн работа с выборкой данных из связанных ИБ. P.S.2 Странная работа кеша в комментариях к блогу - я аватарку эту удалил и поменял на другую уже как пару дней назад. В форуме тоже, а вы старую храните.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».