Подтвердить что ты не робот

Является ли Varnishd правильным решением для кеширования для использования с Rails?

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

Мое понимание того, как работает Varnishd, заключается в том, что при первом обращении к URL-адресу, Varnishd проверяет его хранилище кеша, промах будет проходить, и поэтому запрос будет передан Rails и результирующая страница, которая будет сгенерирована, затем добавляется в кэш Varnishd.

Любые последующие вызовы, сделанные для этого URL-адреса, а затем выполняемые из кэша Varnishd, в Rails-стек не задействованы.

Является ли это правильным или я в порядке?

Как мое приложение может сообщить Varnishd, когда определенная страница была обновлена ​​и отразить любые изменения, сделанные в его хранилище кешей?

Является ли Varnishd хорошим выбором для этой цели?

Спасибо за вашу помощь. Я знаю, что это очень простые вопросы, но документы просто не делают этого ясным (по крайней мере, для меня).

4b9b3361

Ответ 1

Чтобы сделать недействительность динамического кэша, вы можете отправить purge.url {some regexp} с вашего сервера приложений по каналу управления. Например, purge.url "^/some/page/$". Однако из Rails, вероятно, проще всего использовать метод PURGE HTTP. Поэтому вместо того, чтобы делать HTTP GET, вы должны сделать PURGE против того же URI:

PURGE /some/page/ HTTP/1.0
Host: example.com

Этот запрос должен войти от localhost, если вы не переопределите это в конфигурации.

Некоторые ссылки:

Ответ 2

Я рекомендую прочитать это руководство по кешированию HTTP Марк Ноттингем: http://www.mnot.net/cache_docs/

Чтобы использовать обратный прокси-сервер с кешированием, вам нужно указать время истечения срока действия ваших ответов HTTP. Как правило, невозможно "рассказать" сервер кеширования, когда доступен новый контент, потому что протокол должен быть объединен по всему Интернету, и вы не хотите, чтобы серверы отображались повсюду в мире, когда у вас появились новые снимки киттинга: )

Кадрирование страниц Rails - это совсем не то же самое. Это просто разгружает работу на веб-сервер, чтобы статически ставить файлы, но не принимает протокол http в решении.

Предостережение: Я должен указать, что я не пробовал Лак лично. Этот ответ основан на предположении (я думаю, правильно), что Varnish является кэширующим обратным прокси-сервером http.

Ответ 3

Как упоминалось в ответе noodl, если используется обратный прокси-сервер, это обычно заставляет страницу выходить из-под контроля. Альтернативный подход заключается в том, что вам нужно будет управлять истечением срока, чтобы использовать rails кеширование страниц (см. Раздел 1.1), это делает рельсы визуализацией ответа на диск (в общий каталог) при первом вызове действия, и вы можете использовать свой веб-сервер для прямого доступа к этим файлам html. Я использую nginx для этого и имею директиву для работы с любыми статическими файлами, которые существуют (как правило, изображениями, но также работает для html-страниц с правильным переписыванием для учета расширения .html). С кешем, управляемым рельсами, вы можете закончить себя, как в примере на странице руководств, где заканчивается индекс при создании нового элемента.

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

Ответ 4

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

Вы можете настроить Varnish для ответа на запрос HTTP PURGE, который позволит Rails сообщать Лак, когда страница изменилась. Здесь плагин и статья в этих строках.