Varnish概念篇

1,Varnish簡介:

Varnish是一款高性能且開源的反向代理服務器和web加速器,與傳統的squid相比,varnish具有性能更高,速度更快,管理更加方便等諸多優點,很多大型的網站都開始嘗試使用varnish來替換squid,以在相同的服務器成本下提供更好的緩存效果,varnish更是作爲CDN緩存服務器的可選服務之一。

挪威的最大的在線報紙Verdens Gang(vg.no) 使用3臺Varnish代替了原來的12臺squid,性能比以前更好,這是varnish最成功的應用案例。

2,Varnish的特點:

1)是基於內存緩存,重啓後數據將消失。
2)利用虛擬內存,io性能好。
3)支持設置0~60秒內的精確緩存時間。
4)VCL配置管理比較靈活。
5)32位機器上緩存文件大小爲最大2G。
6)具有強大的管理功能,如果top,stat,admin,list等。
7)狀態機設計巧妙,結構清晰。
8)利用二叉堆管理緩存文件,達到積極刪除目的

Varnish概念篇

3,Varnish與Squid對比

說到Varnish,不能不提Squid,Squid是一個高性能的代理緩存服務器,它和varnish之間有諸多的異同點,這裏分析如下:
下面是他們之間的相同點:
(1)都是一個反向代理服務器;
(2)都是開源軟件;

下面是它們的不同點,也是varnish的優點:
(1)Varnish的穩定性高,兩者在完成相同負荷的工作時,squid服務器發送故障的機率要高於varnish,因爲使用squid要經常重啓。
(2)varnish訪問速度更快,Varnish採用了“Visual page Cache”技術,所有緩存數據都直接從內存讀取,而squid是從硬盤讀取,因而varnish在訪問速度方面會更快。
(3)varnish可以支持更多的併發連接,因爲varnish的TCP鏈接釋放要比squid快。因而在高併發連接情況下可以支持更多TCP連接。
(4)varnish可以通過管理端口,使用正則表達式批量的清除部分緩存,而squid是做不到的。

當然,與傳統的squid相比,varnish也是有缺點的,列舉如下:
(1)varnish在高併發狀態下CPU,IO,內存等資源開銷都高於squid。
(2)varnish進程一旦Crash或者重啓,緩存數據都會從內存中完全釋放,此時所有請求都會發送到後端服務器,在高併發情況下,會給後端服務器造成很大壓力。

4,varnish的緩存原理

varnish是一個http反向代理的緩存,當varnish接收到客戶端的請求時,從緩存中查看是否有數據,如果沒有,則varnish去後端(backend servers)獲取響應的資源,同時緩存到varnish服務器中,然後返回給客戶端;根據規則和請求頁面類型選擇數據是否緩存,可以根據請求頭中Cache-Control判斷是否緩存(如private私有緩存),以及cookie是否有標記(如果被標記有cookie的客戶端web請求,varnish默認是不緩存),這些都是通過varnish的vcl配置文件定義的內容實現的。

5,varnish架構

Varnish分爲master(management)主進程和child子進程;
master主進程:管理和應用新的配置,編譯vcl,監控varnish狀態,master會每隔幾秒鐘去探測child進程是否正常運行,如果發現運行異常則重啓child進程。

child子進程:
生成線程池,負責對用戶請求進行處理,並通過hash查找返回用戶結果。常見的線程有:
Accept線程(接受新連接請求並響應)
worker線程(會話,處理請求的資源)
Expiry線程(清理緩存中過期的內容)

6,varnish主要配置部分:

varnish配置主要分爲:後端配置,ACL配置,probes配置,directors配置,核心子程序配置幾大塊。

後端配置:即給varnish添加反代理服務器節點,最少配置一個。
ACL配置:即給varnish添加訪問控制列表,可以指定這些列表訪問或禁止訪問。
probes配置:即給varnish添加探測後端服務器是否正常的規則,方便切換或禁止對應後端服務器。
directors配置:即給varnish添加負載均衡模式管理多個後端服務器。
核心子程序配置:即給varnish添加後端服務器切換,請求緩存,訪問控制,錯誤處理等規則。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章