码迷,mamicode.com
首页 > 其他好文 > 详细

varnish介绍

时间:2019-04-12 12:02:00      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:log   处理过程   种类   过程   请求方法   查询   headers   51cto   流程图   

VCL Varnish Configuration Language (VCL) 是一种动态语言,是varnish配置语言,用来描述请求处理和制定缓存策略。vcl配置内容由manager process 创建的VCC子进程转换成C语言代码,再经由gcc编译成共享对象,最后装载到cacher process中生效。 ? VCL文件被分为多个子程序,不同的子程序在不同的时间里执行,比如一个子程序在接到请求时执行,另一个子程序在接受到后端服务器传送的文件时执行。 ? ? VCL处理流程图

技术图片

处理过程大致分为如下几个步骤
1、Receive状态:请求处理的入口状态,根据VCL规则判断该请求应该是Pass或Pipe或者进入Lookup(本地查询)
?
2、Lookup状态,在缓存中查找用户请求的对象,如果缓存中没有其请求的对象,后续操作很可能会将其请求的对象进行缓存;进入此状态后,会在hash表中查找数据,若找到,则进入Hit(命中)状态,否则进入miss状态
?
3、Pass状态,在此状态下,会进入后端(源服务器)请求,即进入fetch状态,不走缓存
?
4、Fetch状态,在Fetch状态下,对请求,进行后端的获取,发送请求,获得源服务器的数据,并进行本地的存储
?
5、Deliver提供状态,将获取到的数据发送给客户端,然后完成本次请求。
?
注:
Pass:绕过缓存,既不从缓存中查询内容或不将内容存储至缓存中;
?
Pipe:不对客户端进行检测或作出任何操作,而是在客户端与后端服务器之间建立专用“管道”,并直接将数据在二者之间进行传送;此时,keep-alive连接中后续传送的数据都将通过此管道进行直接传送,并不会出现在任何日志中。
?
?
语法
  (1)支持注释  // # /* */
  (2)不支持循环
  (3)sub $name:用于定义子例程
        sub vcl_recv {

        }
  (4)有众多内置的变量,变量的可调用位置与state engine有密切相关性
  (5)支持终止语句,return(action),没有返回值
  (6)"域"专用
  (7)操作符 =,==,!,&&,||
?
?
常用语句
?
  if     else
  set name=value  
  unset name
  req.http.HEADER:调用请求报文中http协议的指定的变量
  req.request:请求方法
?
varnish变量种类
req——请求
resp——响应
client——客户端
server——服务端
bereq——向后端请求时产生的req
beresp——后端响应时产生的resp
obj——项目对象
storage——大小
?
常用变量:
bereq和req:
bereq(req).http.HEADERS: 由varnish发往backend server的请求报文的指定首部;
bereq(req).request:请求方法;
bereq(req).url:   请求路径
bereq(req).proto: 请求协议
bereq(req).backend:指明要调用的后端主机;
?
beresp和resp
                beresp.proto:响应使用的协议
                beresp.status:响应的状态码
                beresp.reason:原因短语;
                beresp.backend.ip:响应的后端ip地址
                beresp.backend.name:响应的后端域名
                beresp.http.HEADER: 从backend server响应的报文的首部;
                beresp.ttl:后端服务器响应的内容的余下的生存时
?
obj
                obj.ttl: 对象的ttl值;
                obj.hits:此对象从缓存中命中的次数;
?
server
                server.ip
                server.hostname
?
?
CDN

varnish介绍

标签:log   处理过程   种类   过程   请求方法   查询   headers   51cto   流程图   

原文地址:https://blog.51cto.com/14158288/2377589

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!