Varnish简介
Varnish是一款高性能且开源的反向代理服务器和HTTP加速器,其采用全新的软件体系结构,和现在的硬件体系紧密结合,与传统的Squid相比,varnish具有性能更高,速度更快,管理更加方便等诸多优点。
安装
我们这里只将如何以源码在CentOS上安装,其他方式请参考官方文档
1、下载源代码
1 | git clone git://git.varnish-cache.org/varnish-cache |
2、安装必须的依赖包
1 | yum install libtool automake autoconf groff libedit-devel ncurses-devel pcre-devel pkgconfig python-docutils |
3、编译安装
1 | cd varnish-cache |
4、启动
1 | ./sbin/varnishd -f var/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:8080 |
5、查看日志
1 | bin/varnishlog |
这样就安装好了Varnish,下面就是配置了
配置
Varnish的配置是使用它自定义的VCL语法的,在Varnish启动时,会将配置文件编译为C语言。
内置函数
vcl_recv:用于接收和处理请求;当请求到达并成功接收后被调用,通过判断请求的数据来决定如何处理请求;
vcl_pipe:此函数在进入pipe模式时被调用,用于将请求直接传递至后端主机,并将后端响应原样返回客户端;
vcl_pass:此函数在进入pass模式时被调用,用于将请求直接传递至后端主机,但后端主机的响应并不缓存直接返回客户端;
vcl_hit:在执行 lookup 指令后,在缓存中找到请求的内容后将自动调用该函数;
vcl_miss:在执行 lookup 指令后,在缓存中没有找到请求的内容时自动调用该方法,此函数可用于判断是否需要从后端服务器获取内容;
vcl_hash:在vcl_recv调用后为请求创建一个hash值时,调用此函数;此hash值将作为varnish中搜索缓存对象的key;
vcl_purge:pruge操作执行后调用此函数,可用于构建一个响应;
vcl_deliver:将在缓存中找到请求的内容发送给客户端前调用此方法;
vcl_backend_fetch:向后端主机发送请求前,调用此函数,可修改发往后端的请求;
vcl_backend_response:获得后端主机的响应后,可调用此函数;
vcl_backend_error:当从后端主机获取源文件失败时,调用此函数;
vcl_init:VCL加载时调用此函数,经常用于初始化varnish模块(VMODs)
vcl_fini:当所有请求都离开当前VCL,且当前VCL被弃用时,调用此函数,经常用于清理varnish模块;
变量类型详解
req:The request object,请求到达时可用的变量
bereq:The backend request object,向后端主机请求时可用的变量
beresp:The backend response object,从后端主机获取内容时可用的变量
resp:The HTTP response object,对客户端响应时可用的变量
obj:存储在内存中时对象属性相关的可用的变量
示例
首先VCL文件头必须要写 ‘vcl 4.0’,强制说明这个配置文件是4.0版本使用的。’import directors’是用于代理后端是多机的情况,比如如下配置:
1 | vcl 4.0; |
性能测试
- 使用Varnish,请求流媒体资源,并发20个
1 | ab -n 200 -c 20 http://192.168.1.101:8080/data/ring/20090925/47541/1289369.mp3 |
- 使用Varnish请求流媒体资源,并发30个
1 | ab -n 200 -c 30 http://192.168.1.101:8080/data/ring/20090925/47541/1289369.mp3 |
- 不使用Varnish请求流媒体,并发20个
1 | ab -n 200 -c 20 http://192.168.1.101/1289369.mp3 |
- 不使用Varnish请求流媒体,并发30个
1 | ab -n 200 -c 30 http://192.168.1.101/1289369.mp3 |
可以看出,使用Varnish后,性能有所提升。