我一直在趕上Scaling Rails截屏視頻。在包含高級HTTP緩存(使用反向代理緩存(如Varnish和Squid等))的episode 11中,他們建議只有在已經耗盡了Rails應用程序中頁面,操作和片段緩存的可能性時才考慮使用反向代理緩存以及memcached等,但這與這個問題無關)。Rails的頁面緩存與HTTP反向代理緩存
我不明白的是,如何使用HTTP反向代理緩存可以爲已經使用頁面緩存的應用程序提供性能提升。爲了簡化問題,讓我們假設我在這裏討論單個主機。
這是我的兩種技術是如何工作的理解(也許我是錯的):
頁面緩存Rails的過程最初擊中,然後產生直接由服務的靜態HTML文件用於後續請求的Web服務器,只要該請求的緩存有效即可。如果緩存已經過期,則Rails會再次被點擊,並且爲更新的內容重新生成靜態文件,以便爲下一個請求做好準備
使用HTTP反向代理緩存時,Rails進程會在代理需要確定內容陳舊或不陳舊。這是通過使用各種HTTP標頭完成的,如
ETag
,Last-Modified
等。如果內容是新鮮的,Rails將響應代理服務器的HTTP 304 Not Modified,並且代理服務器將其緩存的內容提供給瀏覽器,或者甚至更好地用它自己的響應HTTP 304.如果內容是陳舊的,然後Rails的提供更新的內容到緩存它的代理,然後將其用於瀏覽器
如果我的理解是正確的,那麼不會在更短的命中頁面緩存結果到Rails進程?確定內容是否過時並不是所有情況,這意味着比反向代理緩存更好的性能。爲什麼你可以同時使用這兩種技術?
謝謝。如果你不介意在答案中擴大一點,我會很樂意聽到你喜歡它的原因。 – 2010-01-29 16:29:19
另一件值得一提的事情是,頁面緩存是每個應用程序主機,並且如果您使用反向代理,則可以合併該代理。 – jonnii 2010-01-29 16:42:22
好點,我編輯了這個問題來反映這一點。 – 2010-01-29 16:45:57