HighLoad и кэширование Smarty.

Camillo

Новичок
HighLoad и кэширование Smarty.

Уважаемые, возник вопрос!

Есть сайт, который в качестве шаблонизатора использует Smarty; на сайте очень много посетителей - поэтому пришлось разделить "составляющие" на несколько серверов. Сервер под отдачу, сервер со статикой (картинки и т.д.), сервер с БД.

Когда Smarty скомпилировал и закэшировал все шаблоны - всё замечательно. Нагрузка минимальна и т.д.
Но одной из особенностей проекта является то, что достаточно часто изменяется шаблон сайта.
Как только шаблон меняется - мы удаляем кэш и скомпилированные шаблоны и тут начинается ад.
Нереально сильно подскакивает нагрузка на сервере отдачи (из-за того, что Smarty начинает создавать кэш, а там его оооочень много).
Таким образом сайт в течение 15 мин. жутко тормозит (не лежит, а просто тормозит!).

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

Насколько сильно может помочь Zend Performance Suite?

Спасибо.
 

fixxxer

К.О.
Партнер клуба
а зачем удалять *все* скомпилированные?

без акселератора (zps жирно покупать, есть опесорсные apc/eaccelerator/xcache) php в продакшене на сколь либо солидной нагрузке как бы вообще не запускают
 

Camillo

Новичок
Автор оригинала: fixxxer
а зачем удалять *все* скомпилированные?
Ну если все меняются шаблоны, то все и удаляем. :)

без акселератора (zps жирно покупать, есть опесорсные apc/eaccelerator/xcache)
Да, ZPS - жирно, у нас - eaccelerator.

php в продакшене на сколь либо солидной нагрузке как бы вообще не запускают
Одна из идей была сделать копию сайта (например на саб-домене) и при смене шаблонов - сперва на ней перегенерить их, а потом "залить" на живую.
Но тогда спрашивается - как заставить копию сайта сгенерить ВЕСЬ кэш в течение короткого времени? (Запускать апач-бенчмарк по нужным урлам - тупо :) )
 

fixxxer

К.О.
Партнер клуба
а почему бы вообще не выкладывать сразу скомпиленные?

я плохо помню смарти, но там же, вроде, компилятор отдельным классом реализован, пройтись по всем файлам и готово.
 

Camillo

Новичок
Суммарно весь кэш занимает ~2Гб. Разумеется, заставить php сгенерировать 2Гб в короткий промежуток времени - почти утопия.
 

fixxxer

К.О.
Партнер клуба
так, кажется мы про разные кэши говорим.
я про тот, который содержит код шаблонов. скомпилированные из смарти-синтаксиса в php. templates_c вроде.
 

Camillo

Новичок
Автор оригинала: Angerslave
Camillo
А как это - раз и все шаблоны поменялись?
Ну например добавили во все шаблоны рекламные блоки или что-нибудь в этом духе...
На самом деле - это не так важно.
Вопрос в принципе состоит в том - как сделать так, чтобы после обновления шаблона Smarty не затыкался на генерации кэша.

а почему бы вообще не выкладывать сразу скомпиленные?
В принципе можно, но создание скомпилированных копий шаблонов - для Smarty не так нагрузно.
Он затыкается именно при генерации кэша.
А так - разумеется - можно сразу выкладывать скопилированные версии шаблонов; это реально.
 

Angerslave

Новичок
Camillo
Очевидно, это не смарти затыкается на генерации кэша(если я правильно понимаю о чём речь), а CMS слишком долго генерирует данные для этого кэша.
 

Camillo

Новичок
Smarty сперва компилирует шаблоны, т.е. делает шаблон с готовым php кодом. Потом на основе этих шаблонов - генерирует кэш.

Если мы поменяем скомпилированный шаблон в templates_c, то врятли это как-то повлияет на уже закэшированные страницы; ведь Smarty никак не сможет узнать о том, что скомпилированный шаблон поменялся.
 

Angerslave

Новичок
Оверхед от создания кэша у смарти небольшой. Если прям затыкается - надо смотреть где, я уверен, что не в смарти дело.

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

fixxxer

К.О.
Партнер клуба
так это наверное в disk i/o все упирается. положи кэш на tmpfs ;)
 

Camillo

Новичок
Angerslave, мы оптимизировали все запросы к БД, оптимизировали их кол-во, где нужно разбили на более мелкие составляющие и уже даже подумываем о исп-ии мемкэша. При "регенирации" кэша нагрузка на сервер БД почти изменяется, т.е. врятли может тормозить из-за генерации контента.

Ладно, буду дальше кумекать.

-~{}~ 04.11.08 17:09:

fixxxer, tmpfs хранит файло в памяти, а не физически на диске, да? Его можно как-то ограничить по объёму используемой памяти?
 

Angerslave

Новичок
Camillo
А кто сказал, что обязательно БД? А память? А подключение ненужных классов? Да мало ли узких мест может быть помимо БД и смарти... Хотя 2 Гб файлового кэша... fixxxer, возможно, прав :)
 

fixxxer

К.О.
Партнер клуба
кстати я не очень себе представляю реально заметную выгоду от такого кэширования, нативный php код должен и так быстро работать. там тупить нечему кроме инклюдов, а их в компиленном коде то по идее не много
 

Camillo

Новичок
fixxxer, tmpfs хранит файло в памяти, а не физически на диске, да? Его можно как-то ограничить по объёму используемой памяти?
 

AmdY

Пью пиво
Команда форума
а может профайлинг перед оптимизацией xdebug ?
весело, когда хайлодеры гадают об узком месте в свойм коде
 

Camillo

Новичок
Автор оригинала: fixxxer
кстати я не очень себе представляю реально заметную выгоду от такого кэширования, нативный php код должен и так быстро работать. там тупить нечему кроме инклюдов, а их в компиленном коде то по идее не много
Ну допустим простой пример. Блог. Мы просматриваем страницу с постом, например /2008/04/11/hello_world/.
Каждый раз при запросе этой страницы мы должны сделать запрос, который будет искать в базе с постами пост по полю VARCHAR(255)(!!!).
Разумеется разумно эту страницу закэшировать. Также разумно кэшировать комментарии к этому посту и тереть кэш только в том случае, если был добавлен комментарий именно к этому посту (последнее время подумываем об исп-ии мемкэша для выборок комментариев вообще).

Вообщем выгода есть определенно, но нужно научиться управлять этой выгодой. :)
 

fixxxer

К.О.
Партнер клуба
а, динамика кэшируется в статик хтмл. а инвалидация как делается? вообще мне идея кэширования хтмл блоков не нравится совсем, избыточности дофига и управлять сложно. почему бы в ту же шаред мемори еакселератора не кэшировать?
 
Сверху