日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

架构师日记——VCL介绍和使用

發(fā)布時(shí)間:2023/12/20 c/c++ 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 架构师日记——VCL介绍和使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

VCL簡(jiǎn)介

  • VCL(Varnish Configuration Language):Varnish配置語(yǔ)言,語(yǔ)法簡(jiǎn)單,功能強(qiáng)大,類似于c,perl。主要用來(lái)配置如何處理請(qǐng)求和內(nèi)容的緩存策略。
  • VCL在執(zhí)行時(shí)會(huì)轉(zhuǎn)換成二進(jìn)制代碼
  • VCL文件被分為多個(gè)子程序,不同的子程序在不同的時(shí)間里執(zhí)行,比如一個(gè)子程序在接到請(qǐng)求時(shí)執(zhí)行,另一個(gè)子程序在接收到后端服務(wù)器傳送的文件時(shí)執(zhí)行
  • 基本語(yǔ)法介紹

  • 用花括號(hào)做界定符,使用分號(hào)表示聲明結(jié)束。注釋用//,#,/* */
  • 賦值(=)、比較(==)、和一些布爾值(!、&&、||),!(取反)等類似c語(yǔ)法
  • 支持正則表達(dá)式,ACL匹配使用~操作,如if(req.uri ~ “abc$”){…},表示請(qǐng)求的uri以abc結(jié)尾
  • 不同于C的地方,反斜杠(\)在VCL沒(méi)有特殊的含義。只是用來(lái)匹配URLs
  • VCL沒(méi)有用戶定義的變量,只能給backend、request、document這些對(duì)象的變量賦值,大部分是手工輸入的,而且給這些變量分配值的時(shí)候,必須有一個(gè)VCL兼容的單位
  • VCL有if,但是沒(méi)有循環(huán)
  • 可以使用set來(lái)給request的header添加值,unset或remove來(lái)刪除某個(gè)header
  • 聲明backend

    可以配置多個(gè)后臺(tái)ip和端口

    backend abc{.host = "127.0.0.1";//ip.port = "8080";//端口.connect_timeout = 1s;//連接超時(shí)時(shí)間.first_byte_timeout = 5s;//等待從backend傳輸過(guò)來(lái)的第一個(gè)字符的時(shí)間.between_bytes_timeout = 2s;//兩個(gè)字符的間隔時(shí)間.max_connections=100;//最大連接數(shù) } backend jkl{.host = "127.0.0.1";.port = "9090"; }

    若只有一個(gè)那不需要聲明導(dǎo)向哪個(gè)backend,配置了多個(gè)backend則需要,如

    sub vci_recv{if(req.request == "GET"){req.backend=abc;} }

    director

    director是backend的邏輯分組或backend的集群。主要有隨機(jī)、循環(huán)和DNS集中director,不同類型的director具有不同的算法來(lái)選擇backend。比如隨機(jī)的director示例如下:

    director b2 random{//隨機(jī)選.retries = 5;{.bakend =abc;//已配置的backend.weigth = 7;//被選中的權(quán)重}{.bakend =jkl;.weigth = 3;} }

    指向director可以這樣配置

    set req.backend = b2;

    隨機(jī)的director又分成三種,分別是randomclienthash,他們采用同樣的隨機(jī)分發(fā)算法,只是種子數(shù)值不同,種子數(shù)分別采用隨機(jī)數(shù)、客戶端id或者是緩存的hash(典型的url)

    1.client director

    你可以通過(guò)設(shè)置VCL變量client.identity來(lái)區(qū)分客戶端,值可以從session cookie或其他相似的值來(lái)獲取

    2.hash director

    默認(rèn)使用URL的hash值,可以通過(guò)req.hash獲取到

    3.round-robin director

    它沒(méi)有什么選項(xiàng)就是一次循環(huán)使用backend,第一個(gè)請(qǐng)求用第一個(gè)backend,第二個(gè)請(qǐng)求使用第二個(gè),如此類推。

    4.dns director

    有兩種不同的方法來(lái)選擇后端,一種是random或者round-robin;另一種是使用.list(list的方式不支持ipv6):

    director directorname dns{.list = {.host_header="www.example.com";.port="80";.connection_timeout = 0.4;"192.168.15.0"/24;"192.168.16.128"/25;}.ttl = 5m;.suffix = "internal.example.net"; }

    這段代碼會(huì)指定384個(gè)后端,都是用80端口及0.4s的連接超時(shí),.list生命中設(shè)置選項(xiàng)必須在IPS的前面。.ttl定義DNSlookups的時(shí)間。

    5.fallback director

    選擇第一個(gè)健康的backend,若先定義的backend沒(méi)有down就選先定義的,實(shí)例:

    director b3 fallback{{.backend = www1;}{.backend = www2;}{.backend = www3;} }

    probe(后端探針)

    探測(cè)后端,確定他們是否健康,返回的狀態(tài)用req.backend.healthy核對(duì):

    backend jkl{.host = "127.0.0.1";.port = "9090";.probe = p1; } probe p1{.url = "/test.jpg";//訪問(wèn)backend的路徑,默認(rèn)是"/".timeout = 0.3s;//定義probe的過(guò)期時(shí)間,默認(rèn)是2s.window = 8;//要檢查后端服務(wù)器的次數(shù),默認(rèn)是8.threshold = 3;//.windos里面要有多少polls成功就認(rèn)為后端是健康的,默認(rèn)是3.initial = 3;//當(dāng)varnish啟動(dòng)的時(shí)候,要確保多少個(gè)probe正常,默認(rèn)是3.internal = 6s;//probe多久檢查一次后端,默認(rèn)是5s.request = "GET / HTTP/1.1""Host:www.abc.com"//設(shè)置詳細(xì)的請(qǐng)求頭,是一些字符串 }

    Acls

    訪問(wèn)控制列表,示例如下

    apl local{"localhost";"192.0.2.0"/24;//匹配主機(jī)名為192.0.2.0的主機(jī)!"192.0.2.23";//不匹配ip為192.0.2.23的主機(jī) }

    匹配示例:

    if(client.ip ~ local){... } if(!client.ip ~ local){... }

    總結(jié)

    以上是生活随笔為你收集整理的架构师日记——VCL介绍和使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。