varnish ing

緩存服務器

緩存指的是將需要頻繁訪問的網絡內容存放在離用戶較近、訪問速度更快的系統中,以提高內容訪問速度的一種技術。緩存服務器就是存放頻繁訪問內容的服務器。

緩存提供了比將訪問對象放在Internet Web服務器上更好的方法,它將需要頻繁訪問的Web頁面和對象保存在離用戶更近的系統中,當再次訪問這些對象的時候加快了速度。


緩存服務器原理


Web緩存服務器的應用模式主要是正向代理和反向代理。


正向代理(Proxy)模式是代理網絡用戶訪問internet,客戶端將本來要直接發送到internet上源服務器的連接請求發送給代理服務器處理。正向代理的目的是加速用戶在使用瀏覽器訪問Internet時的請求響應時間,並提高廣域網線路的利用率。正向代理瀏覽器無需和該站點建立聯繫,只訪問到Web緩存即可。通過正向代理,大大提高了後續用戶的訪問速度,使他們無需再穿越Internet,只要從本地Web緩存就可以獲取所需要的信息,避免了帶寬問題,同時可以大量減少重複請求在網絡上的傳輸,從而降低網絡流量,節省資費。


反向代理(Reverse Proxy)模式是針對Web服務器加速功能的,在該模式中,緩存服務器放置在web應用服務器的前面,當用戶訪問web應用服務器的時候,首先經過緩存服務器,並將用戶的請求和應用服務器應答的內容寫入緩存服務器中,從而爲後續用戶的訪問提供更快的響應。



varnish簡介

Varnish是一款高性能的開源HTTP加速器,挪威最大的在線報紙 Verdens Gang 使用3臺Varnish代替了原來的12臺Squid,性能比以前更好。


Varnish的一些特點:


*基於內存進行緩存,重啓後數據將消失;


*利用虛擬內存方式,I/O性能好;


*支持設置0~60秒精確緩存時間;


*VCL 配置管理比較靈活;


*32位機器上緩存文件大小爲最大2GB;


*具有強大的管理功能;


*狀態機設計巧妙,結構清晰;


*利用二叉堆管理緩存文件,可達到積極刪除目的;



varnish的體系結構

wKioL1dFoyjQi2t4AAFVdtsG1VY902.jpg

varnish主要運行兩個進程:Management進程和Child進程(也叫Cache進程)。


管理進程:編譯VCL並應用新配置;監控vanish;初始化varnish;CLI接口;

Child/cache:

Acceptor:接收新的連接請求;

worker threads:處理用戶請求;

Expiry:清理緩存中的過期對象;


日誌:Shared Memory Log,共享內存日誌大小默認一般爲90MB,分爲兩部分,前一部分爲計數器,後一部分請求相關的數據;


vcl: Varnish Configuration Language

                緩存策略配置接口;

                基於“域”的簡單編程語言;


內存分配和回收:

    malloc(), free()


varnish如何存儲緩存對象:

            file: 單個文件;不支持持久機制;

            malloc: 內存;

            persistent:基於文件的持久存儲;


1、varnish工作原理

    客戶端請求到達varnish代理,child線程中的accept接收下請求進程,交給worker threads處理,worker threads先去object expiry找緩存,沒找到就去上游服務器backend lcatinon找到資源,返回varnish代理,查看是否符合緩存規則,符合則緩存,不符合則直接返回給客戶端


2、緩存分類

     代理緩存:客戶端請求代理,先去找緩存,緩存沒有,代理會去上游服務器找到資源,並緩存在代理,然後返回給客戶端

    旁路緩存:客戶端去緩存找緩存,緩存沒命中返回客戶端,客戶端去上游服務器找到資源返回到本地,然後再把資源緩存到緩存


3、memcache適用的場景

    memcache的缺點:不能適應實時更新,如果實時更新,緩存不命中,命中率低。

memcache支持分佈式緩存,有mysql主從就不需要memcache,memcache適合多臺mysql集羣環境,此時直接到mysql緩存取查詢性能較好


4、varnish各狀態引擎的功用:

    vcl_recv:實現安全策略,僅處理可以識別http方法,且只緩存get和head的方法,不緩存用戶特有的數據(根據客戶端的請求作出的緩存策略)

    vcl_fetch:根據服務端的響應作出的策略緩存

    vcl_pipe: 用於將請求直接發往後端主機;

    vcl_hash: 自定義hash生成時的數據來源

    vcl_pass: 用於將請求直接傳遞至後端主機;

    vcl_hit: 從緩存中查找到緩存對象時要執行的操作;

    vcl_miss: 從緩存中款查找到緩存對象時要執行的操作;

    vcl_deliver: 將用戶請求的內容響應給客戶端時用到的方法;

    vcl_error: 在varnish端合成錯誤響應時的緩存策略;



緩存處理的步驟:

接收請求 --> 解析請求 (提取請求的URL及各種首部)--> 查詢緩存 --> 新鮮度檢測 --> 創建響應報文 --> 發送響應 --> 記錄日誌



新鮮度檢測機制:

    過期日期:

        HTTP/1.0 Expires

            Expires:Thu, 04 Jun 2015 23:38:18 GMT

        HTTP/1.1 Cache-Control: max-age

Cache-Control:max-age=600


    有效性再驗正:revalidate

        如果原始內容未改變,則僅響應首部(不附帶body部分),響應碼304 (Not Modified)

        如果原始內容發生改變,則正常響應,響應碼200;

        如果原始內容消失,則響應404,此時緩存中的cache object也應該被刪除;


    條件式請求首部:

        If-Modified-Since:基於請求內容的時間戳作驗正;

        If-Unmodified-Since

        If-Match:

        If-None-Match:

            Etag: faiy89345



varnish規則編寫之VCL

vcl: Varnish Configuration Language

    緩存策略配置接口;

    基於“域”的簡單編程語言;



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