高效能緩衝加速器varnish(概念篇)

來源:互聯網
上載者:User

標籤:varnish   varnish簡介   varnish優點   工作流程   

高效能緩衝加速器varnish(概念篇)一、varnish簡介

varnish是一款高效能的開源HTTP加速器,現在很多門戶網站已經部署了varnish,並且反應都很好,甚至反應比squid還穩定,且效率更高,資源暫用更少。

作者Poul-Henning Kamp是FreeBSD的核心開發人員之一。Varnish採用全新的軟體體系架構,和現在的硬體提交配合緊密。在1975年時,儲存媒介只有兩種:記憶體與硬碟。但現在計算 機系統的記憶體除了主存外,還包括了cpu內的L1、L2,甚至有L3快取。硬碟上也有自己的快取裝置,因此squid cache自行處理物件替換的架構不可能得知這些情況而做到最佳化,但作業系統可以得知這些情況,所以這部份的工作應該交給作業系統處理,這就是 Varnish cache設計架構。

挪威最大的線上報紙 Verdens Gang (http://www.vg.no) 使用3台Varnish代替了原來的12台squid,效能居然比以前更好,這是Varnish最成功的應用案例。

二、varnish的特點

Varnish是一個輕量級的Cache和反向 Proxy軟體。先進的設計理念和成熟的設計架構是Varnish的主要特點。現在的Varnish總共代碼量不大,雖然功能在不斷改進,但是還需要繼續豐富和加強。下面是Varnish的一些特點:

1. 基於記憶體進行緩衝,重啟後資料將消失

2. 利用虛擬記憶體方式,I/O效能好

3. 支援設定0~60秒的精確緩衝時間

4. VCL組態管理比較靈活

5. 32位機器上快取檔案大小最大為2G

6. 具有強大的管理功能,例如top、stat、admin、list等

7. 狀態機器設定巧妙,結構清晰

8. 利用二元堆積管理快取檔案,可達到積極刪除目的

三、varnish和squid的對比

Squid是一個高效能的代理快取服務器,它和varnish之間有諸多的異同點,如下:

1、相同點:

1) 都是一個反向 Proxy伺服器

2) 都是開源軟體

2、不同點,也是Varnish的優點:

1) Varnish的穩定性很高,兩者在完成相同負荷的工作時,Squid伺服器發生故障的幾率要高於Varnish,因為使用Squid要經常重啟。

2) Varnish訪問速度更快,Varnish採用了“Visual Page Cache”技術,所有快取資料都直接從記憶體讀取,而squid是從硬碟讀取,因而Varnish在訪問速度方面會更快。

3) Varnish可以支援更多的並發串連,因為Varnish的TCP串連釋放要比Squid快。因而在高並發串連情況下可以支援更多TCP串連。

4) Varnish可以通過管理連接埠,使用Regex批量的清除部分緩衝,而Squid是做不到的。

5) squid屬於是單進程使用單核CPU,但Varnish是通過fork形式開啟多進程來做處理,所以是合理的使用所有核來處理相應的請求。

四、Varnish的不足和解決方案

1、varnish的不足

與傳統的Squid相比,Varnish也是有缺點的,如下:

1) varnish進程一旦掛起、崩潰或者重啟,快取資料都會從記憶體中完全釋放,此時所有請求都會發送到後端伺服器,在高並發情況下,會給後端伺服器造成很大壓力。

2) 在varnish使用中如果單個url的請求通過HA/F5(負載平衡)每次請求不同的varnish伺服器中,被請求varnish伺服器都會被穿透到後端,而且同樣的請求會在多台伺服器上緩衝,也會造成varnish的緩衝的資源浪費,也會造成效能下降。

2、解決方案

綜上所述在訪問量很大的情況下推薦使用varnish的記憶體緩衝方式啟動,而且後面需要跟多台squid伺服器。主要為了防止前面的varnish服務、伺服器被重啟的情況下,前期肯定會有很多的穿透這樣squid可以擔當第二層cache,而且也彌補了varnish緩衝在記憶體中重啟都會釋放的問題。這樣的問題可以在負載平衡上做url雜湊,讓單個url請求固定請求到一台varnish伺服器上,可以解決該問題。

五、varnish的工作流程

varnish啟動有2個進程,master(management)進程和child(worker)進程。master讀入儲存配置命令,進行初始化,然後fork,監控child。child則分配線程進行cache工作,child還會做管理線程和產生很多worker線程。

child進程主線程初始化過程中,將儲存大檔案整個載入到記憶體中,如果該檔案超出系統的虛擬記憶體,則會減少原來配置mmap大小,然後繼續載入,這時候建立並初始化空閑儲存結構體,放在儲存管理的struct中,等待分配。

接著varnish某個負責介面新http串連的線程開始等待使用者,如果有新的http串連,但是這個線程只負責接收,然後喚醒等待線程池中的work線程,進行請求處理。

worker線程讀入uri後,將會尋找已有的object,命中直接返回,沒有命中,則會從後端伺服器中取出來,放到緩衝中。

如果緩衝已滿,會根據LRU演算法,釋放舊的object。對於釋放緩衝,有一個逾時線程會檢測緩衝中所有object的生命週期,如果緩衝到期(ttl),則刪除,釋放相應的儲存記憶體。

 


本文出自 “快樂一生” 部落格,請務必保留此出處http://tyjhz.blog.51cto.com/8756882/1440203

高效能緩衝加速器varnish(概念篇)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.