purge
Михаил Монашёв
postmaster на softsearch.ru
Пт Июл 30 23:44:55 MSD 2010
Здравствуйте.
>>> IS> Я пару лет назад планировал ленивую инвалидацию большого объёма
>>> IS> ответов таким образом: в ответ добавляются заголовки с ключами в
>>> IS> виде md5-хэшей:
>>>
>>> IS> X-Accel-Depends: XXXXX...md5...XXXXXX YYYYY...md5...YYYYYY ...
>>>
>>> IS> Ключи хранятся в той же зоне, что и мета-данные кэша.
>>> IS> Если в запрашиваемом ответе есть такие ключи, то проверяется
>>> IS> существование этих ключей. Если ключей нет, то ответ валидный.
>>> IS> Если же есть и хотя бы один ключ моложе ответа, то ответ
>>> IS> невалидный.
>>> IS> Если же ключи есть, но старше ответа, то ответ валидный - он
>>> IS> получен уже после получения инвалидирующих ключей.
>>>
>>> IS> Инвалидирующие ключи получаются тоже в ответах
>>>
>>> IS> X-Accel-Invalidate: XXXXX...md5...XXXXXX YYYYY...md5...YYYYYY ...
>>>
>>> IS> Допустим, есть страница со списком каментов john'а и bill'а,
>>> IS> у неё есть такие зависимости
>>>
>>> IS> X-Accel-Depends: XXX...john...XXX YYY..bill...YYY
>>>
>>> IS> Если теперь bill запостит камент, то в ответе будет
>>>
>>> IS> X-Accel-Invalidate: YYY..bill...YYY
>>>
>>> IS> nginx создаёт такой ключ в зоне и следующий запрос к списку
>>> IS> обнаружит, что список уже невалиден.
>>>
>>> Мне кажется, что подобной логике место в коде бэкенда.
>>> закэшированным данным - в мемкешеде ну или в кэше nginx-а, из
>>> которого можно удалять через PURGE. А чтобы удалить несколько
>>> закэшированных кусочков, пишется на libev либа, которая делает
>>> нужное количество http-запросов параллельно. А ещё лучше, если
>>> веб-сервер позволит делать мульти-запросы для PURGE, когда в одном
>>> запросе несколько url-ов на удаление из кэша. Подобное ещё было бы
>>> полезно для веб-дава сделать, а то порой досить nginx кучей DELETE
>>> приходится.
IS>> Тут управляет именно бэкенд: он устанавливает зависимости.
ММ> Неудобно генерить подобные htpp-заголовки, ибо информация о них
ММ> известна лишь в середине выполнения генерящего страницу кода. А
ММ> заголовки хочется выплюнуть как можно раньше, и не держать в
ММ> памяти уже сгенерённый к тому времени html. Это я конечно упрощаю
ММ> и всё применительно к себе говорю, но наверное так многие
ММ> поступают. Чистка кэша в мемкешеде тут вне конкуренции.
Сейчас ещё раз подумал. С мемкешедом чайлд апача будет обслуживать
запрос дольше, поэтому да, через заголовки схема лучше, хоть и менее
удобна при программировании.
--
С уважением,
Михаил Монашёв
mailto:postmaster at softsearch.ru
ICQ# 166233339
http://michael.mindmix.ru/
Без бэкапа по жизни.
Подробная информация о списке рассылки nginx-ru