Varnish介紹

来源:https://www.cnblogs.com/shenxm/archive/2018/02/24/8464953.html
-Advertisement-
Play Games

varnish介紹 varnish varnish的特點 varnish的工作原理 varnish的優缺點 varnish設計原則 存儲對象 對象生命周期 varnish的應用程式 varnish安裝 varnish程式架構 varnish的程式環境 ...


varnish介紹

varnish

    官方網站
        https://varnish-cache.org/
        http://book.varnish-software.com/4.0/
    Varnish是反向HTTP代理,有時被稱為gaHTTP加速器或Web加速器,反向代理是作為普通伺服器向客戶端顯示的代理伺服器。
    varnish(高速緩存)存儲器中的文件或文件片段,用於減少將來的等效請求時的響應時間和網路帶寬消耗。
    varnish設計用於現代硬體,現代操作系統和現代工作負載。
    Varnish採用全新的軟體體繫結構,和現在的硬體體系配合比較緊密。
    Varnish不僅僅是用緩存內容來加速你伺服器的反向HTTP代理,根據安裝情況,varnish也可以用作:
        web應用防火牆,DDoS攻擊防禦者,熱鏈保護器,負載平衡器,整合點,單點登錄網關,認證授權策略機制,快速修複不穩定的後端和HTTP路由器。
    varnish是靈活的,因為可以在其Varnish配置語言(VCL)中編寫自己的緩存策略,VCL是基於C的域特定語言,配置完成VCL後,將VCL轉換為C代碼併進行編譯,因此Varnish可以快速執行。

varnish的特點

    Varnish基於記憶體緩存,重啟後數據將消失      
    利用虛擬記憶體方式,io性能好
    支持設置0~60秒內的精確緩存時間
    VCL配置管理比較靈活
    32位機器上緩存文件大小為最大2G
    具有強大的管理功能,例如top,stat,admin,list等
    狀態機設計巧妙,結構清晰
    利用二叉堆管理緩存文件,達到積極刪除目的

varnish的工作原理

    Varnish 與一般伺服器軟體類似,分為master 進程和child 進程。
        master進程讀入存儲配置文件,調用合適的存儲類型,然後創建/讀入相應大小的緩存文件,接著master 初始化管理該存儲空間的結構體,然後fork 並監控child 進程。child進程在主線程的初始化的過程中,將前面打開的存儲文件整個mmap 到記憶體中,此時創建並初始化空閑結構體,掛到存儲管理結構體,以待分配。
        child進程分配若幹線程進行工作,主要包括一些管理線程和很多worker 線程。
    varnish的某個負責接收新HTTP 連接線程開始等待用戶,如果有新的HTTP連接過來,它總負責接收,然後喚醒某個等待中的線程,並把具體的處理過程交給它。
    Worker線程讀入HTTP 請求的URI,查找已有的object,如果命中則直接返回並回覆用戶,如果沒有命中,則需要將所請求的內容,從後端伺服器中取過來,存到緩存中,然後再回覆。
    分配緩存的過程:
        它根據所讀到object 的大小,創建相應大小的緩存文件。
        為了讀寫方便,程式會把每個object的大小變為最接近其大小的記憶體頁面倍數。
        然後從現有的空閑存儲結構體中查找,找到最合適的大小的空閑存儲塊,分配給它。
        如果空閑塊沒有用完,就把多餘的記憶體另外組成一個空閑存儲塊,掛到管理結構體上。
        如果緩存已滿,就根據LRU 機制,把最舊的object 釋放掉。
    釋放緩存的過程:
        有一個超時線程,檢測緩存中所有object 的生存期,如果超初設定的TTL(Time To Live)沒有被訪問,就刪除之,並且釋放相應的結構體及存儲記憶體。
        註意釋放時會檢查該存儲記憶體塊前面或後面的空閑記憶體塊,如果前面或後面的空閑記憶體和該釋放記憶體是連續的,就將它們合併成更大一塊記憶體。
    整個文件緩存的管理,沒有考慮文件與記憶體的關係,實際上是將所有的object 都考慮是在記憶體中,如果系統記憶體不足,系統會自動將其換到swap 空間,而不需要varnish 程式去控制。

varnish的優缺點

    varnish的優點
        Varnish採用了“Visual Page Cache”技術,所有緩存的數據都直接從記憶體讀取。
        Varnish穩定性比Squid高,宕機率很低。
        通過Varnish管理埠,可以使用正則表達式快速、批量地清除部分緩存。
        Varnish可以支持更多的併發連接。
    
    varnish的缺點
        Varnish在高併發狀態下,CPU、I/O和記憶體等資源的開銷高於Squid。
        Varnish的進程一旦掛起、崩潰或者重啟,緩存的數據都會從記憶體中釋放出來,此時的所有請求都會被髮送到後端應用伺服器上,在高併發的情況下,就會給後端伺服器造成很大壓力。

