Распределенное кеширование - cacherouter

Главные вкладки

Аватар пользователя andypost@drupal.org andypost@drupal.org 14 июля 2008 в 15:21

Потратил некоторое время на доводку модуля cacherouter который позволяет разные таблицы кеша направлять в разные источники хранения. Например, даннные таблицы cache, можно положить в оперативную память посредством xcache apc eaccelerator, а остальные таблицы раскидать по разным инстансам memcached или в один но в shared режиме. Модуль очень сырой, но рабтает достаточно стабильно. Есть много нареканий на shared режим в частности для memcache xcache apc - так как они не имеют своих механизмов блокировок, а использовать flock не очень хочется. Прилагаю свои доработанные модули для 5ки и 6ки. Для 5ки потребуется патчить ядро, эту информацию можно найти в оригинальном модуле, патч для 5.8 есть в issues. 6я версия не требует патча ядра.

PS: обе версии работают в данный момент на разных сайтах в конфигурации eacc + memcache и apc, остальные бэкенды не тестировались. В частности drupal.ru работает на eacc + 3 memcache.

PS2 вопросы и обсуждение в коментарии...

PS3 пакет для мониторинга memcache включен в поставку php_memcache (англ источник)

PS4 Версия для 6.x - если в администрировании вы выключаете сжатие GZip для страниц - нужно в cacherouter.inc (174 строка) закоментировать выдачу заголовка <?php header('Content-Encoding: gzip'); ?>

update: Исправлены небольшие ошибки, убраны отличия версии 5 и 6 в движке кеша (теперь они отличаются только оберткой).

ВложениеРазмер
Иконка пакета cacherouter5.zip23.74 КБ
Иконка пакета cacherouter6.zip21.65 КБ

Комментарии

Аватар пользователя andypost@drupal.org andypost@drupal.org 14 июля 2008 в 16:02

Доработки еще требуются - у меня расхождение с автором модуля (он предлагает хранить CACHE-TEMPORARY с ttl = 180 секунд, а мне кажется они должны чиститься как и в оригинатьльном cache.inc). Ожнь жестко стоит проблема чистки по маске, собственно она и вынуждает держать lookup таблицы, которые вызывают блокировки.

Аватар пользователя Kollo_dHerbois Kollo_dHerbois 14 июля 2008 в 16:21

Как раз хотел спросить про этот модуль. У кого-нибудь он работает в режима файл-кэш? Я поставил модуль, настроил на файл-режим, но что-то никаких изменений не заметил в работе сайта. В папку кэша ничего не записывается. /попробую эту версию, может, сработает/.

Аватар пользователя andypost@drupal.org andypost@drupal.org 14 июля 2008 в 17:18

Файловую версию не бкатывал, кеширование на файлах лучше взять у Азарова. В данной версии нужно еще напильником пройтись... Но работать должно - кто-то в issues писал, что даже хороших результатов добиться удалось

Аватар пользователя Izem Izem 24 июля 2008 в 0:42

Установил стандартный Cacherouter на D6 в режим 'file' - стало НАМНОГО быстрее. Хостинг - Лидерхост. Только, вот, не пойму, где же, всё-таки, файлы кэша хранятся??? По указанному в config.php пути ничего нет...

Аватар пользователя neochief neochief 14 июля 2008 в 22:32

Хоть к данной вещице подступал только раз и то, весьма поверхностно, все-равно, весьма благодарен за работу, потому что в будущем обязательно пригодится, причем многим.

Аватар пользователя kiev1 kiev1 11 декабря 2008 в 16:12

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

Аватар пользователя kiev1 kiev1 12 декабря 2008 в 11:07

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

Аватар пользователя slavik.kz slavik.kz 16 февраля 2009 в 21:15

блин, не могу установить модуль, скопировал, в админке включил, setting.php дополнил, все равно в меню не появился, может я не там ищу?

Аватар пользователя screenager screenager 17 февраля 2009 в 0:45

подскажите все таки как сделать распределенное кэширование?
в настройках указывается только 'engine' => 'memcache', а для каких таблиц не понятно, как сделать связку eacc и memcache?,
еще вопрос как выбрать eaccelerator кэширование, при установке таких значений 'engine' => 'eacc' сайт вообще не грузится, хотя eaccelerator установлен.

Аватар пользователя andypost@drupal.org andypost@drupal.org 17 февраля 2009 в 7:57

slavik.kz wrote:
блин, не могу установить модуль, скопировал, в админке включил, setting.php дополнил, все равно в меню не появился, может я не там ищу?

а какое меню нужно? admin/settings/cacherouter в новых версиях

Screenager wrote:
подскажите все таки как сделать распределенное кэширование?
в настройках указывается только 'engine' => 'memcache', а для каких таблиц не понятно, как сделать связку eacc и memcache?,
еще вопрос как выбрать eaccelerator кэширование, при установке таких значений 'engine' => 'eacc' сайт вообще не грузится, хотя eaccelerator установлен.

на сегодня можно брать оф-версию, а вот memcache обязательно указывать параметр shared, если все кладется в один инстанс - то есть несколько таблиц будут лежать в одном memcache-сервере.

В eacc лучше сласть таблицы cache cache_block cache_update cache_views, в memcache страницы - cache_page, а остальное default в базу

Аватар пользователя screenager screenager 17 февраля 2009 в 13:05

<a href="mailto:andypost@drupal.org">andypost@drupal.org</a> wrote:
а какое меню нужно? admin/settings/cacherouter в новых версиях

у меня по этом адресу ни чего не выходит, так же меню не появляется (последняя версия cacheroute из csv)
<a href="mailto:andypost@drupal.org">andypost@drupal.org</a> wrote:

на сегодня можно брать оф-версию, а вот memcache обязательно указывать параметр shared, если все кладется в один инстанс - то есть несколько таблиц будут лежать в одном memcache-сервере.
В eacc лучше сласть таблицы cache cache_block cache_update cache_views, в memcache страницы - cache_page, а остальное default в базу

извени что спрашиваю опять Smile не понимаю все же как именно настроить, напиши пожалуйста на примере, что нужно писать в settings.php для распределенного кэширования?

Аватар пользователя slavik.kz slavik.kz 21 февраля 2009 в 19:42

Действительно, информации по настройке очень мало, даже на английском (или я плохо юзаю гугл)
Но в целом настраивать так:

$conf['cacherouter'] = array(
  'default' => array(
    'engine' => 'file',
    'server' => array(),
    'shared' => TRUE,
    'prefix' => '',
    'path' => './sites/default/files/filecache',
    'static' => FALSE,
    'fast_cache' => TRUE,
  ),
'cache_filter' => array(
'engine' => 'db') // cache_filter - слать в базу
);

я понял так, хотелось бы от знающих людей увидеть небольшой ман по настройке, что по-чём, типичные настройки, что в БД, что в файлы, что в eacc, что в мемкешед

p.s. cache_filter почему-то упорно не хотел писаться в файл

p.p.s. не хватает знаний, все-таки eacc быстрее хранения в файлах? т.к. не компилируется или все-таки какие-то нюансы?

Аватар пользователя andypost@drupal.org andypost@drupal.org 22 марта 2009 в 19:37

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

http://drupal.org/node/381000#comment-1355332