日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

使用Varnish+ESI实现静态页面的局部缓存

發布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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实现静态页面的局部缓存的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。