一次客戶端請求過程:
客戶端請求----》瀏覽器快取------》公共快取------》後端伺服器。
vrnish的狀態引擎(state engine)
vcl_recv:剛收到請求
vcl_fetch:去後端伺服器取內容
vcl_deliver:投遞響應報文
vcl_hit:命中
vcl_miss:沒命中
vcl_hash:因為varnish採用的是範網域名稱解析,通過vcl_hash可以確定不同的key對應的是否為同一值。
vcl_pipe:如果客戶端請求的方法不是乙個正常的方法(不是get,head,put,post,trace,options,delect),或者varnish不能理解這個方法,則有vcl_pipe引擎直接將請求扔給後端主機。
vcl_error:由varnish直接合成乙個錯誤頁面資訊返回給客戶端。
vcl_pass:請求的是乙個不可快取的物件,但varnish能理解請求(例如:請求的方法不是get和head,或請求帶cookie、帶認證等)
【注意】:各狀態引擎之間存在一定的相關性,不能隨意指定順尋,且前乙個engine可能有多個不同的下游engine,則上游engine需要用return指明需要轉移的下游engine
vcl程式語言語法:
(1)//,#,/\*...*/ 用於注釋;
(2)sub $name #用於定義子例程
sub vcl_recv
(3)不支援迴圈
(4)有眾多內建變數,變數的可呼叫位置與state engine有密切相關性;
(5)支援終止語句;return(action);沒有返回值
(6)"域"專用
(7)操作符:=,==,~,!,&&,||
條件判斷語句:
if (condtion) else
變數賦值:set name=value ,unset name
req.http.header:呼叫request報文中http協議的指定header;
req.request:請求方法
client.ip:客戶端ip
beresp :後端響應報文
state engine workflow(version 3):
vcl_recv---->vcl_hash---->vcl_hit---->vcl_deliver
vcl_recv---->vcl_hash---->vcl_miss---->vcl_fetch---->vcl_deliver
vcl_recv---->vcl_pass---->vcl_fetch---->vcl_deliver
vcl_revc---->pipe
state engine(v 4)
vcl_recv,vcl_hash,vcl_hit,vcl_miss,vcl_pipe,vcl_pass
vcl_backend_fetch
vcl_backend_response
vcl_backend_error
vcl_purge
vcl_synth
varnish中的內建變數:
變數種類:
req:客戶端發往varnish的requesrt
resp:varnnish響應給客戶端
client:
server
server.ip
server.hostname
bereq:varnish發給後端主機的
bereq.http.headers:由varnish發往backend server的請求報文的指定首部
bereq.request:請求方法
bereq.backend:指明要呼叫的後端主機
beresp:後端主機響應給varnish的
beresp.http.header:從backend server響應的報文首部
obj:內容的屬性
obj-ttl:物件的ttl值
obj-hits:此物件從快取中命中的次數
storage
接下來我們嘗試重新編譯vcl檔案,並將其應用於我們的服務。
cp /etc/varnish/default.vcl /etc/varnish/test.vcl
在varnish官網( 上覆制vcl_recv的內容
}
使用varnishadm工具連上去
[root@server7 ~]# varnishadm -s /etc/varnish/secret -t 127.0.0.1:6082
vcl.load test2 test.vcl #裝載vcl檔案
vcl.use test2 #使用vcl檔案
去請求6081埠,因為之前已經請求過該頁面了,所以可以看到x-cache的值為hit
我們去請求乙個沒有訪問過的頁面
這時,第一次請求該頁面的值為miss,第二次為hit
我們也可以自定義一些後端主機,例如我們可以自定義乙個後端的伺服器。
backend imgsrv
.port:be監聽的埠
.probe :對be做健康狀態檢測
.max_connections :最大連線數
讓varnish支援虛擬主機
vcl_recv 部分:
if(req.http.host == 「www.wtt.com「 )
強制對某資源的請求不檢查快取
if (req.url ~ "^/test1.html$")
每一修改完vcl檔案後都要重新的裝載使用
vcl.load test3 test.vcl
200
vcl compiled.
vcl.use test3
200
vcl 'test3' now active
這時後去訪問test1.html式一直都是miss狀態,表示結果沒有從快取伺服器返回
後端主機的健康狀態檢測方式:
probe name
.url :判斷be健康與否要請求的url
.expected_responce:期望響應的狀態碼,預設為200
負載均衡演算法:
fallback,random,round_robin,hash
varnish基礎應用
varnish主要用於快取伺服器,還有一些其他軟體也能實現快取功能,例如memcached但是它主要快取的是數值資料,適用於快取mysql的資料 而nginx也有快取功能,也可在反代時為後端主機提供快取,但是nginx常用於反代伺服器使用,也不建議乙個主機承載多工工作,這樣會 效能降低 而varni...
Varnish基礎應用1
是一種開源方案。程序分為兩類 management 程序和 管理程序 child cache 子程序 管理程序 編譯vcl並應用新配置。監控varnish。初始化varnish,cli介面。child cache acceptor 接受新的連線請求。worker thread 處理使用者請求。exp...
python 基礎應用2
取絕對值 a 0.1 print abs a 商餘print divmod 15,5 冪函式 print pow 2,5 四捨五入 print round 0.123456,2 去最大值 max 2,8,9,4,3 去最小值 min 0,8,6,4,12 3 時間的獲取time庫的使用 import...