Распределенное кеширование - cacherouter
Прислано: andypost@drupal.org
пн, 14/07/2008 - 11: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.zip | 23.74 кб |
| cacherouter6.zip | 21.65 кб |
- andypost@drupal.org's blog
- Для комментирования войдите или зарегистрируйтесь
Спасибо за работу! В закладки.
- Для комментирования войдите или зарегистрируйтесь
Доработки еще требуются - у меня расхождение с автором модуля (он предлагает хранить CACHE-TEMPORARY с ttl = 180 секунд, а мне кажется они должны чиститься как и в оригинатьльном cache.inc). Ожнь жестко стоит проблема чистки по маске, собственно она и вынуждает держать lookup таблицы, которые вызывают блокировки.
- Для комментирования войдите или зарегистрируйтесь
Как раз хотел спросить про этот модуль. У кого-нибудь он работает в режима файл-кэш? Я поставил модуль, настроил на файл-режим, но что-то никаких изменений не заметил в работе сайта. В папку кэша ничего не записывается. /попробую эту версию, может, сработает/.
- Для комментирования войдите или зарегистрируйтесь
Файловую версию не бкатывал, кеширование на файлах лучше взять у Азарова. В данной версии нужно еще напильником пройтись... Но работать должно - кто-то в issues писал, что даже хороших результатов добиться удалось
- Для комментирования войдите или зарегистрируйтесь
Хоть к данной вещице подступал только раз и то, весьма поверхностно, все-равно, весьма благодарен за работу, потому что в будущем обязательно пригодится, причем многим.
- Для комментирования войдите или зарегистрируйтесь
Установил стандартный Cacherouter на D6 в режим 'file' - стало НАМНОГО быстрее. Хостинг - Лидерхост. Только, вот, не пойму, где же, всё-таки, файлы кэша хранятся??? По указанному в config.php пути ничего нет...
- Для комментирования войдите или зарегистрируйтесь
Удивительно, что файлов нет. Настройки при установке прописываются в settings.php - и нигде иначе!
- Для комментирования войдите или зарегистрируйтесь
Спасибо, полезно
- Для комментирования войдите или зарегистрируйтесь
зачем кеш выносить в память? ее и так не хватает, тем более если на сайте много страниц - то вероятность того что запросят ту что еще не устарела - близка к нулю, кеширование это проблема капитальная и ее еще не решили нормально
- Для комментирования войдите или зарегистрируйтесь
@kiev1 странный вопрос, память самый быстрый и дешевый носитель. Если её не хватает, что мешает её просто добавить?
- Для комментирования войдите или зарегистрируйтесь
у меня на сайте несколько десятков страниц созданных в течении года, пользователь с равной вероятностью запрашивает любую из них, время жизни страницы в кеше ограничено - зачем тратить ресурсы сервера на обслуживание такого кеша? ведь он только тормозить будет все остальное.
- Для комментирования войдите или зарегистрируйтесь
Спасибо огромное. Буду пробовать.
- Для комментирования войдите или зарегистрируйтесь
блин, не могу установить модуль, скопировал, в админке включил, setting.php дополнил, все равно в меню не появился, может я не там ищу?
- Для комментирования войдите или зарегистрируйтесь
подскажите все таки как сделать распределенное кэширование?
в настройках указывается только 'engine' => 'memcache', а для каких таблиц не понятно, как сделать связку eacc и memcache?,
еще вопрос как выбрать eaccelerator кэширование, при установке таких значений 'engine' => 'eacc' сайт вообще не грузится, хотя eaccelerator установлен.
- Для комментирования войдите или зарегистрируйтесь
блин, не могу установить модуль, скопировал, в админке включил, setting.php дополнил, все равно в меню не появился, может я не там ищу?
а какое меню нужно? admin/settings/cacherouter в новых версиях
подскажите все таки как сделать распределенное кэширование?
в настройках указывается только 'engine' => 'memcache', а для каких таблиц не понятно, как сделать связку eacc и memcache?,
еще вопрос как выбрать eaccelerator кэширование, при установке таких значений 'engine' => 'eacc' сайт вообще не грузится, хотя eaccelerator установлен.
на сегодня можно брать оф-версию, а вот memcache обязательно указывать параметр shared, если все кладется в один инстанс - то есть несколько таблиц будут лежать в одном memcache-сервере.
В eacc лучше сласть таблицы cache cache_block cache_update cache_views, в memcache страницы - cache_page, а остальное default в базу
- Для комментирования войдите или зарегистрируйтесь
а какое меню нужно? admin/settings/cacherouter в новых версиях
у меня по этом адресу ни чего не выходит, так же меню не появляется (последняя версия cacheroute из csv)
на сегодня можно брать оф-версию, а вот memcache обязательно указывать параметр shared, если все кладется в один инстанс - то есть несколько таблиц будут лежать в одном memcache-сервере.
В eacc лучше сласть таблицы cache cache_block cache_update cache_views, в memcache страницы - cache_page, а остальное default в базу
извени что спрашиваю опять :) не понимаю все же как именно настроить, напиши пожалуйста на примере, что нужно писать в settings.php для распределенного кэширования?
- Для комментирования войдите или зарегистрируйтесь
Действительно, информации по настройке очень мало, даже на английском (или я плохо юзаю гугл)
Но в целом настраивать так:
$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 быстрее хранения в файлах? т.к. не компилируется или все-таки какие-то нюансы?
- Для комментирования войдите или зарегистрируйтесь
Похоже есть возможность избежать блокировок при чистке кеша, по крайней мере для memcached - автор утверждает, что это быстрая операция - энумерация ключей в мемкеше
http://drupal.org/node/381000#comment-1355332
- Для комментирования войдите или зарегистрируйтесь
Здравствуйте.
Вошли ли Ваши изменения в ядро модуля?
- Для комментирования войдите или зарегистрируйтесь
Данный топик можно смело закрывать - все измения уже в модуле и поддержка ведется через официальные issues
- Для комментирования войдите или зарегистрируйтесь









Комментарии