Varnish簡述

一:http再閒聊

一:http閒扯

1跨主機直接通信,分佈式存儲等,如今互聯網上層之間的應用都是在基於http協議之上的,因此深刻的理解http協議.對於上層之間的熟練運用是相當重要的.php

如今智能手機與互聯網技術的充分融合,使得咱們的生活愈來愈依賴於手機.手機已成爲咱們身體以外的另外一個器官.手機在帶給咱們便利的同時.也在無盡的損耗着咱們的碎片化時間.花費在手機上的時間日漸增多,但對於生活的增益卻無甚寥寥.
 增益,首先是在思惟上對一個事物有深入的看法,須要花費心力、腦力持續不斷的試探、執行、重複、改進。

2寫日記的另外一個目的在於:有跡可循。
3大道理少講。一件事情如何作成的,心態如何改變的。
等等此類事宜。在發生改變以後,後續最好能夠整理出相應的改變執法1234。css

二:動態靜態

用戶請求web資源在服務器層面通常分爲兩塊:
1:動態內容服務器:js css php jsphtml

php jsp 在後臺爲動態內容
 js css 在服務器端 是靜態內容,但偶爾須要做出相應修改

2:靜態內容服務器:存放 jpg png jif 等圖片文件前端

三:動態內容服務器:

分爲 前端數據和後端數據

前端數據:js css 網頁佈局 展現 交互式設計nginx

wordpress屬於前端展現工具,在服務器端存儲的數據格式通常爲 js css  
        php。

用戶訪問一個網頁所看到的界面通常由js css 數據來提供。web

後端數據:PHP jsp 數據處理的業務端程序,負責被調用後生成數據

四:程序

指令+數據
 指令:存放在程序文件中
 數據:變量和屬組,經過i/o加載數據
       數據通常存放在 文件系統中或者 數據庫之中

五:緩存

常常被訪問的數據,存放在用戶較近的位置。進而減小用戶的I/O請求跳轉,使得用戶能夠快速的獲取所須要的數據。
緩存不處理用戶的請求,僅僅是把用戶常常訪問的數據,在本地存放下來,隨後當用戶再次訪問時,把數據推送給用戶。數據庫

公共緩存:CDN Content Delivery NetWork後端

六:緩存工具:

squid:http1.0時代使用
varnish:http2.0時代。擁有更好的性能
首先是代理,其次是緩存。
varnish最強大的是緩存,其次是代理
Nginx:最強大的是代理,其次是緩存。緩存

七:http緩存是如何工做的

緩存機制
過時機制: 依據緩存中定義的過時時間
文件過時以前,從緩存處響應客戶端服務器

文件過時以後,從後臺服務器響應客戶端

條件式請求:訪問緩存時,查看服務器與緩存內容有無改變
查看緩存內容有無改變的兩種
1文件的修改時間

2文件的校驗碼
      請求流程:每一次請求,緩存服務器都要向後端服務器發請求,查看緩存中的數
      據有無變化,無變化時,從緩存處響應。有變化時從後端響應

兩者的結合: 請求時,時間未過時,從緩存處響應。 過時時,想後端服務器發送請求,看文件有無變化,決定響應的方式。

八:緩存中的請求報文 響應報文

請求報文用於通知緩存服務如何使用緩存響應請求:

cache-request-directive = 
        "no-cache", 不可用緩存中的數據響應客戶端                       
        | "no-store"                         
        | "max-age" "=" delta-seconds    最大可緩存的時間    
        | "max-stale" [ "=" delta-seconds ]   
        | "min-fresh" "=" delta-seconds      
        | "no-transform"                    
        | "only-if-cached"                  
        | cache-extension                    

響應報文用於通知緩存服務器如何存儲上級服務器響應的內容:
    cache-response-directive =
        "public"  僅可用於公共緩存                             
        | "private" [ "=" <"> 1#field-name <"> ] 
        | "no-cache" [ "=" <"> 1#field-name <"> ],可緩存,但響應給客戶端以前須要revalidation,即必須發出條件式請求進行緩存有效性驗正;
        | "no-store" ,不容許存儲響應內容於緩存中;                           
        | "no-transform"                        
        | "must-revalidate"                     
        | "proxy-revalidate"                  
        | "max-age" "=" delta-seconds           
        | "s-maxage" "=" delta-seconds          
        | cache-extension

九:緩存命中率

緩存命中率:hit/(hit+miss)
    頁面命中率:基於頁面數量進行衡量
    字節命中率:基於頁面的體積進行衡量

十:開源解決方案

squid:
    varnish:
            varnish官方站點: http://www.varnish-cache.org/
           Community :社區版
        Enterprise  :企業版

二:Varnish

一:程序架構

clipboard.png

程序架構:

Manager進程
        Cacher進程,包含多種類型的線程:
            accept, worker, expiry, ... 
        shared memory log:
            日誌存放於內存中,重啓後日志數據及緩存都將丟失
            統計數據:計數器;
            日誌區域:日誌記錄;
                查看日誌的命令
                varnishlog, varnishncsa, varnishstat... 
            
        配置接口:VCL
            Varnish Configuration Language, 
                vcl complier --> c complier --> shared object

二:varnish安裝

