2012-10-17 6 views
6

Sono un po 'confuso riguardo allo scopo di Varnish e Rack-Cache per un'app Rails. In config/environments/production.rb caching può essere impostato con qualcosa di simileQual è il punto di Varnish e Rack-Cache per un'app Rails?

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

Dato che, che cosa è esattamente lo scopo di vernice e rack-Cache se è possibile impostare la cache in applicazione Rails per sé?

E a cosa serve l'app Rails predefinita per utilizzare la cache del rack?

risposta

7

Il controllo della cache statica influisce sulle intestazioni http per Cache-Control. Come in, il server suggerisce alle cache intermedie che l'età massima = 3600.

Varnish, Rack-Cache, Squid e altri memorizzano attivamente il contenuto generato sul server. Le chiamate al database sono costose e, anche quando una richiesta non effettua una chiamata al db, minore è l'infrastruttura che la richiesta deve attraversare, generalmente più veloce sarà.

Rack :: Cache è un middleware rack che supporta la cache conforme agli standard HTTP. Il loro FAQ page ha alcune buone informazioni sui suoi pro e contro rispetto ad altre soluzioni di caching. Ecco uno question comparing rack::cache to varnish on heroku. Rails ha anche ActiveSupport :: Cache che gestisce il frammento e il caching delle pagine. Non sono sicuro di quali siano le differenze, ma entrambe sono incluse in Rails per impostazione predefinita. Avevo detto prima che rack :: cache non era predefinito, ma mi sbagliavo.

Varnish, Squid e altri esistono all'esterno dello stack Rails davanti al server Web (ad esempio Apache/Nginx/etc) come processo separato. Sono altamente configurabili, indipendenti dalle applicazioni e hanno alcune funzionalità avanzate (come gli ACL di Squid). Varnish e altri hanno il vantaggio di ridurre al minimo l'infrastruttura che una richiesta deve passare per essere servita. Se è fresca, la richiesta colpisce Varnish e ritorna immediatamente al client. Questo probabilmente ha il maggior beneficio per i siti ad alto traffico e potrebbe essere eccessivo per le app più piccole.

Ecco un articolo su heroku detailing the use of rack::cache in Rails3. Ci sono anche dei buoni railscast su come fare la cache di pagine/frammenti in-app e sull'uso di memcached come back-end (che è molto importante). Per la vernice e altri, è possibile iniziare con this tutorial on varnish's site.

+1

Quello che stai descrivendo suona come il caching lato server. Lo stesso Rails non ha incorporato il supporto per la memorizzazione nella cache sul lato server? – user782220

+0

Ho scritto quella risposta a notte fonda e non l'ho chiarito molto bene. Lo aggiornerò. Rails3 ha il supporto per la cache da ActiveSupport :: Cache, quindi non sono sicuro che rack :: cache sia ridondante o meno. Mi dilungherò anche sull'uso della vernice, dammi solo un minuto. – GorrillaMcD

+0

Ho corretto alcune informazioni errate (mi dispiace per quello). Rack :: cache e ActiveSupport :: cache fanno entrambe parte delle rotaie. Non sono sicuro di quali siano le differenze. – GorrillaMcD