В версии 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". Ее просто НЕОБХОДИМО определять, если на одном сервере запущено более одного Битрикса. Это соль которая будет подмешана ко всем ключам кеша. И позволит им "не перепутаться" (что я удивленный и наблюдал во время тестирования).
Я кажется раскусил, в чем подвох. Если кешировать в память memcache большие куски данных (например html вывод компонентов, куски html кода и длинные строки) то работает медленнее. А вот класть в memcache значения переменных (айдишники и т.д) работает намного быстрее.
Необходима возможность задать тип кеширования отдельно для каждого компонента. И полноценные классы поддержки CPHPCacheEAccelerator и тд. Те что бы можно было просто вместо CPHPCache написать CPHPCacheXCache и больше ничего не надо было править.
Также прошу сделать поддержку для xcache - опыт показывает что он быстрее eaccelerator.
В общем, я согласен с Вадимом, что сама архитектура memcached, использование IP транспорта приведет к замедлению в обычных условиях.
Так всегда бывает при расширении архитектуры для решения каких-то конкретных проблем. Так MySQL более эффективен при небольших объемах, когда конкуренция за ресурсы незначительная. А вот Oracle эффективнее и равномернее при больших нагрузках, когда много данных и высокая конкуренция за данные.
В данном случае memcached позволяет создать продуктивное хранилище для больших объемов кеша. Он берет на себя проверку актуальности, чистку этих данных и доступность кеша с разных физических машин.
Мое мнение, что memcached стоит использовать на больших проектах, когда размер кеша имеет склонность динамически расти, требуется активное удаление устаревших данных и когда вы создаете кластерные системы.
Я не склонен идеализировать memcached, но его поддержка позволит крупным проектам чувствовать себя увереннее.
Битрикс Бизнес, виртуалка, 256 Мб. Кэширование в memcached и APC (эмулируемого Zend Data Cache) не показало ни измеримого прироста производительности, ни падения.
sorry for writing in english(i do understand russian). i do agree there's some loss in performance comparing memcaced vs apc. in my opinion the main advantage of memcached is that you get high availibility by defining memcached servers pool (See php manual for memcache::addServer). It would be great if alternatively BX_MEMCACHE_HOST could be defined as an array of memcached servers for now i did this by editing /bitrix/modules/main/classes/general/cache_memcache.php 8)
1. весь кеш из папок /bitrix/cache /bitrix/managed_cache и /bitrix/stack_cache будет храниться в оперативной памяти? т.е. принимая решение об объеме RAM для memcahed можно ориентироваться только на размеры этих трех папок?
2. Чисто теоретически я предполагаю, что это будет работать в разы быстрее: взятие кеша из памяти, а не из файлов. Но вот хостинг меня убеждает, что для проекта нет такой необходимости, и нагрузки на файловую систему нет. Как вы считаете?
Я рассчитываю получить повышение производительности в разы за счет memcahed, т.к. у нас кешируется все и везде)
прочитал комментарии, что-то действительно выходит, что memcahed не даст супер-убыстрения, которого мне бы хотелось файловая система достаточно шустрая 11 539.6 файловых операций в секунду, видать установка memcahed не принесет ожидаемого результата....
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».