Я догонял скринкасты Scaling Rails . В эпизоде 11 , который охватывает расширенное кэширование HTTP (с использованием кэшей обратного прокси-сервера, таких как Varnish, Squid и т. Д.), Они рекомендуют рассматривать использование кэша обратного прокси-сервера только после того, как вы уже исчерпали возможности страницы, действия и Кэширование фрагментов в вашем Rails-приложении (а также memcached и т. д., но это не относится к этому вопросу).
Что я не могу понять, так это то, как использование обратного прокси-кэша HTTP может повысить производительность приложения, которое уже использует кэширование страниц. Для упрощения предположим, что я говорю об одном хосте здесь.
Это мое понимание того, как работают оба метода (возможно, я ошибаюсь):
При кэшировании страницы изначально запускается процесс Rails, а затем генерируется статический файл HTML, который обслуживается веб-сервером напрямую для последующих запросов, пока кэш этого запроса действителен. Если срок действия кэша истек, тогда Rails снова запускается и статический файл создается заново с обновленным содержимым, готовым к следующему запросу
При использовании кеша обратного прокси-сервера HTTP процесс Rails запускается, когда прокси-сервер должен определить, устарел ли контент или нет. Это делается с использованием различных заголовков HTTP, таких как ETag
, Last-Modified
и т. Д. Если содержимое свежее, то Rails отвечает на прокси с HTTP 304 Not Modified и прокси-сервер передает свое кэшированное содержимое в браузер, или даже лучше, отвечает своим собственным HTTP 304. Если содержимое устарело, Rails передает обновленное содержимое прокси, который кэширует его, а затем передает его в браузер
Если мое понимание верно, то не приводит ли кеширование страниц к меньшему количеству попаданий в процесс Rails? Не все, что нужно, чтобы определить, устарел ли контент, что означает лучшую производительность, чем кэширование обратного прокси. Почему вы можете использовать обе техники одновременно?