阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Varnish的Backend storage的管理

122次阅读
没有评论

共计 6755 个字符,预计需要花费 17 分钟才能阅读完成。

Varnish 缓存服务器是工作在代理模式的。意思是说,由 varnish 接收用户的请求,把用户请求资源的 URL 做“哈唏”编码后,做为“键”与缓存条目中的键做比对:

1、如果,缓存条目有一模一样的键的话,那么该键对应的值就是用户请求 URL 对应的资源,

varnish 把该键对应的值取出来,响应给客户端。

2、如果,缓存条目没有与之匹配的键的话,那么 varnish 就向后端服务器 (backup server) 发送请求。当后端服务器 (backup server) 构建完响应报文响应 varnish,varnish 服务器收到后端服务器 (backup server) 的响应后,会把:用户请求的 URL 做“哈唏”编码后,作为键(key),该 URL 对应的资源作为值(value),保存在 varnish 的缓存中。

这就是所谓的,插入缓存条目。varnish 的缓存条目是:key:value 方式存在的。

然后,varnish 再构建响应报文响应客户端。

这就是,varnish 缓存服务器的正常工作流程。

如下图所示:

Varnish 的 Backend storage 的管理

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

Varnish Cache 的架构笔记 http://www.linuxidc.com/Linux/2013-10/91016.htm

CentOS 5.8 下 Varnish-2.1.5 的安装配置 http://www.linuxidc.com/Linux/2013-09/89916.htm

RedHat 脚本改用 CentOS 源更新安装 Nginx、PHP 5.3、Varnish http://www.linuxidc.com/Linux/2012-07/65801.htm

利用 Varnish 构建 Cache 服务器笔记 http://www.linuxidc.com/Linux/2012-07/65234.htm

缓存服务 Varnish 安装配置 http://www.linuxidc.com/Linux/2012-07/65228.htm

Varnish 编译安装所需准备 http://www.linuxidc.com/Linux/2012-07/65230.htm

Linux 下 Varnish 缓存的配置优化 http://www.linuxidc.com/Linux/2012-03/56435.htm

那么如何实现 varnish 缓存的管理呢?

1、varnish 接收用户请求后,是如何根据用户请求的报文来决定是否查找缓存的呢?

由上图所知。当 varnish 服务器接收到用户请求后,分析用户请求的 URL 是否符合缓存标准,再查找缓存。这样是为了避免花费在与缓存条目比对的时间。如果,缓存条目较多的话,做缓存比对也是需要很长时间的。varnish 通过如下方式,控制那些 URL 可以查找缓存的:

varnish 在 vcl_recv 状态引擎定义策略,怎么样处理用户的请求的。如:varnish 处理的客户端请求的标准、如果判断是否查找缓存的。

sub vcl_recv {
    # varnish 在 vcl_recv 状态引擎定义的策略来控制,varnish 服务器只处理指定 http 协议请求资源的方法,的 URL
  if (req.request != “GET” &&
      req.request != “HEAD” &&
      req.request != “PUT” &&
      req.request != “POST” &&
      req.request != “TRACE” &&\
      req.request != “OPTIONS” &&
      req.request != “DELETE”) {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);  —–> 用户请求的访问的服务虽然是:tcp/80 但是,varnish 不处理除了,GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE 请求资源的方法。直接让该请求把该请求交给 backup server.
    }
 
    # 再使用下述策略来过滤用户请求资源时所使用的方法;判断用户请求资源时使用的方法不是:GET、HEAD 就绕过查找缓存的操作
    if (req.request != “GET” && req.request != “HEAD”) {
        /* We only deal with GET and HEAD by default */
        return (pass);  —–> 绕过查找缓存操作,varnish 直接向 backup server 请求资源
    }
    # 使用 vcl_recv 状态引擎判断用户的请求,都不符合上述:if 条件。那么该用户请求资源所使用的方法一定是:GET 或 HEAD。但是如果用户访问的是资源,需要通过口令认证
    # 才可以访问的。用户请求该资源使用的也是 ”GET” 方法。该用户请求的 URL 是不需要查找缓存的。
    if (req.http.Authorization || req.http.Cookie) {
      /* Not cacheable by default */
        return (pass);  —–> 绕过查找缓存操作,varnish 直接向 backup server 请求资源
    }
 
    return (lookup);  ——> 查找缓存
}

