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安裝與配置
- GoldenGate的簡介與複製原理Go
- Flutter原理簡介Flutter
- metaq原理簡介
- HSF原理簡介
- Turbo碼原理簡介
- Spring原理簡介Spring
- RxJava簡介與入門(一)RxJava
- Xposed原理簡介及其精簡化
- ppium簡介及工作原理
- MapReduce工作原理流程簡介
- HttpSession工作原理簡介HTTPSession
- IOS中 Block簡介與用法(一)iOSBloC
- OpenStack設計與實現(二)Libvirt簡介與實現原理
- WebSocket原理及技術簡介Web
- Thanos工作原理及元件簡介元件
- 大資料框架原理簡介大資料框架
- android IPC及原理簡介Android
- 視訊編碼原理簡介
- Akka系列(一):Akka簡介與Actor模型模型
- 一、程式語言簡介與C++C++
- Kafka簡介、基本原理、執行流程與使用場景Kafka
- Git使用總結(一):簡介與基本操作Git
- 一. SpringCloud簡介與微服務架構SpringGCCloud微服務架構
- Go之NSQ簡介,原理和使用Go
- iptables基礎原理和使用簡介
- 瀏覽器的渲染原理簡介瀏覽器
- 喇叭的基本發音原理簡介
- FastDFS分散式儲存原理簡介AST分散式
- 精準化測試原理簡介
- Systemd簡介與使用
- JQuery簡介與使用jQuery
- VBS與JS簡介JS
- HBA與lun簡介
- RubyStack now with Rails 3.2.7 and VarnishAI
- 04 . Filebeat簡介原理及配置檔案和一些案例
- tkinter簡介(一)
- datapump簡介(一)