Varnish(一)簡介與原理
簡介
Varnish是一款高效能且開源的方向代理伺服器和HTTP加速器
Varnish架構
官方給出的架構圖
圖片來自 http://book.varnish-software.com/4.0/chapters/Tuning.html#varnish-architecture
Varnish主要執行2個程式,Management程式和Child程式
Management程式:主要實現應用新的配置、編譯VCL、監控varnish、初始化varnish以及提供一個命令列介面等。Management程式會每隔幾秒鐘探測一下Child程式以判斷其是否正常執行,如果在指定的時長內未得到Child程式的迴應,Management將會重啟此Child程式。
Child程式:主要是監聽客戶端請求,管理worker執行緒,建立快取,更新統計計數器和記錄流量
VCL(Varnish Configuration Language)是varnish配置快取策略的工具,擁有它自己獨立的一種程式語言。在策略啟動前,會由Management程式轉換為c程式碼(利用VCC,將VCL轉換成C的編譯器),然後通過gcc編譯器編譯成2進製程式。編譯完成後Management負責將其連線到child程式,可以在varnish執行過程中動態切換快取策略。
shared memory log(共享記憶體日誌)為了與系統的其它部分進行互動,Child程式使用了可以通過檔案系統介面進行訪問的共享記憶體日誌,因此,如果某執行緒需要記錄資訊,其僅需要持有一個鎖,而後向共享記憶體中的某記憶體區域寫入資料,再釋放持有的鎖即可。而為了減少競爭,每個worker執行緒都使用了日誌資料快取。
共享記憶體日誌大小一般為90M,其分為兩部分,前一部分為計數器,後半部分為客戶端請求的資料。varnish提供了多個不同的工具如varnishlog、varnishncsa或varnishstat等來分析共享記憶體日誌中的資訊並能夠以指定的方式進行顯示。
varnishadm和vagent2是管理Management的一個管理介面
varnish處理流程
圖片來自 http://book.varnish-software.com/4.0/chapters/VCL_Basics.html
- vcl_recv函式:在Varnish完成對請求報文的解碼為基本資料結構後第一個要執行的子例程,它通常有四個主要用途:1.修改客戶端資料以減少快取物件差異性;比如刪除URL中的www.等字元;2.基於客戶端資料選用快取策略;比如僅快取特定的URL請求、不快取POST請求等;3.為某web應用程式執行URL重寫規則; 4.挑選合適的後端Web伺服器;
- vcl_hash函式:預設VCL將主機名或IP地址以及請求的URL進行hash
- vcl_hit函式:在快取中找到請求的內容後將自動呼叫該函式
- vcl_pass函式:此函式在進入pass模式時被呼叫,使用者將請求直接傳遞至後端主機。後端主機在應答資料後將應答資料傳送給客戶端,但不進行任何快取,在當前連結下每次都返回最新的內容。
- vcl_miss函式:在快取中沒有找到請求的內容時自動呼叫該方法。此函式可用於判斷是否需要從後端伺服器獲取內容
- vcl_purge函式:移除快取
- vcl_pipe函式:進入pipe模式時,使用者將請求直接傳遞至後端主機,在請求和返回的內容沒有改變的情況下,將不變的內容返回給客戶端,直到這個連結被關閉。
- vcl_backend_fetch函式:可能是被vcl_miss或者vcl_pass呼叫。如果是被vcl_miss函式:呼叫則所獲取的物件會被快取,如果是被vcl_pass呼叫則獲取的物件不會快取
- vcl_deliver函式:將在快取中找到請求的內容傳送給客戶端前呼叫此函式
- vcl_synth函式:建立合成響應,例如個性化定製錯誤訊息,要呼叫此函式
相關文章
- Varnish(二)Varnish4.0安裝與配置
- metaq原理簡介
- HSF原理簡介
- Flutter原理簡介Flutter
- Xposed原理簡介及其精簡化
- ppium簡介及工作原理
- MySQL原理簡介—9.MySQL索引原理MySql索引
- WebSocket原理及技術簡介Web
- Thanos工作原理及元件簡介元件
- 大資料框架原理簡介大資料框架
- 條形碼生成原理介紹及簡介
- 一、程式語言簡介與C++C++
- 一. SpringCloud簡介與微服務架構SpringGCCloud微服務架構
- Kafka簡介、基本原理、執行流程與使用場景Kafka
- Git使用總結(一):簡介與基本操作Git
- 精準化測試原理簡介
- iptables基礎原理和使用簡介
- Go之NSQ簡介,原理和使用Go
- 從提升樹到 XGBoost, 原理簡介
- Varnish(四)重要的一些效能引數
- Systemd簡介與使用
- JQuery簡介與使用jQuery
- HTTP 與 HTTPS 簡介HTTP
- MySQL原理簡介—11.最佳化案例介紹MySql
- 04 . Filebeat簡介原理及配置檔案和一些案例
- tkinter簡介(一)
- 01 . Vue簡介,原理,環境安裝Vue
- el-form中rules的原理簡介ORM
- iOS KVC與KVO簡介iOS
- Hystrix Turbine簡介與使用
- Rancher簡介與安裝
- 棧與佇列簡介佇列
- 【LVS】簡介與說明
- Spark GraphX簡介與教程Spark
- InfluxDB簡介與php用法UXPHP
- PMM--簡介與部署
- python教程(一)·簡介Python
- 一、群集的簡介