web缓存是对网页文档的临时缓存的信息技术,web缓存能有效降低带宽使用量和服务器负载,提高用户体验。为什么需要缓存呢?经验研究发现程序的运行具有两个方面的局部性特征:
根据局部性特征,将访问过的资源IO或加载到高速存储上,不再从源位置加载;另外把其周边的数据也加载到高速存储中,加速资源的访问。缓存就是使用了高速的设备和良好结构设计加速资源访问速度。
web缓存加速器常常应用的于调度器之后,实际服务器或其他代理服务器之前,接受用户请求,命中后还需要检测缓存的可用性,如果可用则构建相应报文会应客户端,如果没有命中或缓存不可用,则自己做为反代服务器请求真实服务器端,根据设置,将返回结果缓存或不缓存,同样将请求返回给客户端。所以varnish同时也是一款web反向代理服务器。
web缓存控制机制主要是依靠http请求报文首部控制的,如http/1.0中引入了Exppires报文首部,它确认了一个过期时间,缓存过期意义是超过了缓存时间那么请求被转发到真实服务器去请求,并在此缓存;还有http/1.1中引入了Cache-Control系列报文首部,它们有如下内容:
If-Modified-Since:基于原始内容的最近一次修改的时间戳进行判断文件是否已更新;
If-Unmodified-Since:基于原始内容的最近一次修改的时间戳进行判断文件是否未更新;
有可能有些内容,刷新时间非常短,缓存基于时间戳是无效的,这时基于ETag,内容校验码,再查看其是否匹配。基于Etag验证。
(1)如果原始内容未改变,则仅响应首部(不用附带body部分);响应码为304(NotModified);
varnish安装包位于epel源中,要配置YUM源包含YUM源,安装好后看它安装后的文件:
/etc/varnish/secret#服务端和varnishadm命令行的预共享密钥文件
可以从其服务配置文件看出,文件中的每个名字为其配置宏变量名称,其中最后的DAEMON指定了varnish可以用-pname=value格式指定多个运行时配置选项。
VCL能够让用户定义缓存策略,通过Manager进程分析转化为C代码,VCL编译器嗲用C编译器编译其为二进制代码,连接至child进程生效。VCL其定义策略方式主要是通过varinish附加在varnish内部的几个所谓的缓存处理进程实现。
VCL存在多个状态引擎,状态之间存在相关性,但彼此间相互隔离;每个引擎使用return(x)来退出当前状态,转入下一状态;