说明:

    varnish 有很多内置变量保存了,http 协议报文的信息。通过使用 if 判断这些信息,来控制 varnish 是如何使用缓存的。

    如:
req.url            ——> 记录用户请求的 URL

req.request        ——-> 记录了用户请求资源使用的方法

req.http.HEADER    ——-> 记录了用户请求报文的首部。该变量是可写的。如:req.http.hostreq.restarts          ——->  请求被重启的次数

server.ip            ——-> varnish 的 IP 地址

server.port          ——-> varnish 监听的端口

server.hostname      ——-> 服务器的主机名

client.ip            ——-> 客户端 IP

req.backend          ——-> 如果,未从缓存中命中。该请求分调度到后端的那个服务器。

例:

  当用户访问指定页面时,禁止查询缓存

    sub vcl_recv {

        …

        if (req.url ~ “/images/a.jpg$”) {

            return (pass);

        }

 

        return (lookup);

    }

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-10/107616p2.htm

2、当缓存没有命中 (cache miss) 如何控制 varnish 向缓存中插入缓存条目时,该缓存条目的过期时长呢?

使用 varnish  缓存服务器提供的:vcl_fetch 状态引擎来控制是否向缓存中插入缓存条目的。

如:

sub vcl_recv {

      ….

          if (req.request == “GET” && req.request ~ “\.png$”) {

          set beresp.ttl = 10s;

      }

      ….

}

3、如何修剪 (删除) 缓存条目呢?

使用 varnish 提供 purge 指令来清除不需要的缓存

如:

(1)、为了安全,对操作清除缓存条目的指令的用户做限制

只允许下述用户修剪缓存条目

  acl purgers {

  “127.0.0.1”;

  “172.16.13.0”/24;

}

(2)、在 vcl_recv 状态引擎,放行 purge 请求方法查询缓存

sub vcl_recv {

。。。

 if (req.request == “PURGE”) {———-> 开放用户请求资源使用 purgers 方法,

    if (client.ip !~ purgers) {——> 检测发起 PURGE 方法的用户来源,只允许属于 purgers 的用户的请求查询缓存

          error 405 “Method not allowed”;

      }

          return (lookup);  ——–> 查询缓存

  }

 

}

(3)、当缓存命中 (cache hit) 就执行 varnish 的 purge 清除 (修剪) 缓存条目的指令

sub vcl_hit {

    if (req.request == “PURGE”) {

        purge; ———-> 执行 varnish 修改缓存的指令

        error 200 “Purged”;  —-> 合成状态码,和“原因短语”

    }

    return (deliver);

 }

(4)、使用【curl】指定使用 PURGE 方法访问指定的资源,实现缓存修剪

如:

curl -X PURGE http://172.16.13.1/index.html

说明:

4、定义缓存大小;

[root@haproxy2 ~]# vim /etc/sysconfig/varnish

VARNISH_STORAGE_SIZE=64M  —-> 定义缓存大小

VARNISH_STORAGE=”malloc,${VARNISH_STORAGE_SIZE}” —> 明确指定 varnish 使用内存做为缓存。

Varnish 的详细介绍:请点这里
Varnish 的下载地址:请点这里

Varnish 缓存服务器是工作在代理模式的。意思是说,由 varnish 接收用户的请求,把用户请求资源的 URL 做“哈唏”编码后,做为“键”与缓存条目中的键做比对:

1、如果,缓存条目有一模一样的键的话,那么该键对应的值就是用户请求 URL 对应的资源,

varnish 把该键对应的值取出来,响应给客户端。

2、如果,缓存条目没有与之匹配的键的话,那么 varnish 就向后端服务器 (backup server) 发送请求。当后端服务器 (backup server) 构建完响应报文响应 varnish,varnish 服务器收到后端服务器 (backup server) 的响应后,会把:用户请求的 URL 做“哈唏”编码后,作为键(key),该 URL 对应的资源作为值(value),保存在 varnish 的缓存中。

这就是所谓的,插入缓存条目。varnish 的缓存条目是:key:value 方式存在的。

然后,varnish 再构建响应报文响应客户端。

这就是,varnish 缓存服务器的正常工作流程。