varnish設計原則

    varnish設計目的:
        解決實際問題
        運行於現代硬體(64位多核架構)
        與內核協同工作,而不是針對內核
        將Varnish配置語言VCL翻譯成C語言
        可通過varnish模塊VMODs擴展
        通過其面向工作區的共用記憶體模型減少鎖定爭用
    varnish的重點始終是性能和靈活性。
    Varnish使用面向工作區的記憶體模型,而不是在運行時分配確切的空間空間。
    varnish不管理其分配的記憶體,但它將此任務委托給操作系統,因為內核通常可以比用戶空間程式更好地執行此任務。
    事件過濾器和通知設施,例如epoll和kqueue是操作系統的高級特性,這些特性是為像varnish這樣的高性能的伺服器設計的,通過使用這些特性,varnish可以移動大量的複雜信息到操作系統的內核中,這樣會更好地決定那些線程會被執行。
    Varnish使用Varnish配置語言VCL,允許準確地指定如何使用和組合Varnish的功能。
    VCL被翻譯成C編程語言代碼,該代碼使用標準C編譯器進行編譯,然後在運行時直接動態鏈接到Varnish中。
    當你需要的功能在VCL中沒有提供時,你可以在資料庫中找到個ip地址,以便於你可以寫原始C編碼在自己的VCL上。
    那個地址是線上的,但不鼓勵使用,相比於線上的C,建議把你的C編碼放入varnish的VMOD模塊中。
    VMOD通常以VCL和C編程語言編碼,實際上,VMOD是一個共用庫,具有可以從VCL代碼調用的函數。
    varnish共用存儲日誌(VSL)允許Varnish讓其他應用程式解析數據並提取有用的信息,這個過程幾乎無需花費時間。

存儲對象

        對象:HTTP響應消息的本地存儲
        varnish的對象存儲在記憶體中,並通過hash key進行定址
        可以控制hashing
        多個對象可以具有共同的hash
    對象是本地存儲的響應信息且被定義在協議中,這些信息被映射為hash值並存儲在記憶體中,涉及到的相關對象被存儲hash樹中。
    Varnish的一個相當獨特的功能是它允許你控制散列演算法的輸入。
    預設情況下,hash key是由HTTP主機頭和URL製成,且非常重要。
    但是,你也可以通過使用其他東西來創建hash key,例如,你可以使用Cookie或客戶端請求的用戶代理來創建hash key。
    HTTP指定可以根據客戶端的偏好從相同的URL提供多個對象,例如,gzip格式的內容只發送到指示gzip支持的客戶端。
    varnish在一個hash key下存儲單個壓縮對象。
    根據客戶端請求,Varnish會檢查Accept-Encoding頭域。
    如果客戶端不接受gzip對象,Varnish會即時解壓縮對象並將其發送給客戶端。

對象生命周期

    圖中顯示了緩存對象的生命周期。
    緩存對象具有原始時間戳t_origin和三個持續時間屬性:1)TTL,2)grace和3)keep。
    t_origin是在後端創建對象的時間。
    一個對象生活在緩存中,直到經過之後TTL + grace + keep,該對象被Varnish守護進程刪除。
    VCL - vcl_backend_fetch和 VCL - vcl_backend_response有選擇的解釋了varnish是如何處理後端的響應以及這些時間屬性是如何影響後續行動的。

varnish的應用程式

    varnish應用程式組成:
        /usr/bin/varnishadm
        /usr/bin/varnishhist
        /usr/bin/varnishlog
        /usr/bin/varnishncsa
        /usr/bin/varnishstat
        /usr/bin/varnishtest
        /usr/bin/varnishtop
        /usr/sbin/varnishd
        。。。。
    varnissh最重要的部分是守護進程(後臺服務)varnishd。
    核心進程varnish的接收來自客戶端的HTTP請求,並將請求發送到後端backend,緩存返回的緩存的結果並回覆客戶端請求。 
    varnishtest是用於測試您的Varnish安裝的腳本驅動程式, varnishtest非常強大,因為它允許創建客戶端模型,從模型或真實的後端中獲取內容,與實際的Varnish配置交互,並說明預期的行為。
    varnishadm控制正在運行的Varnish實例,該 varnishadm 實用程式建立在的命令行界面(CLI)連接的varnishd上,此實用程式是唯一可能影響運行的Varnish實例的實用程式,可以使用varnishadm開始和停止varnishd,更改配置參數,重新載入Varnish配置語言(VCL),查看最新的參數文檔等。
    varnish日誌varnishlog提供大量信息,因此通常需要對其進行過濾。例如,“只顯示與X匹配的”。 
    varnishstat用於訪問全局計數器,它提供總體統計信息,例如請求總數,對象數量等, varnishstat在將其varnishlog用於分析您的varnish安裝時特別有用。

