varnish的架构和日志
生活随笔
收集整理的這篇文章主要介紹了
varnish的架构和日志
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
varnish的架構(gòu)和日志
varnish的架構(gòu)
知道varnish的內(nèi)部結(jié)構(gòu)有兩個(gè)重要的原因:
首先,架構(gòu)主要負(fù)責(zé)性能,其次,它影響你如何將Varnish集成到你自己的架構(gòu)中。
主程序塊是Manager進(jìn)程,包含在二進(jìn)制程序varnishd中。
Manager進(jìn)程的任務(wù)是將任務(wù)包括緩存委托給子進(jìn)程。
Manager進(jìn)程確保每個(gè)任務(wù)總是有一個(gè)進(jìn)程。
這樣設(shè)計(jì)的主要驅(qū)動(dòng)因素就是安全性。
可以通過(guò)以下方式訪問(wèn)Manager的命令行界面(CLI):
1)varnishadm管理界面部分,
2)Varnish Agent vagent2
3)Varnish管理控制臺(tái)(VAC)(通過(guò)vagent2)
Varnish Agent vagent2是一個(gè)varnishd服務(wù)的開源HTTP REST接口,它提供遠(yuǎn)程控制和監(jiān)視服務(wù)。
vagent2提供了一種Web UI ,同時(shí)你可以編寫自己的UI。
vagent2的一些功能是:VCL上傳,下載,保存(存儲(chǔ)到磁盤),參數(shù)查看,存儲(chǔ)(還沒(méi)有持續(xù)),顯示/清除應(yīng)急消息,開始/停止/查看varnishd服務(wù),取締功能,varnishstat 采用JSON格式。
父進(jìn)程:manager
Manager 進(jìn)程由root用戶所擁有,其主要功能有:
應(yīng)用配置更改(從VCL文件和參數(shù))
將任務(wù)委托給子進(jìn)程:Cacher和VCL到C編譯器(VCC)
監(jiān)視varnish
提供一個(gè)varnish命令行界面(CLI)
初始化子進(jìn)程:Cacher
Manager進(jìn)程每幾秒鐘檢查一次cacher是否仍然存在。
如果Manager在由ping_interval給定的時(shí)間間隔內(nèi)沒(méi)有得到回復(fù),那么Manager將殺死Cacher并重新啟動(dòng)。
如果Cacher意外退出,也會(huì)發(fā)生自動(dòng)重啟。
你可以通過(guò)使用varnishadm ping來(lái)進(jìn)行手動(dòng)ping。
子進(jìn)程的自動(dòng)重啟是Varnish的一種復(fù)原屬性,這個(gè)屬性可以確保即使Varnish包含一個(gè)可以危害子進(jìn)程的重要bug,子進(jìn)程通常也會(huì)在幾秒鐘內(nèi)重新啟動(dòng),您可以使用auto_restart參數(shù)切換此屬性。
注意:
即使您沒(méi)有察覺到長(zhǎng)時(shí)間的服務(wù)停機(jī)時(shí)間,您也應(yīng)該檢查varnish的子進(jìn)程是否正在重新啟動(dòng)。
這一點(diǎn)很重要,因?yàn)樽舆M(jìn)程重啟會(huì)導(dǎo)致額外的加載時(shí)間,因?yàn)檫@段時(shí)間中varnishd會(huì)不斷清空緩存。
自動(dòng)重啟的日志記錄在/var/log/syslog,為了驗(yàn)證子進(jìn)程是否被重啟,你也可以用varnishstat中的MAIN.uptime計(jì)數(shù)器來(lái)檢查它的生命周期。
子進(jìn)程:cacher
由于Cacher偵聽的是公共IP地址和已知端口,因此它暴露在惡意客戶端面前。
因此,出于安全考慮,這個(gè)子進(jìn)程由非特權(quán)用戶擁有,并且沒(méi)有與其父進(jìn)程Manager進(jìn)行反向通信。
Cacher的主要功能是:
聽取客戶端的要求
管理工作線程
存儲(chǔ)緩存
記錄流量
更新統(tǒng)計(jì)的計(jì)數(shù)器
Varnish使用工作區(qū)來(lái)減少每個(gè)線程在需要獲取或修改內(nèi)存時(shí)的爭(zhēng)用。
有多個(gè)工作區(qū),但最重要的是會(huì)話工作區(qū),它用于處理會(huì)話數(shù)據(jù)。
如在輸入到緩存之前將www.example.com更改為example.com,來(lái)減少重復(fù)。
請(qǐng)注意,即使你擁有5 MB的會(huì)話工作區(qū)并使用1000個(gè)線程,但實(shí)際的內(nèi)存使用量也不是5 GB,虛擬內(nèi)存的使用量確實(shí)是5GB,但是除非你真的使用內(nèi)存,這不是問(wèn)題,您的內(nèi)存控制器和操作系統(tǒng)將跟蹤您實(shí)際使用的內(nèi)容。
為了與系統(tǒng)的其他部分進(jìn)行通信,子進(jìn)程使用VSL訪問(wèn)文件系統(tǒng),這意味著如果一個(gè)線程需要記錄某些內(nèi)容,所需要做的就是設(shè)定一個(gè)鎖,然后寫內(nèi)容到到內(nèi)存區(qū)域,最后再解鎖。
除此之外,每個(gè)工作線程都有一個(gè)緩存用于記錄日志數(shù)據(jù)以此來(lái)減少鎖定爭(zhēng)用。
日志文件通常大約80MB,并分成兩部分:第一部分是計(jì)數(shù)器,第二部分是請(qǐng)求數(shù)據(jù),要查看實(shí)際數(shù)據(jù),可以采用工具解析VSL。
由于日志數(shù)據(jù)并不意味著都是以原始形式寫入磁盤的,因此Varnish可以做得非常詳細(xì),這樣你可以使用其中一種日志解析工具來(lái)提取您想要的信息 - 即可以永久存儲(chǔ)也可以實(shí)時(shí)監(jiān)控Varnish。
如果Cacher出現(xiàn)問(wèn)題,它會(huì)記錄一個(gè)詳細(xì)的應(yīng)急信息到syslog。
當(dāng)測(cè)試時(shí),你可以使用varnishadm debug.panic.worker 命令或使用vanish agent web 頁(yè)面上的induce panic按鈕來(lái)減少varnishd服務(wù)的應(yīng)急信息。
VCL編譯
打印編譯為C語(yǔ)言的VCL代碼并退出:
varnishd - C - f < vcl_filename >
用于檢查您的VCL代碼是否正確編譯。
Varnish配置語(yǔ)言VCL配置了Varnish的高速緩存策,然后VCL被VCC進(jìn)程轉(zhuǎn)換為C,它是由一個(gè)普通的C編譯器gcc編譯,然后鏈接到正在運(yùn)行的Varnish實(shí)例中。
由于VCL的編譯是在子進(jìn)程之外完成的,所以不會(huì)無(wú)意中加載格式不正確的VCL,從而影響正在運(yùn)行的Varnish實(shí)例。
因此,運(yùn)行Varnish時(shí)更改配置非常方便,新的VCL的政策會(huì)立即生效,但是,所使用的舊配置緩存的對(duì)象可能會(huì)一直存在,直到它們沒(méi)有了舊的引用或新的配置對(duì)其執(zhí)行操作為止。
一個(gè)已編譯的VCL文件將一直存在,直到完全重啟Varnish,或直到管理界面發(fā)出vcl.discard命令,在使用完編譯的VCL文件后你只能刪除。
您可以通過(guò)讀取vcl.list參數(shù)來(lái)查看VCL引用的數(shù)量。
VCL重載
varnishd可以重新加載VCL程序,無(wú)需重新啟動(dòng),只是重新加載VCL編譯代碼。
service varnish reload
systemctl reload varnish
varnish_reload_vcl
varnishadm vcl.load <compiledVCL> <VCLsourcecode>
varnishadm vcl.list
varnishadm vcl.use
varnish日志
varnish日志中記錄有請(qǐng)求,緩存和對(duì)varnish共享內(nèi)存日志(VSL)的響應(yīng)信息。
內(nèi)存日志覆蓋有兩個(gè)效果,一方面沒(méi)有歷史數(shù)據(jù),但另一方面卻有大量的信息以非常快的速度獲得。
當(dāng)然,仍然可以將日志存儲(chǔ)在文件中。
varnish會(huì)生成大量的數(shù)據(jù),因此它不會(huì)將日志默認(rèn)寫入磁盤,而只會(huì)記錄到內(nèi)存中。
如果需要記錄日志到磁盤上,可以通過(guò)在/etc/default/varnishlog和/etc/default/varnishncsa中分別設(shè)置VARNISHNCSA_ENABLED=1來(lái)實(shí)現(xiàn)。
日志工具
顯示詳細(xì)日志:
varnishlog
用于訪問(wèn)特定的數(shù)據(jù),它提供了特定客戶的信息和要求。
varnishncsa
以NCSA通用日志格式顯示varnish訪問(wèn)日志。
varnishtest
允許顯示測(cè)試中的日志記錄和計(jì)數(shù)器。
統(tǒng)計(jì)工具:
varnishstat
用于訪問(wèn)全局計(jì)數(shù)器,不讀取varnish日志中的條目。
varnishtop
讀取Varnish日志并呈現(xiàn)最常出現(xiàn)的日志條目的不斷更新的列表。
varnishhist
讀取Varnish日志,并顯示一個(gè)連續(xù)更新的直方圖,顯示最后N個(gè)請(qǐng)求的處理分布情況。
日志布局
varnish日志事務(wù)處理如圖所示,varnishlog是最常用的工具之一,并采用了按TCP會(huì)話,前端或后端工作者分組的事務(wù)機(jī)制重新排序事務(wù)。
varnishlog的各種參數(shù)是為幫助你找到你想要的東西。使用varnishlog可以有效地過(guò)濾varnish工作中產(chǎn)生的大量日志數(shù)據(jù)。
事務(wù)處理
varnishlog -g <session|request|vxid|raw> -d
Varnish Transaction IDs (VXIDs,varnish 事務(wù)id)被應(yīng)用于大量不同種類的工作項(xiàng)目中。
事務(wù)類型:
session:tcp 會(huì)話
request:前端或后端工作者處理的事務(wù)
varnish默認(rèn)按照VXID來(lái)分組,1是后端請(qǐng)求BeReq,2是客戶端請(qǐng)求Request,3是會(huì)話Session。
事務(wù)組
事務(wù)組是分層的
層級(jí)和關(guān)系
Level 1: Client request (cache miss)
Level 2: Backend request
Level 2: ESI subrequest (cache miss)
Level 3: Backend request
Level 3: Backend request (VCL restart)
Level 3: ESI subrequest (cache miss)
Level 4: Backend request
Level 2: ESI subrequest (cache hit)
總結(jié)
以上是生活随笔為你收集整理的varnish的架构和日志的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java 中线程池的种类,原理以及源码解
- 下一篇: 魔兽世界怀旧服赞吉尔之触任务在哪里 赞吉