суббота, 11 июня 2011 г.

Оптимизация взаимодействия веб-клиента и сервера - Кэширующий прокси

Об этих "невидимках" многие разработчики забывают, ведь кэширующие прокси находятся где-то далеко от серверов проекта и нам не подчиняются. Зато с ними мы совершенно бесплатно получаем так называемую CDN (Content Delivery Network), о которой мечтают чуть ли не все веб-разработчики. Очевидно то, что для сохраненных в кэше прокси-серверов объектов запрос к веб-серверу не требуется и это может очень значительно снижать нагрузку на оборудование нашего веб-ресурса. Но это еще не все, ведь клиент получает HTTP-ответ от ближайшего к нему прокси, у которого нужный ресурс есть в кэше, таким образом, время отклика снижается многократно. Если же нужный объект закэширован непосредственно в браузере, результат окажется еще лучше. Также в любой момент можно установить кэширующий прокси на своем сервере (или серверах) и так масштабировать веб-проект. Кэширующие прокси стандартизированы и следует лишь настроить отдачу нужных HTTP-заголовков для управления кэшированием с помощью веб-сервера или реверс-прокси.


Обратите внимание на следующие HTTP-заголовки: Cache-Control, ETag, Expires, If-Modified-Since, Last-Modified. Чаще всего используются Cache-Control и Expires. Подробно рассматривать эти заголовки мы не будем, поскольку их настройка индивидуальна для разных проектов и в сети Интернет есть детальные руководства для всех популярных случаев.


Приведем пример, как добавить HTTP-заголовок с директивой кэширования на уровне реверс-прокси Haproxy:


rspadd Cache-Control:\ public,\ max-age=604800

Схожим образом можно и удалить HTTP-заголовок:


rspidel ^Cache-Control:.*

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


Узнать больше об использовании директив кэширования можно в статье PHP и Web. Кэширование.

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru