什么是varnish

Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。
  Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。
在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括了CPU内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,
因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。
 varnish项目是2006年发布的第一个版本0.9.距今已经四年多了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过varnish开发团队和网友们的辛苦耕耘,现在的varnish已经很健壮。
很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。







 Varnish与Squid的对比

说到Varnish,就不能不提Squid。Squid是一个高性能的代理缓存服务器,它和Varnish相比较有诸多的异同点,下面进行分析。

下面是Varnish与Squid之间的相同点。

都是一个反向代理服务器。

都是开源软件。

下面是它们的不同点,也是Varnish的优点。

Varnish的稳定性很高。两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为Squid需要经常重启。

Varnish访问速度更快。Varnish采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取,而Squid是从硬盘读取缓存数据,因此Varnish在访问速度方面会更快。

Varnish可以支持更多的并发连接。因为Varnish的TCP连接释放要比Squid快,所以在高并发连接情况下可以支持更多的TCP连接。

Varnish可以通过管理端口,使用正则表达式批量清除部分缓存,而Squid做不到。

当然,与传统的Squid相比,Varnish也有缺点。

Varnish在高并发状态下CPU、I/O和内存等资源开销都高于Squid。

Varnish进程一旦挂起、崩溃或者重启,缓存数据都会从内存中完全释放,此时所有请求都会被发送到后端服务器,在高并发情况下,这会给后端服务器造成很大压力


安装varnish
安装准备

查看是否安装以下依赖包
没有则安装
[root@localhost ~]# rpm -q  automake autoconf libtool ncurses-devel libxslt groff pcre-devel pkgconfig
automake-1.9.6-2.3.el5
autoconf-2.59-12
libtool-1.5.22-7.el5_4
ncurses-devel-5.5-24.20060715
ncurses-devel-5.5-24.20060715
libxslt-1.1.17-2.el5_2.2
libxslt-1.1.17-2.el5_2.2
groff-1.18.1.1-11.1
pcre-devel-6.6-6.el5_6.1
pcre-devel-6.6-6.el5_6.1
pkgconfig-0.21-2.el5

useradd -s /sbin/nologin varnish
mkdir -p /varnish/cache
mkdir -p /varnish/log
chown varnish:varnish /varnish/ -Rf


配置varnish
VCL处理流程,以及一些概念

receive状态,请求处理的入口状态,根据vcl规则判断该请求应该pass或pipe还是进入lookup状态
lookup状态,进入此状态后,会在hash表中查找数据,若找到,则进入hit状态,否则进入miss状态,
pass状态,进入后端请求,即进入fetch状态
fetch状态,在fetch状态下,对请求进行后端获取,发送请求,获得数据,进行本地存储
deliver状态,将获取到的数据发送给客户端,然后完成本次请求