В чем смысл Varnish и Rack-Cache для приложения Rails?

Я немного озадачен назначением Varnish и Rack-Cache для приложения Rails. В config/environments/production.rb Кэширование может быть установлено с чем-то вроде

config.static_cache_control = "public, max-age=3600"

Учитывая это, какова цель Varnish и Rack-Cache, если вы можете установить кеширование в самом приложении Rails?

И что заставляет приложение Rails по умолчанию использовать кеш-стойку?

1 ответ

Решение

Static Cache Control влияет на заголовки http для Cache-Control. Например, сервер предлагает промежуточным кэшам max-age = 3600.

Varnish, Rack-Cache, Squid и другие активно кешируют сгенерированный контент на сервере. Вызовы в базу данных обходятся дорого, и даже если запрос не выполняет вызов в БД, чем меньше инфраструктуры требуется для прохождения запроса, тем быстрее он будет.

Rack:: Cache - это промежуточное программное обеспечение, поддерживающее кэширование в соответствии со стандартами HTTP. На их странице часто задаваемых вопросов есть хорошая информация о ее плюсах и минусах по сравнению с другими решениями для кэширования. Вот вопрос, сравнивающий rack::cache к лаку на heroku. В Rails также есть ActiveSupport::Cache, который обрабатывает фрагменты и кэширование страниц. Я не уверен, в чем различия, но оба включены в Rails по умолчанию. Ранее я говорил, что rack::cache не используется по умолчанию, но я ошибался.

Varnish, Squid и другие существуют вне стека Rails перед веб-сервером (например, Apache/Nginx/etc) как отдельный процесс. Они легко настраиваются, не зависят от приложений и имеют некоторые расширенные функции (такие как ACL в Squid). Преимущество Varnish и других пользователей заключается в минимизации инфраструктуры, через которую должен пройти запрос, чтобы его обслужили. Если он свежий, запрос попадает в Varnish и немедленно возвращается клиенту. Это, вероятно, имеет наибольшую выгоду для сайтов с большим трафиком и может быть излишним для небольших приложений.

Вот статья о героку, подробно рассказывающая об использовании rack::cache в Rails3. Есть также несколько хороших Railscasts для выполнения кэширования страниц / фрагментов в приложении и использования memcached в качестве бэкэнда (что очень важно). Для лака и других, вы можете начать с этого урока на сайте лака.

Другие вопросы по тегам