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是做不到的。 (5) squid屬於是單進程使用單核CPU,但Varnish是通過fork形式打開多進程來做處理,所以是合理的使用所有核來處理相應的請求。 當然,與傳統的Squid相比,Varnish也是有缺點的,列舉如下: 1) varnish進程一旦Hang、Crash或者重啟,緩存數據都會從內存中完全釋放,此時所有請求都會發送到后端服務器,在高並發情況下,會給后端服務器造成很大壓力。 2) 在varnish使用中如果單個url的請求通過HA/F5(負載均衡)每次請求不同的varnish服務器中,被請求varnish服務器都會被穿透到后端,而且同樣的請求會在多台服務器上緩存,也會造成varnish的緩存的資源浪費,也會造成性能下降。 解決方案: 1) 綜上所述在訪問量很大的情況下推薦使用varnish的內存緩存方式啟動,而且后面需要跟多台squid服務器。主要為了防止前面的varnish服務、服務器被重啟的情況下,前期肯定會有很多的穿透這樣squid可以擔當第二層CACHE,而且也彌補了varnish緩存在內存中重啟都會釋放的問題。 2) 這樣的問題可以在負載均衡上做url哈希,讓單個url請求固定請求到一台varnish服務器上,可以解決該問題。 注:上面的解決方法還需要全面的測試,沒有經過證實