201/06/07 M 大众点评缓存策略-varnish实战配置及应用

之前讲了如何编写基本常用的VCL,接下来实现如何对缓存对象的修剪
我们可以随意按照自己的理解去定义后端服务器响应的内容缓存的时长,如果刚定义好,或者在有效期内,后端服务器发生了新版本,新版本立即能够被客户端所获取,避免缓存项当中的某些内容相冲突,或者是缓存项所保留下来的内容不符合布局的一些需求,就需要去手动清理缓存
对varnish来讲,手动清理缓存,有两种
varnish官方有本书,chache 的有效性校验 cache invalidation
在这里插入图片描述在这里插入图片描述
1.可以使用http purge 中的subroutine来定义让哪些缓存对象强制从缓存中移除,用purge,http请求如果能命中,这个缓存就被清除
2.可以使用banning,能够使用内建的ban函数regev()并指明正则表达式模式来清理缓存
在这种方式的坏处就是,只有对应的正则表达式所表示的url被访问到的才会临时清理
3.force cache misses 清理缓存无法命中

purge的使用方法
在这里插入图片描述
默认是支持purge,但是没有定义怎么清理缓存,所以需要自己定义
在这里插入图片描述在收到 用户的修剪请求时,尝试启动修剪账号,用户的请求方法是req.method=purge,要额外第一种非标准方法,叫purge。万一收到purge方法以后该怎么办
就return purge,相当于交给vcl purge。
所以你只要请求用purge方法url,就会被转交给purge方法,因此能够完成缓存对象修剪
把之前定义的curl注释掉

在这里插入图片描述
在这里插入图片描述
现在请求一下看看
现在命中了

在这里插入图片描述
现在认为即便在这个有效期内,也要修剪掉,不让他命中,就使用curl命令发送请求
curl 命令选择一个选项,自己定义请求方法,-X

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次请求就miss了
在这里插入图片描述
purge,发送请求,就是如果缓存能命中,就把缓存删除了
等于映射之前的图

在这里插入图片描述
在这里插入图片描述
如果返回purge,其实就是调用synth,就会合成响应报文,响应给客户端在这里插入图片描述
所以可以使用curl命令来自定义请求方法(但是并不现实天天用curl命令去清理缓存)
所以需要做访问控制,自己可以加一个vcl

在这里插入图片描述
只允许本机或者内网地址
而后在执行purge方法的时候判定,如果是客户端ip不属于purges范围,就返回405,你这个ip是不允许被purge的
现在就可以在配置文件里加上并进行修改了
(如果你的客户端ip不匹配,!取反, 匹配 purges,是之前定义的VCL )

先定义后使用
在这里插入图片描述
在recv有一个内不是函数synt,synth可以直接合成结果响应客户端,可以合成一个错误响应报文的
如果客户端不能匹配purges,就返回405

在这里插入图片描述
再来检查语法
在这里插入图片描述
现在是hit
在这里插入图片描述
现在修剪执行curl
在这里插入图片描述
使用内网地址是可以的
在这里插入图片描述在这里插入图片描述purge一次又miss了在这里插入图片描述
在外网进行purge操作是不被允许的
在这里插入图片描述
在这里插入图片描述
这是配置加一个acl,判定来源地址是否被允许,如果是就返回purge、
,否则就拒绝purge
这是第一种操作,也有第二种操作执行banning
禁用匹配到的缓存项

在这里插入图片描述
foo开头的就拒绝
这个域中的文本类型的数据,就都禁止使用缓存

在这里插入图片描述
在这里插入图片描述
ban命令指定哪个字段field,基于什么方式operation,来匹配什么字就ban掉
在后端服务器先创建文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在假设javascripts文件更新了,原本缓存失效
使用ban指明请求url 匹配以javascript开头的项

在这里插入图片描述
现在就被miss掉了
在这里插入图片描述
像这种清除,都是临时按需清理的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
像这种情节,现在这样也能禁用一类缓存资源在这里插入图片描述
这是一种临时,当然也可以用另外一种长时间的
解决方法=ban
ban()调用ban函数,(放在函数里当参数传)
如果请求的主机=REQ.http.host+请求的url=客户端的url
就执行ban操作

在这里插入图片描述
类似拆解成这样的格式来做的
在这里插入图片描述
请求的主机的地址=ban的地址在这里插入图片描述
这样其实一次只能ban掉一个内容
在这里插入图片描述
要想使用正则表达式模式,就要用命令行工具写
这个是清空缓存

在这里插入图片描述
如果有分一个个域,就要情况一个域的缓存
在这里插入图片描述
风险很大,操作起来一定要谨慎
所以刚才的内容只能对特定的内容进行ban

在这里插入图片描述
在这里插入图片描述
生效,开始请求
在这里插入图片描述
再次请求就miss
在这里插入图片描述
这就是缓存项的两种修剪方式
在这里插入图片描述
varnish基本使用方式就说完了
下面市县varnishi如何代理后端多个主机

在这里插入图片描述
要使用directors功能
加载模块directors import
后面就定义后端的主机,端口,地址

在这里插入图片描述
在这里插入图片描述
虽然叫random,随机,但是也可以有权重,10,5实际上就是2比1的权重
定义好一个组以后,都要在后面的recv中
set一个req.backend.hint 后端的主机要使用round-robin-director

在这里插入图片描述为了看效果,再起一个后端主机
在这里插入图片描述

编辑主页
在这里插入图片描述
在这里插入图片描述
调整接口
在这里插入图片描述
在这里插入图片描述
round.robin轮循的方式(也可以定义权重,12),这样组就定义好了
在这里插入图片描述
不支持权重
在这里插入图片描述
调用
在这里插入图片描述
现在开始load一下
在这里插入图片描述
在这里插入图片描述
现在去ban掉,再去轮循访问一下看看在这里插入图片描述
轮循了
在这里插入图片描述
在这里插入图片描述
使用后端主机,还可以动静分离
如果是.PHP结尾就访问100.7,其他就访问default

在这里插入图片描述
在这里插入图片描述
定义这些以后可以定义成一个组
在这里插入图片描述
现在可以定义如何调用
在这里插入图片描述
还可以加一个默认
在这里插入图片描述
也可以这么写
在这里插入图片描述
对请求内容做hash的
一般hash的是键,但此处hash的 用户请求cokkie

在这里插入图片描述
基于cokkie的合法性,把来自同一session的请求,都发送给同一主机
在这里插入图片描述
后端是appsrv就没必要去hash cookie了
后面加一个就可以给其他内容做hash了

在这里插入图片描述
后端服务器也需要去做健康状态检查,需要probe定义
对什么url发请求,超时时间是多长,
几秒一次进行判断,
基于几次判断
至少有几次成功才能进行判断

在这里插入图片描述
可以使用probe关键字,来定义一个probe
在这里插入图片描述
针对两台服务器做健康性检查,有两种方法
1.inerval 几秒检测一次
timeout 1s超时
window 基于最近多少次判定
threshold 最低多少次成功才算成功的

在这里插入图片描述
也可以外面定义probe,然后直接调用就可以了
在这里插入图片描述在这里插入图片描述
最近8次检查,都正常

在这里插入图片描述宕机一个试试

在这里插入图片描述在这里插入图片描述
只有超过5次就认为是正常的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果想认为定义哪个机器是否健康
在这里插入图片描述
在这里插入图片描述
也可以人工设定成健康状态
在这里插入图片描述
查看帮助,至少知道可以使用sick和healthy
在这里插入图片描述
在这里插入图片描述
refs,表示这个主机被引用多少次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值