8 авг. 2015 г., 10:40

Решения проблемы большой карты ресурсов, существующие на сегодняшний день

До тех пор, пока в modx не появится настройка «cache_resource_map», этот вопрос не потеряет актуальности.
1.Ваше, Николай, решение — патч СacheOptimizer, который меняет оригинальные исходные файлы modx (оригинальный код) и соответственно, после обновления modx этот патч нужно переустанавливать (так ?)
Также есть способы обхода (не решения, а именно обхода) проблемы большой карты ресурсов: 2.Хранение кэша в оперативной памяти (memCached) 3.Раскидывание ресурсов по разным контекстам (не всегда удобно, поскольку при необходимости загружать одни и те же ресурсы в разных контекстах придётся либо плодить символические ссылки, либо использовать (OnPageNotFound + sendForward))
Текущая версия modx — 3.3.5. В настройках кэширования ничего нового. По-прежнему отключать можно только карту псевдонимов.
На сегодняшний день появились ли новые способы решения сабжевой проблемы? Планируют ли разработчики modx добавить опциональное отключение карты ресурсов на уровне движка ?
Также есть способы обхода (не решения, а именно обхода) проблемы большой карты ресурсов: 2.Хранение кэша в оперативной памяти (memCached) 3.Раскидывание ресурсов по разным контекстам (не всегда удобно, поскольку при необходимости загружать одни и те же ресурсы в разных контекстах придётся либо плодить символические ссылки, либо использовать (OnPageNotFound + sendForward))
Эти варианты обхода практически бесполезны. Во-первых, проблема не только в хранении этого большого кеша, а в самой генерации кеша. Ведь каждый раз при сбросе кеша MODX должен в базе данных обойти все документы и нафигачить их в кеш. Когда у вас будет под сотню тысяч документов, средний сервер просто не справится с этой задачей, кеш соберется не полностью и сайт просто сломается (из-за попытки подгрузки невалидного php-кода). Во-вторых, раскидывая документы по разным контекстам, объем задач по генерации кеша не уменьшается, так что это только снижает объем загружаемого кеша при заходе на конкретный контекст, но нагрузка на сервер при генерации кеша хоть и не на много, но все же увеличится. В-третьих, сколько же вам контекстов понадобится, чтобы раскидать по ним пару сотен тысяч документов? В общем, на сегодня, эти проблемы решает только cacheOptimizer. И да, при обновлении MODX его надо переустанавливать, без этого никак. Не знаю планируют ли разрабы MODX-а что-то придумать на этот счет, но я решение придумал еще в 2011-ом. Там конечно картинок уже нет и код местами плохочитаемый, но суть уловить можно.
А вообще, тема кеширования в MODX на столько сложная, что вот так небольшими топиками о ней рассуждать почти нет смысла. Там книги писать можно.
Придумал решение. Поскольку я не использую поле parent, то кэш ресурсов мне вообще и не нужен. Соответственно, после генерации файла context.cache.php (или при первой (после генерации карты) загрузке страницы) плагинами его можно подрезать. А именно — почистить подмассив 'resourceMap' (а всё остальное оставить) и перезалить этот файл. В итоге при загрузке страниц сайта будет подгружаться маленький файлик с config, webLinkMap, eventMap и policies.
Это не решает проблемы большой нагрузки при генерации кеша.
Это не решает проблемы большой нагрузки при генерации кеша.
Иногда сайт падает с критической ошибкой (белый экран):
mod_fcgid: stderr: PHP Warning: array_merge() [function.array-merge]: Argument #2 is not an array in /var/www/user/data/www/site.ru/core/model/modx/modx.class.php on line 2313, referer: www.site.ru/ mod_fcgid: stderr: PHP Fatal error: Class 'modUser_' not found in /var/www/user/data/www/site.ru/core/xpdo/xpdo.class.php on line 783, referer: www.site.ru/
Проблема решалась очисткой кэша modx. Думал, что криво записывался некоторый кэш в процессе работы скриптов modx. Но как оказалось, проблема была в том, что иногда modx не справляется с генерацией кэша большого числа ресурсов и записывает кривой кэш контекста context.cache.phpс пустым содержанием:
<?php return array ( 'resourceMap' => array ( ), 'pluginCache' => NULL, );
После удаления и перегенерации этого файла страницы грузятся нормально.
Так что, проблема уже себя проявляет. В версии modx 2.4.2 настройка cache_alias_map (подобно cache_alias_map) так и не появилась…
В версии modx 2.4.2 настройка cache_resource_map (подобно cache_alias_map) так и не появилась…
Собственно, про это я и говорил. Да, печаль. Может когда-нибудь появится.

Добавить комментарий