Varnish是一款高性能的開源HTTP緩存加速器,從下圖(網站拓撲結構視圖)不難看出,緩存對於現代互聯網的重要意義。
緩存存在的基礎
程序具有局部性
時間局部性
過去訪問過的數據在一段時間內有可能被再次訪問
空間局部性
過去被訪問的某數據周圍的其他數據有可能也被訪問
緩存得以生效就是因爲程序的局部性
緩存的存儲方式
緩存以key-value形式存儲
key:訪問路徑,url,經過hash計算後存儲;
value:web content
緩存主要緩存的是熱點數據
緩存命中率
hit/(hit+miss)
衡量標準
文檔命中率:以命中文檔的個數進行衡量;
字節命中率:以命中內容的大小進行衡量;
注意事項
1、緩存對象有生命週期,所以需定期清理;
2、當緩存耗盡時,可基於LRU(最近最少使用)算法,實時清理一部分緩存,以騰出空間存放新的緩存;
3、緩存需注意私密性,有些內容不可緩存,如用戶的私有數據、報文首部中包含“Authorization,Cookie, Vary: accept-encoding=”等信息的;
緩存處理步驟
接收請求 --> 解析請求(提取請求的url及各種首部)--> 查詢緩存 --> 新鮮度檢測 --> 構建響應報文--> 發送響應 --> 記錄日誌
varnish工作架構圖
Management管理進程:
編譯VCL並應用新配置、監控varnish、初始化varnish並提供命令行接口CLI;
配置語法
(1) //,#,註釋單行,/*comment*/註釋多行;
(2) sub $NAME用於定義函數,但函數不接受參數;
(3) 不支持循環;
(4) 支持衆多內置變量;
(5) 支持使用終止語句,但沒有返回值;
(6) “域”專用語言,即所寫代碼只能應用在特定的域上;
(7) 支持衆多操作符:=,==,~,!,&&,||;
varnishd
varnishd [-a address[:port]] [-b host[:port]][-d] [-F] [-f config]
-a:指明監聽的地址和端口,默認端口爲6081;
-b:指明後端主機和端口;
-d:打開debug模式;
-F:運行於前臺;
-f:指明配置文件;
-l:指明用於保存日誌文件的內存空間大小;
-s[name=]type[,options]:指明使用的存儲後端;
varnish配置
1、啓動varnish前要先定義其腳本配置文件
配置打開資源限制段
NFILES=131072
多能打開的最大文件數,varnish會自動調整該值;
MEMLOCK=82000
所能使用的內存空間,varnish會自動調整該值;
NPROCS="unlimited"
單個用戶所能運行的最大線程數;
RELOAD_VCL=1
定義varnish是否會自動重新裝載其緩存策略配置文件;“=1”表示在我們使用腳本重啓varnish時,其會自動重載vcl配置文件;