一.Varnish概述
1.Varnish 簡介
Varnish是一款高性能且開源的反向代理服務器和HTTP加速器,其采用全新的軟件體系機構,和現在的硬件體系緊密配合。與傳統的squid相比,Varnish具有高性能、速度快、管理更加方便等優點,目前很多大型的網站都開始嘗試使用Varnish來代替squid,這便是Varnish迅速發展的最根本的原因。
Varnish的主要特征:
(1)緩存代理位置:可以使用內存也可以使用磁盤;
(2)日志存儲:日志存儲在內存中;
(3)支持虛擬內存的使用;
(4)有精確的時間管理機制,即緩存的時間屬性控制;
(5)狀態引擎架構:在不同的引擎上完成對不同的緩存和代理數據進行處理;
(6)緩存管理:以二叉堆管理緩存數據,做到數據的及時清理;
2.Varnish 與 Squid 的對比相同點
都是開源軟件; 都是一個反向代理服務器;Varnish 的優勢
(1)穩定性:Varnish和Squid在完成相同負載的工作時,Squid服務器發生故障的幾率要高于Varnish,因為使用Squid需要經常重啟;
(2)訪問速度更快:Varnish所有緩存的數據都是直接從內存中讀取,而Squid是從硬盤中讀取;
(3)支持更多的并發連接:因為Varnish的TCP連接和釋放的速度比Squid快很多
Varnish 的劣勢
(1)Varnish進程一旦重啟,緩存數據都會從內存中完全釋放,此時所有請求都會發送到后端服務器,在高并發情況下,會給后端服務器造成很大壓力;
(2)在Varnish使用中如果使用單個URL的請求通過負載均衡時,則每次請求都會落在不同的Varnish服務器中,造成請求都會到后端服務器;而且同樣的秦桂在多臺服務器上緩存,也會造成Varnish的緩存資源的浪費,造成性能下降;
Varnish 劣勢的解決方案
針對劣勢一:在訪問量很大的情況下推薦使用 varnish 的內存緩存方式啟動,而且后面需要 跟多臺 squid/nginx 服務器。主要為了防止前面的 varnish 服 務、服務器被重啟的情況下, 大量請求穿透 varnish,這樣 squid/nginx 可以就擔當第二層 CACHE,而且也彌補了 varnish 緩 存在內存中重啟都會釋放的問題;
針對劣勢二:可以在負載均衡上做 url 哈希,讓單個 url 請求固定請求到一臺 varnish 服務器 上;
3.Varnish的工作原理
當Varnish服務器收到客戶端的請求時,首選檢查緩存中是否有數據,如果有,則直接響應客戶端;如果沒有則向后端服務器請求相應的資源,緩存到Varnish服務器本地,再響應客戶端;
根據規則和請求頁面的類型選擇數據是否需要進行緩存,可以根據請求頭中Cache-Contorl判斷是否緩存,以及cookis是否有標記,這些功能都可以通過編寫配置文件的方式來實現。
4.Varnish簡單架構
Varnish分為management進程和child進程
management進程:對child進程進行管理,同事對VCL配置進行編譯,并應用到不同的狀態引擎中; child進程:生成線程池,負責對用戶請求進行處理,并通過hash查找返回用戶結果;child進程生成的常見線程有
accept線程:接收新的連接請求并響應; worker線程:會話,處理請求資源; expiry線程:清除緩存中過期的內容;5.varnish 主要配置部分
后端配置:給Varnish添加反向代理服務器節點,最少配置一個; ACL配置:給Varnish添加訪問控制列表,可以指定這些列表訪問或禁止訪問; probes配置:給Varnish添加探測后端服務器是否正常的規則,方便切換或禁止對應后端服務器; directors配置:給Varnish添加負載均衡模式管理多個后端服務器; 核心子程序配置:給Varnish添加后端服務器切換,請求緩存、訪問控制、錯誤處理等規則;新聞熱點
疑難解答