缓存服务器
缓存指的是将需要频繁访问的网络内容存放在离用户较近、访问速度更快的系统中,以提高内容访问速度的一种技术。缓存服务器就是存放频繁访问内容的服务器。
缓存提供了比将访问对象放在Internet Web服务器上更好的方法,它将需要频繁访问的Web页面和对象保存在离用户更近的系统中,当再次访问这些对象的时候加快了速度。
缓存服务器原理
Web缓存服务器的应用模式主要是正向代理和反向代理。
正向代理(Proxy)模式是代理网络用户访问internet,客户端将本来要直接发送到internet上源服务器的连接请求发送给代理服务器处理。正向代理的目的是加速用户在使用浏览器访问Internet时的请求响应时间,并提高广域网线路的利用率。正向代理浏览器无需和该站点建立联系,只访问到Web缓存即可。通过正向代理,大大提高了后续用户的访问速度,使他们无需再穿越Internet,只要从本地Web缓存就可以获取所需要的信息,避免了带宽问题,同时可以大量减少重复请求在网络上的传输,从而降低网络流量,节省资费。
反向代理(Reverse Proxy)模式是针对Web服务器加速功能的,在该模式中,缓存服务器放置在web应用服务器的前面,当用户访问web应用服务器的时候,首先经过缓存服务器,并将用户的请求和应用服务器应答的内容写入缓存服务器中,从而为后续用户的访问提供更快的响应。
varnish简介
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。
Varnish的一些特点:
*基于内存进行缓存,重启后数据将消失;
*利用虚拟内存方式,I/O性能好;
*支持设置0~60秒精确缓存时间;
*VCL 配置管理比较灵活;
*32位机器上缓存文件大小为最大2GB;
*具有强大的管理功能;
*状态机设计巧妙,结构清晰;
*利用二叉堆管理缓存文件,可达到积极删除目的;
varnish的体系结构
varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。
管理进程:编译VCL并应用新配置;监控vanish;初始化varnish;CLI接口;
Child/cache:
Acceptor:接收新的连接请求;
worker threads:处理用户请求;
Expiry:清理缓存中的过期对象;
日志:Shared Memory Log,共享内存日志大小默认一般为90MB,分为两部分,前一部分为计数器,后一部分请求相关的数据;
vcl: Varnish Configuration Language
缓存策略配置接口;
基于“域”的简单编程语言;
内存分配和回收:
malloc(), free()
varnish如何存储缓存对象:
file: 单个文件;不支持持久机制;
malloc: 内存;
persistent:基于文件的持久存储;
1、varnish工作原理
客户端请求到达varnish代理,child线程中的accept接收下请求进程,交给worker threads处理,worker threads先去object expiry找缓存,没找到就去上游服务器backend lcatinon找到资源,返回varnish代理,查看是否符合缓存规则,符合则缓存,不符合则直接返回给客户端
2、缓存分类
代理缓存:客户端请求代理,先去找缓存,缓存没有,代理会去上游服务器找到资源,并缓存在代理,然后返回给客户端
旁路缓存:客户端去缓存找缓存,缓存没命中返回客户端,客户端去上游服务器找到资源返回到本地,然后再把资源缓存到缓存3、memcache适用的场景
memcache的缺点:不能适应实时更新,如果实时更新,缓存不命中,命中率低。
memcache支持分布式缓存,有mysql主从就不需要memcache,memcache适合多台mysql集群环境,此时直接到mysql缓存取查询性能较好
4、varnish各状态引擎的功用:
vcl_recv:实现安全策略,仅处理可以识别http方法,且只缓存get和head的方法,不缓存用户特有的数据(根据客户端的请求作出的缓存策略)
vcl_fetch:根据服务端的响应作出的策略缓存
vcl_pipe: 用于将请求直接发往后端主机;
vcl_hash: 自定义hash生成时的数据来源
vcl_pass: 用于将请求直接传递至后端主机;
vcl_hit: 从缓存中查找到缓存对象时要执行的操作;
vcl_miss: 从缓存中款查找到缓存对象时要执行的操作;
vcl_deliver: 将用户请求的内容响应给客户端时用到的方法;
vcl_error: 在varnish端合成错误响应时的缓存策略;
缓存处理的步骤:
接收请求 --> 解析请求 (提取请求的URL及各种首部)--> 查询缓存 --> 新鲜度检测 --> 创建响应报文 --> 发送响应 --> 记录日志
新鲜度检测机制:
过期日期:
HTTP/1.0 Expires
Expires:Thu, 04 Jun 2015 23:38:18 GMT
HTTP/1.1 Cache-Control: max-age
Cache-Control:max-age=600
有效性再验正:revalidate
如果原始内容未改变,则仅响应首部(不附带body部分),响应码304 (Not Modified)
如果原始内容发生改变,则正常响应,响应码200;
如果原始内容消失,则响应404,此时缓存中的cache object也应该被删除;
条件式请求首部:
If-Modified-Since:基于请求内容的时间戳作验正;
If-Unmodified-Since
If-Match:
If-None-Match:
Etag: faiy89345
varnish规则编写之VCL
vcl: Varnish Configuration Language
缓存策略配置接口;
基于“域”的简单编程语言;