varnish初识

缓存服务器

缓存指的是将需要频繁访问的网络内容存放在离用户较近、访问速度更快的系统中,以提高内容访问速度的一种技术。缓存服务器就是存放频繁访问内容的服务器。

缓存提供了比将访问对象放在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的体系结构

wKioL1dFoyjQi2t4AAFVdtsG1VY902.jpg

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

    缓存策略配置接口;

    基于“域”的简单编程语言;



本文出自 “我的学习笔记” 博客,请务必保留此出处http://zhaoyongtao.blog.51cto.com/10955972/1783121

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章