В версии 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". Ее просто НЕОБХОДИМО определять, если на одном сервере запущено более одного Битрикса. Это соль которая будет подмешана ко всем ключам кеша. И позволит им "не перепутаться" (что я удивленный и наблюдал во время тестирования).
1. весь кеш из папок /bitrix/cache /bitrix/managed_cache и /bitrix/stack_cache будет храниться в оперативной памяти? т.е. принимая решение об объеме RAM для memcahed можно ориентироваться только на размеры этих трех папок?
2. Чисто теоретически я предполагаю, что это будет работать в разы быстрее: взятие кеша из памяти, а не из файлов. Но вот хостинг меня убеждает, что для проекта нет такой необходимости, и нагрузки на файловую систему нет. Как вы считаете?
Я рассчитываю получить повышение производительности в разы за счет memcahed, т.к. у нас кешируется все и везде)
прочитал комментарии, что-то действительно выходит, что memcahed не даст супер-убыстрения, которого мне бы хотелось файловая система достаточно шустрая 11 539.6 файловых операций в секунду, видать установка memcahed не принесет ожидаемого результата....
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».