使用Varnish+ESI实现静态页面的局部缓存
??? 靜態頁面之間的包含一般有如下一些方案:
?? 1、Client Side Includes(CSI):通過frame、iframe、javascript、javacript+ajax等方式將另外一個頁面的內容動態包含進來。像現在流行的jquery等javascript庫對此有較好的支持。
????? 優點:能夠利用瀏覽器客戶端并行處理及裝載的機制;通過瀏覽器緩存機制可以降低網絡傳輸時間,提高性能;計算放在客戶端,能夠降低服務器端壓力
????? 缺點:搜索引擎優化問題;javascript兼容性問題;客戶端緩存可能導致服務器端內容更新后不能及時生效;XSS等安全隱患
?? 2、Server Side Includes(SSI):
?????? 優點:SSI技術是通用技術,不受具體語言限制,只需要Web服務器或應用服務器支持即可,Ngnix、Apache、Tomcat、Jboss等對此都有較好的支持
?????? 缺點:SSI在語法上不能夠直接包含其他服務器的url(當然也可以通過redirect等來變通實現),因此在需要充分利用緩存及負載均衡的環境下相對不是很靈活。????
?????? 當然如果不使用單獨的緩存服務器,而是使用Ngnix,利用Ngnix對SSI及Memcached支持,通過NginxHttpSsiModule、NginxHttpMemcachedModule也可以實現頁面緩存,但與專業的緩存服務器(例如Varnish)相比較,Ngnix作為緩存服務器只適合于中小規模的場合。
??? 3、Edge Side Includes (ESI):
??????? Edge Side Includes(ESI) 和Server Side Includes(SSI)和功能類似。SSI需要特殊的文件后綴(shtml,inc)。ESI可以直接通過URI包含遠程服務器文件,ESI更適合用于緩存服務器上,緩存整個頁面或頁面片段,因此ESI特別適合用于緩存。像當下流行的緩存服務器Varnish對此有所支持。
?
??? SSI可以很容易滿足讓所有靜態頁面include其他靜態頁面的需求。
??? 大部分的網站都有這樣的需求:在整個靜態頁面的局部有需要動態更新的內容片段,包括:
??? 1、與用戶個性化無關的信息,所有用戶進來看到的內容都一樣。例如最熱新聞、最活躍的用戶等
??? 2、與用戶個性化信息相關。例如用戶登錄信息、用戶好友等
?? 以上兩種情況,一般情況下都采用ajax方式來實現靜態頁面局部信息的刷新,ajax直接提交給Web服務器或應用服務器獲取動態數據。或者采用Ajax+Memcached的模式,將動態變化的內容放入Memcached中,ajax直接存取Memcached,這樣能夠緩解Web服務器或應用服務器壓力。但采用ajax的方案,直接繞過了緩存服務器,并沒有充分利用緩存服務器對于靜態頁面的緩存支持。
??? 使用Varnish及其對ESI的支持很容易實現對以上兩種需求的較好支持:
?? 1、與用戶個性化無關的信息:直接由Varnish+ESI就可以實現。對于動態變化的局部頁面,可以在ESI制定的url地址返回的http header的Cache-Control來指定緩存策略,實現局部頁面緩存(fragment caching)。
? 2、與用戶個性化信息相關:對于整個頁面的緩存策略仍然使用Varnish+ESI方式。而需要fragment caching的局部頁面,可以根據用戶Cookie信息獲得用戶身份標識信息(例如userid),然后在ESI的URL中帶上用戶身份信息提交到后端的Web服務器或應用服務器以獲取與用戶個性化相關的信息。可以參考:Caching logged in users 。
??? 簡單梳理了一下基于Varnish+ESI實現靜態頁面緩存的思路,有空再寫代碼具體測試一下。
??? Varnish作為一個高性能的緩存服務器,值得好好研究一下。
??? 盡管Varnish和Ngnix都具有Load Balancing的功能,但Ngnix只能根據客戶端IP進行負載均衡,不支持基于Session狀態維護(session persistence)方式,無法維護Session狀態;而Varnish的Load Balancing都不支持。而這正是HAproxy的強項。
??? 由此得到一個相對理想的架構:
????? Nginx (用于HTTP compression及https) –> Varnish (用于reverse proxy caching) –>HAProxy(用作Load Balancing)–>Ngnix(Web Server)或Tomcat
總結
以上是生活随笔為你收集整理的使用Varnish+ESI实现静态页面的局部缓存的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八卦的女筒子们,谁来帮我选几件衣服,送我
- 下一篇: 32英寸长宽多少?