一、varnish
1. varnish的简介
Varnish是一款高性能、开源的反向代理服务器和缓存服务器。Varnish使用内存缓存文件来减少响应时间和网络带宽消耗。挪威最大的在线报纸Verdens Gang使用3台Varnish代替了原来的12台squid,性能比以前更好。由于Varnish可以通过端口进行管理,使用正则语句做到清除指定缓存的功能,这些squid都做不到。但是varnish在高并发的情况下,资源消耗较高,而且varnish服务进程一旦崩溃,重启,内存中的缓存数据将全部丢失。Varnish与一般服务器软件类似,就是一个web缓存代理服务器,分为master(management)进程和child(woker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程 进行工作,主要包括一些管理线程和很多woker线程
2. varnish与squid的区别
(1)相同点
- 都是一个反向代理服务器
- 都是开源软件
(2)不同点
- varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的机率高于Varnish,因为使用Squid要经常重启。
- Varnish的访问速度更快,所有缓存数据可以直接从内存读取,而squid是从硬盘读取
- Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快。
- Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的。
- squid属于是单进程使用单核CPU,但Varnish是通过fork形式打开多进程来做处理,所以是合理的使用所有核来处理相应的请求。
- varnish进程一旦Hang、Crash或者重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力。
- 在varnish使用中如果单个url的请求通过HA/F5(负载均衡)每次请求不同的varnish服务器中,被请求varnish服务器都会被穿透到后端,而且同样的请求会在多台服务器上缓存,也会造成varnish的缓存的资源浪费,也会造成性能下降。
3. varnish中的配置缓存策略工具vcl
Varnish Configuration Language(VCL)是varnish配置缓存策略的工具,它是一种基于“域”的简单变成语言,它支持有限的算术运算和逻辑运算操作、允许使用正则表达是进行字符串匹配、允许用户使用set自定义变量、支持if判断语句,也有内置的函数和变量等。使用VCL编写的缓存策略通常保存至.vcl文件中,其需要编译成二进制的格式后才能由varnish调用
vcl处理过程:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
准备工作:
(1)虚拟机准备
- 后端服务器server2(安装httpd)----> 172.25.65.2
- 后端服务器server3(安装httpd)----> 172.25.65.3