生活随笔
收集整理的這篇文章主要介紹了
Varnish介绍
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
varnish介紹
varnish
官方網(wǎng)站
https://varnish-cache.org/
http://book.varnish-software.com/4.0/
Varnish是反向HTTP代理,有時被稱為gaHTTP加速器或Web加速器,反向代理是作為普通服務器向客戶端顯示的代理服務器。
varnish(高速緩存)存儲器中的文件或文件片段,用于減少將來的等效請求時的響應時間和網(wǎng)絡帶寬消耗。
varnish設計用于現(xiàn)代硬件,現(xiàn)代操作系統(tǒng)和現(xiàn)代工作負載。
Varnish采用全新的軟件體系結(jié)構(gòu),和現(xiàn)在的硬件體系配合比較緊密。
Varnish不僅僅是用緩存內(nèi)容來加速你服務器的反向HTTP代理,根據(jù)安裝情況,varnish也可以用作:
web應用防火墻,DDoS攻擊防御者,熱鏈保護器,負載平衡器,整合點,單點登錄網(wǎng)關(guān),認證授權(quán)策略機制,快速修復不穩(wěn)定的后端和HTTP路由器。
varnish是靈活的,因為可以在其Varnish配置語言(VCL)中編寫自己的緩存策略,VCL是基于C的域特定語言,配置完成VCL后,將VCL轉(zhuǎn)換為C代碼并進行編譯,因此Varnish可以快速執(zhí)行。
varnish的特點
Varnish基于內(nèi)存緩存,重啟后數(shù)據(jù)將消失
利用虛擬內(nèi)存方式,io性能好
支持設置0~60秒內(nèi)的精確緩存時間
VCL配置管理比較靈活
32位機器上緩存文件大小為最大2G
具有強大的管理功能,例如top,stat,admin,list等
狀態(tài)機設計巧妙,結(jié)構(gòu)清晰
利用二叉堆管理緩存文件,達到積極刪除目的
varnish的工作原理
Varnish 與一般服務器軟件類似,分為master 進程和child 進程。
master進程讀入存儲配置文件,調(diào)用合適的存儲類型,然后創(chuàng)建/讀入相應大小的緩存文件,接著master 初始化管理該存儲空間的結(jié)構(gòu)體,然后fork 并監(jiān)控child 進程。child進程在主線程的初始化的過程中,將前面打開的存儲文件整個mmap 到內(nèi)存中,此時創(chuàng)建并初始化空閑結(jié)構(gòu)體,掛到存儲管理結(jié)構(gòu)體,以待分配。
child進程分配若干線程進行工作,主要包括一些管理線程和很多worker 線程。
varnish的某個負責接收新HTTP 連接線程開始等待用戶,如果有新的HTTP連接過來,它總負責接收,然后喚醒某個等待中的線程,并把具體的處理過程交給它。
Worker線程讀入HTTP 請求的URI,查找已有的object,如果命中則直接返回并回復用戶,如果沒有命中,則需要將所請求的內(nèi)容,從后端服務器中取過來,存到緩存中,然后再回復。
分配緩存的過程:
它根據(jù)所讀到object 的大小,創(chuàng)建相應大小的緩存文件。
為了讀寫方便,程序會把每個object的大小變?yōu)樽罱咏浯笮〉膬?nèi)存頁面倍數(shù)。
然后從現(xiàn)有的空閑存儲結(jié)構(gòu)體中查找,找到最合適的大小的空閑存儲塊,分配給它。
如果空閑塊沒有用完,就把多余的內(nèi)存另外組成一個空閑存儲塊,掛到管理結(jié)構(gòu)體上。
如果緩存已滿,就根據(jù)LRU 機制,把最舊的object 釋放掉。
釋放緩存的過程:
有一個超時線程,檢測緩存中所有object 的生存期,如果超初設定的TTL(Time To Live)沒有被訪問,就刪除之,并且釋放相應的結(jié)構(gòu)體及存儲內(nèi)存。
注意釋放時會檢查該存儲內(nèi)存塊前面或后面的空閑內(nèi)存塊,如果前面或后面的空閑內(nèi)存和該釋放內(nèi)存是連續(xù)的,就將它們合并成更大一塊內(nèi)存。
整個文件緩存的管理,沒有考慮文件與內(nèi)存的關(guān)系,實際上是將所有的object 都考慮是在內(nèi)存中,如果系統(tǒng)內(nèi)存不足,系統(tǒng)會自動將其換到swap 空間,而不需要varnish 程序去控制。
varnish的優(yōu)缺點
varnish的優(yōu)點
Varnish采用了“Visual Page Cache”技術(shù),所有緩存的數(shù)據(jù)都直接從內(nèi)存讀取。
Varnish穩(wěn)定性比Squid高,宕機率很低。
通過Varnish管理端口,可以使用正則表達式快速、批量地清除部分緩存。
Varnish可以支持更多的并發(fā)連接。
varnish的缺點
Varnish在高并發(fā)狀態(tài)下,CPU、I/O和內(nèi)存等資源的開銷高于Squid。
Varnish的進程一旦掛起、崩潰或者重啟,緩存的數(shù)據(jù)都會從內(nèi)存中釋放出來,此時的所有請求都會被發(fā)送到后端應用服務器上,在高并發(fā)的情況下,就會給后端服務器造成很大壓力。
varnish設計原則
varnish設計目的:
解決實際問題
運行于現(xiàn)代硬件(64位多核架構(gòu))
與內(nèi)核協(xié)同工作,而不是針對內(nèi)核
將Varnish配置語言VCL翻譯成C語言
可通過varnish模塊VMODs擴展
通過其面向工作區(qū)的共享內(nèi)存模型減少鎖定爭用
varnish的重點始終是性能和靈活性。
Varnish使用面向工作區(qū)的內(nèi)存模型,而不是在運行時分配確切的空間空間。
varnish不管理其分配的內(nèi)存,但它將此任務委托給操作系統(tǒng),因為內(nèi)核通??梢员扔脩艨臻g程序更好地執(zhí)行此任務。
事件過濾器和通知設施,例如epoll和kqueue是操作系統(tǒng)的高級特性,這些特性是為像varnish這樣的高性能的服務器設計的,通過使用這些特性,varnish可以移動大量的復雜信息到操作系統(tǒng)的內(nèi)核中,這樣會更好地決定那些線程會被執(zhí)行。
Varnish使用Varnish配置語言VCL,允許準確地指定如何使用和組合Varnish的功能。
VCL被翻譯成C編程語言代碼,該代碼使用標準C編譯器進行編譯,然后在運行時直接動態(tài)鏈接到Varnish中。
當你需要的功能在VCL中沒有提供時,你可以在數(shù)據(jù)庫中找到個ip地址,以便于你可以寫原始C編碼在自己的VCL上。
那個地址是在線的,但不鼓勵使用,相比于在線的C,建議把你的C編碼放入varnish的VMOD模塊中。
VMOD通常以VCL和C編程語言編碼,實際上,VMOD是一個共享庫,具有可以從VCL代碼調(diào)用的函數(shù)。
varnish共享存儲日志(VSL)允許Varnish讓其他應用程序解析數(shù)據(jù)并提取有用的信息,這個過程幾乎無需花費時間。
存儲對象
對象:HTTP響應消息的本地存儲
varnish的對象存儲在內(nèi)存中,并通過hash key進行尋址
可以控制hashing
多個對象可以具有共同的hash
對象是本地存儲的響應信息且被定義在協(xié)議中,這些信息被映射為hash值并存儲在內(nèi)存中,涉及到的相關(guān)對象被存儲hash樹中。
Varnish的一個相當獨特的功能是它允許你控制散列算法的輸入。
默認情況下,hash key是由HTTP主機頭和URL制成,且非常重要。
但是,你也可以通過使用其他東西來創(chuàng)建hash key,例如,你可以使用Cookie或客戶端請求的用戶代理來創(chuàng)建hash key。
HTTP指定可以根據(jù)客戶端的偏好從相同的URL提供多個對象,例如,gzip格式的內(nèi)容只發(fā)送到指示gzip支持的客戶端。
varnish在一個hash key下存儲單個壓縮對象。
根據(jù)客戶端請求,Varnish會檢查Accept-Encoding頭域。
如果客戶端不接受gzip對象,Varnish會即時解壓縮對象并將其發(fā)送給客戶端。
對象生命周期
圖中顯示了緩存對象的生命周期。
緩存對象具有原始時間戳t_origin和三個持續(xù)時間屬性:1)TTL,2)grace和3)keep。
t_origin是在后端創(chuàng)建對象的時間。
一個對象生活在緩存中,直到經(jīng)過之后TTL + grace + keep,該對象被Varnish守護進程刪除。
VCL - vcl_backend_fetch和 VCL - vcl_backend_response有選擇的解釋了varnish是如何處理后端的響應以及這些時間屬性是如何影響后續(xù)行動的。
varnish的應用程序
varnish應用程序組成:
/usr/bin/varnishadm
/usr/bin/varnishhist
/usr/bin/varnishlog
/usr/bin/varnishncsa
/usr/bin/varnishstat
/usr/bin/varnishtest
/usr/bin/varnishtop
/usr/sbin/varnishd
。。。。
varnissh最重要的部分是守護進程(后臺服務)varnishd。
核心進程varnish的接收來自客戶端的HTTP請求,并將請求發(fā)送到后端backend,緩存返回的緩存的結(jié)果并回復客戶端請求。
varnishtest是用于測試您的Varnish安裝的腳本驅(qū)動程序, varnishtest非常強大,因為它允許創(chuàng)建客戶端模型,從模型或真實的后端中獲取內(nèi)容,與實際的Varnish配置交互,并說明預期的行為。
varnishadm控制正在運行的Varnish實例,該 varnishadm 實用程序建立在的命令行界面(CLI)連接的varnishd上,此實用程序是唯一可能影響運行的Varnish實例的實用程序,可以使用varnishadm開始和停止varnishd,更改配置參數(shù),重新加載Varnish配置語言(VCL),查看最新的參數(shù)文檔等。
varnish日志varnishlog提供大量信息,因此通常需要對其進行過濾。例如,“只顯示與X匹配的”。
varnishstat用于訪問全局計數(shù)器,它提供總體統(tǒng)計信息,例如請求總數(shù),對象數(shù)量等, varnishstat在將其varnishlog用于分析您的varnish安裝時特別有用。
varnish安裝
varnish官方站點: http://www.varnish-cache.org/
直接下載安裝包進行安裝
采用epel源安裝
yum install varnish
rpm -ql varnish
/etc/logrotate.d/varnish
/etc/varnish
/etc/varnish/default.vcl
/etc/varnish/varnish.params
/run/varnish.pid
/usr/bin/varnishadm
/usr/bin/varnishhist
/usr/bin/varnishlog
/usr/bin/varnishncsa
/usr/bin/varnishstat
/usr/bin/varnishtest
/usr/bin/varnishtop
/usr/lib/systemd/system/varnish.service
/usr/lib/systemd/system/varnishlog.service
/usr/lib/systemd/system/varnishncsa.service
/usr/sbin/varnish_reload_vcl
/usr/sbin/varnishd
/usr/share/doc/varnish-4.0.4
/var/lib/varnish
/var/log/varnish
varnish程序架構(gòu)
Manager進程
Cacher進程,包含多種類型的線程:
accept, worker, expiry, ...
shared memory log:
統(tǒng)計數(shù)據(jù):計數(shù)器;
日志區(qū)域:日志記錄;
varnishlog, varnishncsa, varnishstat...
配置接口:VCL(Varnish Configuration Language)
vcl complier --> c complier --> shared object
varnish的程序環(huán)境
varnish環(huán)境配置,配置varnish服務進程的工作特性,例如監(jiān)聽的地址和端口,緩存機制:
/etc/varnish/varnish.params
VCL配置文件,配置各Child/Cache線程的緩存策略:
/etc/varnish/default.vcl
主程序:
/usr/sbin/varnishd
CLI interface:
/usr/bin/varnishadm
Shared Memory Log交互工具:
/usr/bin/varnishhist
/usr/bin/varnishlog
/usr/bin/varnishncsa
/usr/bin/varnishstat
/usr/bin/varnishtop
測試工具程序:
/usr/bin/varnishtest
VCL配置文件重載程序:
/usr/sbin/varnish_reload_vcl
Systemd Unit File:
/usr/lib/systemd/system/varnish.service:varnish服務
/usr/lib/systemd/system/varnishlog.service:varnish日志服務
/usr/lib/systemd/system/varnishncsa.service :varnish日志持久的服務
總結(jié)
以上是生活随笔為你收集整理的Varnish介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。