如下图所示:

Varnish 的 Backend storage 的管理

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

Varnish Cache 的架构笔记 http://www.linuxidc.com/Linux/2013-10/91016.htm

CentOS 5.8 下 Varnish-2.1.5 的安装配置 http://www.linuxidc.com/Linux/2013-09/89916.htm

RedHat 脚本改用 CentOS 源更新安装 Nginx、PHP 5.3、Varnish http://www.linuxidc.com/Linux/2012-07/65801.htm

利用 Varnish 构建 Cache 服务器笔记 http://www.linuxidc.com/Linux/2012-07/65234.htm

缓存服务 Varnish 安装配置 http://www.linuxidc.com/Linux/2012-07/65228.htm

Varnish 编译安装所需准备 http://www.linuxidc.com/Linux/2012-07/65230.htm

Linux 下 Varnish 缓存的配置优化 http://www.linuxidc.com/Linux/2012-03/56435.htm

那么如何实现 varnish 缓存的管理呢?

1、varnish 接收用户请求后,是如何根据用户请求的报文来决定是否查找缓存的呢?

由上图所知。当 varnish 服务器接收到用户请求后,分析用户请求的 URL 是否符合缓存标准,再查找缓存。这样是为了避免花费在与缓存条目比对的时间。如果,缓存条目较多的话,做缓存比对也是需要很长时间的。varnish 通过如下方式,控制那些 URL 可以查找缓存的:

varnish 在 vcl_recv 状态引擎定义策略,怎么样处理用户的请求的。如:varnish 处理的客户端请求的标准、如果判断是否查找缓存的。

sub vcl_recv {
    # varnish 在 vcl_recv 状态引擎定义的策略来控制,varnish 服务器只处理指定 http 协议请求资源的方法,的 URL
  if (req.request != “GET” &&
      req.request != “HEAD” &&
      req.request != “PUT” &&
      req.request != “POST” &&
      req.request != “TRACE” &&\
      req.request != “OPTIONS” &&
      req.request != “DELETE”) {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);  —–> 用户请求的访问的服务虽然是:tcp/80 但是,varnish 不处理除了,GET、HEAD、PUT、POST、TRACE、OPTIONS、DELETE 请求资源的方法。直接让该请求把该请求交给 backup server.
    }
 
    # 再使用下述策略来过滤用户请求资源时所使用的方法;判断用户请求资源时使用的方法不是:GET、HEAD 就绕过查找缓存的操作
    if (req.request != “GET” && req.request != “HEAD”) {
        /* We only deal with GET and HEAD by default */
        return (pass);  —–> 绕过查找缓存操作,varnish 直接向 backup server 请求资源
    }
    # 使用 vcl_recv 状态引擎判断用户的请求,都不符合上述:if 条件。那么该用户请求资源所使用的方法一定是:GET 或 HEAD。但是如果用户访问的是资源,需要通过口令认证
    # 才可以访问的。用户请求该资源使用的也是 ”GET” 方法。该用户请求的 URL 是不需要查找缓存的。
    if (req.http.Authorization || req.http.Cookie) {
      /* Not cacheable by default */
        return (pass);  —–> 绕过查找缓存操作,varnish 直接向 backup server 请求资源
    }
 
    return (lookup);  ——> 查找缓存
}

说明:

    varnish 有很多内置变量保存了,http 协议报文的信息。通过使用 if 判断这些信息,来控制 varnish 是如何使用缓存的。

    如:
req.url            ——> 记录用户请求的 URL

req.request        ——-> 记录了用户请求资源使用的方法

req.http.HEADER    ——-> 记录了用户请求报文的首部。该变量是可写的。如:req.http.hostreq.restarts          ——->  请求被重启的次数

server.ip            ——-> varnish 的 IP 地址

server.port          ——-> varnish 监听的端口

server.hostname      ——-> 服务器的主机名

client.ip            ——-> 客户端 IP

req.backend          ——-> 如果,未从缓存中命中。该请求分调度到后端的那个服务器。

例:

  当用户访问指定页面时,禁止查询缓存

    sub vcl_recv {

        …

        if (req.url ~ “/images/a.jpg$”) {

            return (pass);

        }

 

        return (lookup);

    }

更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2014-10/107616p2.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计6755字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中