yum install varnish
varnish位於epl倉庫 中

三:varnish的程序環境:

/etc/varnish/varnish.params: 配置varnish服務進程的工做特性,例如監聽的地址和端口,緩存機制, 使用多大的緩存,啓用多少個線程;
        /etc/varnish/default.vcl:配置各Child/Cache線程的緩存策略;
        主程序:
            /usr/sbin/varnishd
        CLI interface:
            /usr/bin/varnishadm
        Shared Memory Log交互工具:
            /usr/bin/varnishhist
            /usr/bin/varnishlog
            /usr/bin/varnishncsa
            /usr/bin/varnishstat
            /usr/bin/varnishtop        
        測試工具程序:
            /usr/bin/varnishtest
        VCL配置文件重載程序:
            /usr/sbin/varnish_reload_vcl
        Systemd Unit File:
            /usr/lib/systemd/system/varnish.service
                varnish服務
            /usr/lib/systemd/system/varnishlog.service
            /usr/lib/systemd/system/varnishncsa.service    
                日誌持久的服務;

四:varnish的緩存存儲機制( Storage Types):

/etc/varnish/varnish.params 在此文件中作修改

-s [name=]type[,options]
        
        • malloc[,size]
            內存存儲,[,size]用於定義空間大小;重啓後全部緩存項失效;
        • file[,path[,size[,granularity]]]
            磁盤文件存儲,黑盒;重啓後全部緩存項失效;
        • persistent,path,size
            文件存儲,黑盒;重啓後全部緩存項有效;實驗;
            
    varnish程序的選項:
        程序選項:/etc/varnish/varnish.params文件
            -a address[:port][,address[:port][...],http監聽的端口默認爲6081端口; 
            -T address[:port],默認爲6082端口;
            -s [name=]type[,options],定義緩存存儲機制;

            -u user
            -g group
            -f config:VCL配置文件;
            -F:運行於前臺;

運行時參數:
/etc/varnish/varnish.params文件, DEAMON_OPTS

DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300"
            
            -p param=value:設定運行參數及其值; 可重複使用屢次;
            -r param[,param...]: 設定指定的參數爲只讀狀態;

重載vcl配置文件:

~ ]# varnish_reload_vcl

五:簡要修改配置文件。啓動varnish服務、

修改 /etc/varnish/default.vcl文件
默認監聽的後端 ip地址及端口號(http服務)

clipboard.png
更改成

clipboard.png

啓動服務 systemctl start varnish

啓動服務時,要確保本機的httpd 及 nginx服務都是關閉狀態

ss –ntl

clipboard.png

測試: http://172.16.253.95:6081/ind...
95主機沒有提供web服務,
顯示的是後端服務器的頁面

clipboard.png

響應報文 也證明了這一點

clipboard.png

三:配置VCL

1:varnish工做流程

varnish 3版本和 4 版本的流程稍微不同。具體以下

varnish 3版本

clipboard.png

clipboard.png
一:vcl_recv()引擎 收到請求如何處理
1:不是http請求 直接發至後端服務器
使用pass()引擎
2:是http請求,發送至Cacheable處理
1)不可緩存的方法如 put post等

給fetch()引擎。fetch()引擎向後端去取數據
去取數據以前,還能夠操縱如下請求報文,做出一些修改

fetch()取到數據以後,給deliver()引擎(交付之意),deliver引擎發送至客戶端。
deliver()引擎發送至客戶端以前,能夠修改如下響應報文

2)能夠緩存的方法 get head

交付給 vcl_hash,   vcl_hash能夠定義hash哪些數據
hash完以後的結果有兩種命中或不命中

命中交付給 hit()引擎處理
不命中miss() 引擎處理

結:此流程主要 說起了如下幾個引擎
vcl_recv() 接收用戶請求的引擎
fetch() 向後端去取數據的引擎,能夠修改請求報文
deliver() 發送數據給 客戶端的引擎,能夠修改響應報文
vcl_hash() : 緩存 hash比較的引擎,能夠定義hash的一些規則
hit() 命中緩存的引擎
miss() 未命中緩存的引擎
varnish 4.0

clipboard.png

clipboard.png

增長的引擎:
vcl_purge(): 修剪。 清除一項緩存項
ban():籬笆 清除一類緩存項。 支持正則
pipe(): 不是http請求,直接發送至後端處理
2:vcl中的狀態引擎
1:recv():接收用戶請求的緩存
pipe():不是http的請求,經過管道(四層)直接發送至後端
pass():直接發送至後端
sysnth() 自定義不接受用戶的請求
purge()修剪緩存
hash()
2:hash()緩存 hash比較的引擎,能夠定義hash的一些規則
hit() 命中緩存的引擎
miss() 未命中緩存的引擎
3:
fetch():
接收的是 miss()引擎後的請求及
recv()請求 及
beresponce() 後端處理過的請求
修改請求報文至 後端
error():發送至後端處理以後,沒有找到數據
beresponce() 後端處理以後 ,能夠處理的數據

deliver() 發送數據給 客戶端的引擎,能夠修改響應報文

接收 hit()及 fetch()的數據

3:變量可使用的位置

clipboard.png

下述章節主要描述 vcl配置及 實驗實現

相關文章
相關標籤/搜索