Я не отставал от скринкастов 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? Нет необходимости в том, чтобы определить, устарел ли контент, что означает лучшую производительность, чем кэширование обратного прокси. Почему вы можете использовать оба метода вместе?