Varnish缓存部署方式及原理详解

一、WebCache

   WebCache,web缓存,是一种缓存技术,用于临时存储(缓存)的网页文件,如HTML页面和图像等静态资源(此处不绝对,也可以缓存动态页面,但是存储到本地后也为静态文件),减少带宽以及后端服务器的压力,通常一个WebCache也是一个反向代理软件,既可以通过缓存响应用户的请求,当本地没有缓存时,可以代理用户请求至后端主机。(自己学习总结,由于昨天刚接触varnish,所以有错的地方还请担待)

   WebCache分为正向和反向之分,一般正向WebCache不常用,本文以反向WebCache为主。
   

   WebCache的由来

       由于程序具有局部性,而局部性分为:时间局部性和空间局部性

            (1)时间局部性是指:在单位时间内,大部分用户访问的数据只是热点数据(热点数据指经常被访问的数据)

            (2)空间局部性是指:比如,某新闻网站突然出来一个重大新闻,此新闻会被被反复访问。

   WebCache的新鲜度监测机制:数据都是可变的,所以缓存中的内容要做新鲜度检测

       过期日期

           由于网站是可变的,可能缓存定义的时间在未到达之前,数据就已经发生了改变,这在大部分电商站点上是经常发现的,这个时候我们就不得不对数据做新鲜度检测,其方式分为:

           HTTP/1.0:Expires

               例如:expires:Sat, 20 May 2017 07:49:55 GMT 在具体时间到达之前缓存服务器不会去后端服务器请求,但是会有一个问题,不同地区的时间可能不同

           HTTP/1.1:Cache-Control:max-age

               例如:Cache-Control: max-age=600 为了解决HTTP/1.0中对于新鲜度控制的策略而生,通过相对时间来控制缓存使用期限

       缓存有效性验证机制

           如果原始内容未发生改变,则仅响应首部(不附带body部分),响应码304(Not Modified)

           如果原始内容发生改变,则正常响应,响应码200

           如果原始内容消失,则响应404,此时缓存中的cache object应被删除

       条件式请求首部

            If-Modified-Since:基于请求内容的时间戳作验正,如果后端服务器数据的时间戳未发生改变则继续使用,反之亦然

            If-None-Match:通过Etag来跟后端服务器进行匹配,如果数据的Etag未发生改变,既不匹配,则响应新数据,否则继续使用当前数据

  WebCache的缓存控制机制:

   Cache-Control   = "Cache-Control" ":" 1#cache-directive

   cache-directive = cache-request-directive

        | cache-response-directive

   cache-request-directive =    //请求报文中的缓存指令

          "no-cache"                              //不要缓存的实体,要求现在从WEB服务器去取

        | "no-store" (backup)                     //不要缓存,其中可能包括用户的敏感信息

        | "max-age" "=" delta-seconds             //只接受 Age 值小于 max-age 值,并且没有过期的对象

        | "max-stale" [ "=" delta-seconds ]       //可以接受过去的对象,但是过期时间必须小于 max-stale 值

        | "min-fresh" "=" delta-seconds           //接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象          

        | "only-if-cached"                        //只有当缓存中有副本时,客户端才会获取一份副本

        | cache-extension                  

    cache-response-directive =

          "public"                                //可以用 Cached 内容回应任何用户

        | "private" [ "=" <"> 1#field-name <"> ]  //只能用缓存内容回应先前请求该内容的那个用户

        | "no-cache" [ "=" <"> 1#field-name <"> ] //可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端

        | "no-store"                              //此内容不允许缓存到缓存服务器上,可能包含用户的敏感信息

        | "no-transform"                          //未改变              

        | "max-age" "=" delta-seconds             //本响应包含的对象的过期时间

        | "s-maxage" "=" delta-seconds            //本响应包含的对象的过期时间

        | cache-extension

      常见WebCache软件
   

Name Operating system Forward
               mode
Reverse
               mode
License
Untangle Linux Yes Yes Proprietary
ApplianSys CACHEbox Linux Yes Yes Proprietary
aiScaler Dynamic Cache Control Linux Yes
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值