Как выполняется кэширование?

Обсудим теперь подробно вопрос о том, как выполняется кэширование, т.е. операции, которые происходят при кэшировании. Во-первых, кэш должен определить, нужно ли сообщение кэшировать. Затем решить, имеется ли для этого достаточно свободного места и, если места нет, решить, какие объекты в кэше следует заместить. При получении запроса кэш должен определить, может ли оп его обработать, если может, то вернуть кэшированный ответ и обновить некоторую информацию. Кэш должен иметь согласованную политику rio проверке актуальности кэширован- иых ресурсов.

Решение о необходимости кэширования

Кэш должен сначала решить, нужно ли сообщение кэшировать. Различные кэши используют различные стратегии принятия решепий о кэшировании. Как было обсуждено в разделе 11Д общими критериями, используемыми при принятии решения о кэшировании, являются:

•          Имеются ли требования протокола, которые предотвращают кэширование ответа?

•          Является ли содержание ответа некэшируемым (т.е. динамические данные или особый тип содержания)?

•    Насколько вероятно, что кэшированный ответ будет использован повторно?

•          Приведет ли кэширование данного ресурса к замещению в кэше одного или более ресурсов?

Кэш использует некоторые или все перечисленные критерии для принятия решения о необходимости кэширования.

Замещение содержимого кэша и запись ответа в кэш

После принятия решения о записи сообщения осуществляется проверка, можно ли записать сообщение без замещения других объектов в кэше. Если это не так, то запускается специальный алгоритм замещения. Замещение содержимого кэша является достаточно трудоемким процессом, особенно если замещается большое количество небольших объектов (замещение содержимого кэша будет рассмотрено более детально в разделе 11.6). Дополнительная нагрузка возникает, когда выполняются новые запросы на замещеиные объекты, так как должпы быть установлены новые соединения для их загрузки. Часто, когда становится известно, что ресурс устарел, то он может быть удален из кэша, даже если кэш не заполнен до копца. Это понижает затраты на выполнение алгоритма замещения содержимого кэша в момеит обработки запроса, в свою очередь это уменьшает время ожидания ответа.

После того как освобождается место для записи ответа, кэш извлекает информацию о сообщении, включая дату последнего обновления и информацию об устаревании. Обрабатываются следующие заголовки сообщений: Expire и Cache- Control: max-stale, несущие информацию об актуальности ресурса. Эти поля заголовков помогают кэшу выполнять ограничения HTTP по периоду времени, в течение которого может быть возвращен семантически корректный ответ. Кэш, поддерживающий протокол, обязан гарантировать, что любой возвращенный им ответ, рассматривался бы исходным сервером как актуальный. В главе 7 (раздел 7.7.3) обсуждались различные заголовки, семантически связанные с кэшированием. При отсутствии специфической информации об актуальности ресурса кэш использует эвристически полученное время истечения срока актуальности. Значение этого времени может быть получено, основываясь на времеии последнего обновления ресурса (значения поля заголовка Last-Modified). Например, сервер может добавить фиксированный промежуток времени, скажем, 10 мипут к значению Last-Modified и использовать его как время обновления ресурса. И, наконец, создается ключ ресурса, используемый при последующих поисках эгого ресурса. Ключ создается с помощью хэш-функции на осиове на URL запроса. Когда кэш получает новый запрос, то оп использует URL для поиска ресурса в кэше.

Возврат кэшированного ответа

Когда в кэше находится ответ, соответствующий ключу, то встает вопрос о том, что возвращать пользователю. В зависимости от политики кэширования и ограничений, относящихся к кэшированию, которые содержатся в заголовках ответа, может быть выполнена проверка актуальности для того, чтобы убедиться, что ответ еще не устарел (проверка актуальности и общая согласованность кэшированных результатов будут обсуждепы ниже в разделе 11.7). Если проверка подтверждает, что ответ не устарел, то запрос удовлетворяется из кэша. В противном случае кэш получает новую копию ресурса и использует политику кэширования для решения о том, нужно ли его снова кэшировать, одновременно направляя ресурс клиенту. Если запрос не найдеп в кэше, то запрос перенаправляется исходному серверу.

Обслуживание кэша

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

Источник: Web-протоколы. Теория и практика. — M.: ЗАО «Издательство БИНОМ», 2002 г. – 592 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100