【varnish】分流測試案例分析

1.先解釋varnish是什麼?[摘]

   Varnish 是一款高性能開源的Http加速器(其實是反向代理)。

   

工作流程:與服務器軟件類似,分爲master(management)進程和child(worker,主要做cache的工作)進程。master進程讀入命令,進行一些初始化,然後fork並監控child進程。child進程分配若干線程進行工作,主要包括一些管理線程和很多woker線程。


1.vcl_recv,首先接收請求,判斷是否要進一步處理,還是直接轉發給後端(pass)等。 此過程中可以使用和請求相關的變量,例如客戶端請求的url,ip,user-agent,cookie等,此過程中可以把不需緩存的地址,通過判斷(相等、不相等、正則匹配等方法)轉給後端,例如gif/png/jpg/css/js等靜態文件;
2.vcl_fetch,當從後端服務器獲取內容後會進入此階段,除了可以使用客戶端的請求變量,還可以使用從後端獲取的信息(bersp),如後端返回的頭信息,設置此信息的緩存時間TTL等;
3.vcl_miss 緩存未命中時中要做的處理
4.vcl_hit 緩存命中後做的處理
5.vcl_delever 發送給客戶端前的處理
6.vcl_pass 交給後端服務器
7.vcl_hash 設置緩存的鍵值key

首次請求時過程如下:
recv->hash->miss->fetch->deliver
緩存後再次請求:
recv->hash->hit->deliver(fetch的過程沒了,這就是我們要做的,把要緩存的頁面保存下來)
直接交給後端pass的情況:
recv->hash->pass->fetch->deliver(直接從後端獲取數據後發送給客戶端,此時Varnish相當於一箇中轉站,只負責轉發)


*詳細請求過程可以參考./bin/varnishlog中的輸出日誌


2.爲什麼要進行varnish分流?

   Varnish makes websites fly! 

   可以把整個網頁內容緩存到內存(或文件)中,並設置不同類型的頁面緩存不同時間(TTL),同時提供緩存的更新(purge)。
此外還可以設置多個後端服務器,支持後端服務器的健康檢查,Header甚至url地址的重置修改,以及ESI(Edge Side Includes)功能(與nginx的ssi類似)


3.如何安裝和配置?

【摘自】http://www.wangnow.com/article/17-varnish-makes-websites-fly


   一、安裝
         下載源文件http://www.varnish-cache.org/releases,或者選擇相應的編譯版本直接安裝(如直接安裝方式以下步驟可跳過)

       $ tar zxf varnish-2.1.5.tar.gz

       $ cd varnish-2.1.5/


#假設安裝在/data/app/varnish下,詳細安裝設置查看幫助./configure --help

       $ ./configure --prefix=/data/app/varnish

      $ make

    $ make install


注意,如果配置中提示一個或者其中幾個警告信息的話,是沒有安裝對應的支持庫

    configure: WARNING: xsltproc not found – not building documentation

    checking for rst2man... no

    checking for rst2man.py... no

    configure: WARNING: rst2man not found – not building man pages

    checking for clock_gettime in -lrt... yes

    checking for dlopen in -ldl... yes

    checking for library containing initscr... no

    configure: WARNING: curses not found; some tools will not be built


直接安裝對應擴展庫即可,否則varnishhist varnishtop varnishsizes varnishstat這些工具不會安裝

  sudo apt-get install xsltproc  rst2man libncurses5-dev


二、配置
首先,修改Varnish的配置文件default.vcl,默認在安裝目錄的./etc/varnish/下,當然,在哪並不重要,可以在啓動服務的時候指定配置文件(關鍵你要記得位置……)
#開頭的是註釋標記,.host表示的是後端服務器的地址或者域名,.port其對應的端口號(這裏爲了方便測試,Varnish和web服務器都位於一臺機子上,我們用Varnish監聽8080端口,暫時先不修改原web服務器的80端口)

backend default {

     .host = "127.0.0.1";

     .port = "80";

}


運行Varnish

sudo ./sbin/varnishd -f /data/app/varnish/etc/varnish/default.vcl -s malloc,32M\

 -T 127.0.0.1:2000 -a 0.0.0.0:8080 -F


驗證頁面有Varnish的標準

直接訪問localhost:8080即可看到經過Varnish輸出的頁面了!
通過Firebug或者curl -I查看http頭信息:

Server: nginx

Content-Type: text/html

Last-Modified: Sat, 09 Apr 2011 15:51:38 GMT

Content-Encoding: gzip

Content-Length: 134

Date: Thu, 05 May 2011 14:15:59 GMT

X-Varnish: 1047954835 1047954830

Age: 7

Via: 1.1 varnish

Connection: keep-alive


首先可以看Age字段,如果是大於0的話,說明是從緩存命中的。其次查看X-Varnish字段,如果是兩個數字例如X-Varnish: 1668515406 1668515405

代表的是Varnish兩次請求id(req.xid):一個爲發起請求的id,另外一個是獲取緩存的id,而緩存未命中或者pass到後端的情況都是一個數值(當然你可以在deliver過程中修改這些頭信息或者直接隱藏掉)


Notice:

如果後端程序設置了類似這樣的頭信息Cache-Control: max-age=300
會重置默認的緩存時間TTL,當然你可以在配置文件中重置這個時間


4.如何測試varnish數據準確性?

(1)分流code一般記錄在查審

   /usr/local/varnish/etc/varnish/default.vcl 

(2)一定優先保證測試數據是正確的

(3)訪問頁面查看請求url日誌記錄

  sudo tail -f /var/log/messages

(4)所有準備都做好清除Varnish後重新訪問頁面

  sudo /etc/init.d/varnish restart



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