varnish安裝

    varnish官方站點: http://www.varnish-cache.org/
    直接下載安裝包進行安裝
    採用epel源安裝
        yum install varnish
        rpm -ql varnish
        /etc/logrotate.d/varnish
        /etc/varnish
        /etc/varnish/default.vcl
        /etc/varnish/varnish.params
        /run/varnish.pid
        /usr/bin/varnishadm
        /usr/bin/varnishhist
        /usr/bin/varnishlog
        /usr/bin/varnishncsa
        /usr/bin/varnishstat
        /usr/bin/varnishtest
        /usr/bin/varnishtop
        /usr/lib/systemd/system/varnish.service
        /usr/lib/systemd/system/varnishlog.service
        /usr/lib/systemd/system/varnishncsa.service
        /usr/sbin/varnish_reload_vcl
        /usr/sbin/varnishd
        /usr/share/doc/varnish-4.0.4
        /var/lib/varnish
        /var/log/varnish

varnish程式架構

        Manager進程
        Cacher進程,包含多種類型的線程:
                accept, worker, expiry, ... 
        shared memory log:
                統計數據:計數器;
                日誌區域:日誌記錄;
                    varnishlog, varnishncsa, varnishstat... 
        配置介面:VCL(Varnish Configuration Language)
                vcl complier --> c complier --> shared object

varnish的程式環境

        varnish環境配置,配置varnish服務進程的工作特性,例如監聽的地址和埠,緩存機制:
            /etc/varnish/varnish.params
        VCL配置文件,配置各Child/Cache線程的緩存策略:
            /etc/varnish/default.vcl
        主程式:
                /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:varnish日誌服務
                /usr/lib/systemd/system/varnishncsa.service :varnish日誌持久的服務

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • CAN匯流排知識整理 一、特點 二、CAN物理層 隱性(邏輯1),顯性(邏輯0)。 三、CAN數據鏈路層 3.1通信機制 3.2數據幀 3.3錯誤幀 3.4其它幀格式 3.5位定時與同步 ...
  • pwd : print name of current/working directory 顯示路徑 ...
  • rsync是一個開源、快速的、多動能的、可以實現全量,增量的本地或遠程數據同步備份工具,它適用於多種操作系統平臺。 1、rsync的特性(功能) (1)支持拷貝特殊文件(如鏈接文件、設備文件) (2)拷貝時可以排除目錄中目錄或文件不需要同步的功能 (3)可以保持源文件或目錄的屬性不發生改變 (4)可 ...
  • 當自己認為學會了的知識並且總結後以為自己明白了這部分知識時,再次學習才發現自己認識的很片面。也許這就是要書讀百遍的意義所在吧。在學習《機器人學導論》這本書時, DH參數的建立正如公式上表達的那樣。需要有四個參數,建立坐標系時,通過在相鄰連桿的Z軸和X軸的建立,減少坐標的建立形式,在根據右手法則確定Y ...
  • 項目流程 弄清需求(需要完成什麼) 設計框架(怎麼實現需求) 編寫代碼(怎麼通過代碼設計) 測試 弄清需求 (1)上電,LCD顯示一副圖片 (2)根據配置文件,決定停留當前界面還是自動顯示下一張 (3)點擊一下,出現一個對話框(手動顯示,自動顯示) (4)上放大,下縮小,左右滑動切換圖片 (5)左右 ...
  • 一、輸出重定向 命令 > 文件 將標準輸出重定向到一個文件中(清空原有文件的數據) 命令 2> 文件 將錯誤輸出重定向到一個文件中(清空原有文件的數據) 命令 >> 文件 將標準輸出重定向到一個文件中 (追加到原有內容的後面) 命令 2>> 文件 將錯誤輸出重定向到一個文件中(追加到原有內容的後面) ...
  • Tomcat介紹 Tomcat Tomcat運行環境 Tomcat安裝運行 Tomcat程式環境 ...
  • Varnish的子進程 VCL varnish的有限狀態機 客戶端和後端工作線程的詳細的varnish請求流程 VCL語法 VCL函數、關鍵字和變數 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...