varnish-阿里云开发者社区

开发者社区> 开发与运维> 正文

varnish

简介:

下面介绍的是varnish缓存

一、缓存基础
1、缓存的时效性
缓存有三种时效性机制,分别是过期清理(purge)、溢出清理(lru)、修改清理。
2、缓存的命中率
页面命中率(页面数量)、字节命中率(页面体积)。
3、数据的缓存位置
私有数据:【浏览器】完成缓存;
公有数据:【反代】上缓存。
4、缓存步骤(6步):

  1. 缓存服务器接收请求;
  2. 缓存服务器解析请求;缓存服务器从http协议首部中提取URL等首部信息;
  3. 查找缓存;
  4. 检查缓存是否有效,若是有效就构建相应的响应报文,并发送给客户端;
  5. 若是缓存无效,就调度到后端server,并返回请求数据,缓存服务器进行缓存后,再发送相应数据给客户端;
  6. 记录日志

二、varnish
1、varnish缓存组织架构:主进程/子进程。
manage进程:主进程,管理子进程,初始化缓存;
cache进程:子进程,多种线程模型。

varnish的配置接口为:vcl。

2、varnish程序环境
配置文件作用:
/etc/varnish/varnish.params:运行参数
/etc/varnish/default.vcl:子线程属性

主要命令:/usr/bin/
varnishd:varnish主程序
varnishadm:命令行接口
varnishtest:测试
varnish_reload_vcl:重载vcl配置文件
varnish.service:管理主进程

3、/usr/bin/varnishd --------------主程序
-a:服务地址(端口),默认127.0.0.1:6081;
-T:管理地址和接口,默认127.0.0.1:6082;
-s:缓存机制,malloc/file/persistent/path/size;
-f:指明vcl配置文件;
-p param=value:运行时参数及其值;
-r:运行时参数为可读。

4、/etc/varnish/varnish.params ----------运行时参数文件
DAEMON_OPTS = '-p param1=value1 -p ...'
thread_pool_min=
thread_pool_max=
thread_pool_timeout= //线程销毁的等待时间

 线程模型:
 cache-worker:处理请求
 cache-main:启动cache功能
 ban lurker:修剪
 acceptor:新连接请求
 epool/kqueue:线程池管理
 expire:清理过期缓存
 backend poll:后端服务器健康检测

5、varnishadm命令
常用选项:
-S:命令行工具
-T:管理地址和管理端口

varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

varnish>
vcl.list
vcl.load conf1 default.vcl //装载并编译acl文件
vcl.use conf1 //激活配置文件
vcl.list 
vcl.discard //删除配置文件
param.show //显示运行时参数
param.set //设置运行时参数
storage.list //缓存存储相关
backend.list //后端服务器列表

6、vcl引擎(vcl不支持循环)
vcl_recv
vcl_hash
vcl_hit
vcl_deliver
vcl_pass
vcl_miss
vcl_backend_fetch
vcl_backend_error
vcl_backend_response
vcl_purge //修剪
vcl_pipe
vcl_synth

特殊引擎:
vcl_init:处理请求前执行的vcl代码,初始化vmods;
vcl_fini:结束时使用,清理vmods。

vcl内建变量:req., bereq., resp., beresp., obj.*
req.url <--> bereq.url
req.request <--> bereq.request
req.proto <--> bereq.proto
resp.status <--> beresp.status

7、缓存特定类型的资源,长时间不变的资源。
varnish调度到特定的资源上时,由于资源比较稳定,可以在varnish缓存调度器上进行缓存资源,以便其他客户端进行访问。对于匹配的bereq.url,进行unset beresp.http.Set-Cookie,并设置beresp.ttl。

8、purge
对于缓存修剪,在vcl_recv里面进行修剪匹配操作,使用大量的if语句进行修剪条件,其中可以使用req.method、client.ip等,可以使用return(synth(...))进行修改执行。

9、backend
对于varnish后端主机,我用backend {...}来进行设置,其中需要设置IP和端口号,也要设置probe{...}检测机制,对于检测机制来说,可以是动态的,也可以是静态的,还可以是图片等特殊资源,还可以进行健康状态检查,具体看怎么设置url。

10、varnish日志

  1. varnishstat命令
    功能:varnish缓存状态
    常用选项:
    -1:批量显示所有信息
    -1 -f filed_name:特定属性信息
  2. varnishstop命令
    功能: 
    -1:批量显示
    -i:显示指定的标签的信息
    -I:显示指定字段的信息
    -x:排除在外(指定的标签)
    -X:排除所有匹配到的内容
  3. varnishlog命令
    功能:显示相关日志
  4. varnishncsa命令
    功能:显示相关日志,易读格式

11、varnish的内建函数
regsub:替换匹配到的第一个
regsuball:替换所有匹配的
ban:修剪所有匹配值
hash_data:指明做哈希的数据
synthetic:执行修剪

12、varnish配置总结

  1. 在varnish配置段中,需要先导入directors,类似Python语言的模块调用需要导入一样,后端配置都是在此基础上进行的。
  2. 然后是使用probe{...}定义检测机制,以便在后面定义backend时进行调用,其中可以设置URL、时间相关、次数相关内容。
  3. 接下来就是写后端backend{...},在backend字段中,需要定义后端主机和检测机制。
  4. 然后使用vcl_init{...}创建后端主机组,在主机组中设置具体的调度算法,具体怎么调度。
  5. 然后就是定义访问规则和引擎的使用,利用vcl_recv{...}来定义,在里面我们利用不同的if语句来进行不同的后端server匹配,并根据引擎进行相关服务器调度。


     本文转自little_ding 51CTO博客,原文链接:http://blog.51cto.com/12496428/2052381,如需转载请自行联系原作者





版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章