首页 > CentOS 6.3 64bit上测试ATS 5.3.0中的正则刷新插件regex_revalidate

CentOS 6.3 64bit上测试ATS 5.3.0中的正则刷新插件regex_revalidate

注意到ATS源码目录plugin/experimental/下面有regex_revalidate插件目录,我们在编译时添加--enable-experimental-plugins配置项就可以将其编译安装到动态库安装目录/libexec/trafficserver中去。如果是ATS 4.x版本中没有源码的话,我们需要先将regex_revalidate单独复制出来,利用tsxs编译出动态库,并安装到动态库安装目录中去就可以,这里不再阐述。这里主要谈如何使用该插件实现目录文件的正则刷新。

一、如何配置?

以刷新凤凰网某个域名下面的资源为例,在plugin.config中添加一行

regex_revalidate.so -c rr.config -l regex_revalidate.log

将配置规则rr.config放入配置文件目录/opt/ats/etc/trafficserver下面(假设ats安装prefix为/opt/ats),其内容如下:

http://y2.ifengimg.com/   1432650630

该配置文件中每行表示一个正则刷新的目录,后面是过期的时间戳。从当前时间到过期时间这段时间内,正则匹配上上面某行配置的url将不会缓存,而是直接回源验证再发送回源响应。

过期时间戳的计算采用下面的方法,在命令行输入

date -d "20150526 22:30:30" +%s



得到设定的时间戳。这里暂且设置过期时间是当前时间的一天之后的时间戳就可以了,根据业务需求,你也可以适当修改。

如果超过过期时间戳,相应的配置行将从内存中删除,该行配置也会失效。必要时请及时刷新配置文件。

-l选项给出了日志文件名,它默认会存放在/opt/ats/var/log/trafficserver/regex_revalidate.log中,因为它调用的日志文件接口是TSTextLogObjectCreate(),和其它插件是一样的。

二、如何开启插件日志?

在plugin.config中配置时指定-l参数就可以,写日志的地方只有在list_config中的TSTextLogObjectWrite(),其他地方都是使用的TSDebug函数,要查找这部分的日志是在records.config中的配置。

CONFIG proxy.config.diags.debug.enabled INT 1

CONFIG proxy.config.diags.debug.tags STRING regex_revalidate.*

然后就在traffic.out中看到打印日志信息了。





三、测试方法:

使用wget来进行ATS本机测试

直接回源

wget -SO /dev/null "http://y2.ifengimg.com/xingzhao/JS/otherCouplet.js"

wget -SO /dev/null "http://y2.ifengimg.com/mappa/2015/05/06/e8a0212acf42d11e33338373b83b92e0.swf"



使用代理刷新

wget -SO /dev/null -e 'http_proxy=127.0.0.1:8081' "http://y2.ifengimg.com/xingzhao/JS/otherCouplet.js"

wget -SO /dev/null -e 'http_proxy=127.0.0.1:8081' "http://y2.ifengimg.com/mappa/2015/05/06/e8a0212acf42d11e33338373b83b92e0.swf"

对上面的url反复执行多次,我们只能得到缓存的状态是[cMsSfW]或是[cMsSf ],也就是响应并不会缓存,它只会在指定的过期时间内每次都回源。





作为对比,我们测试下面的url

wget -SO /dev/null -e 'http_proxy=127.0.0.1:8081' "http://y1.ifengimg.com/auto/image/2015/0416/023115190.jpg"

我们发现它并不受影响,响应会缓存,缓存的状态从[cMsSfW]=>[cHs f ]=>[cRs f ]





同时查看插件日志:







查看访问日志access.log中发现同一个请求并不会缓存,都会每次回源请求,这是我们需要的结果



但是不在正则刷新范围的url却可以正常缓存

四、测试中出现的问题

使用wget测试时,我发现ATS会发生段错误并重启,traffic_crashlog给出的部分崩溃日志如下:

FATAL: HttpTransact.cc:391: failed assert `s->pending_work == NULL`



这个bug已经得到ATS官方修复,参见JIRA

https://issues.apache.org/jira/browse/TS-3455

五、Patch之后继续测试

考虑到ats 6.1.1目前还是不稳定,我决定仍然在ats 5.3.2上做path,主要是修改3个地方,都在proxy/http/HttpTransact.cc中,截图如下:





手动修改后,直接安装,继续使用上面的url测试,发现首次刷新后,会缓存新数据,以后直接命中。由于我这里举例的源站文件内容没有改变,每次会返回206,但是正常情况下会返回200





从traffic.out中可以看到

Forced revalidate - http://y2.ifengimg.com/xingzhao/JS/otherCouplet.js

以自己可以修改的网站测试为例,我们发现对缓存的内存执行强制刷新的行为是这样的,对正则匹配上的资源,在缓存中HIT_FRESH的情况下,并且其Date时间戳在规则添加时间戳之前,执行强制刷新,向源站发送304查询,如果源站内容没有变,还是返回旧的缓存内容,否则,返回更新后的内容,但是ats的缓存响应状态码仍然是[cSsSfU],不同的是文件内容有变化。

下面是刷新前后效果对比图,刷新只会执行一次,以后都从缓存读。即使匹配上,对刷新规则之后缓存的内容没有作用,对未缓存的规则也没有作用。





注意文件长度的变化。

备注:本文得到参考文献的启发,特别感谢4399运维军团等的无私分享。

参考文献

[1].http://ju.outofmemory.cn/entry/89153

[2].http://qingchunranzhi.blog.163.com/blog/static/23728612020153174434608

更多相关:

  • (给DotNet加星标,提升.Net技能)转自:HueiFengcnblogs.com/yyfh/p/12361255.html前言本章将介绍客户端缓存将介绍浏览器缓存和服务端缓存,使用浏览器缓存将减少对web服务器的请求次数,同时可以提升性能,避免重复的运算浪费。ASP.NET Core对于HTTP缓存分为两种:客户端(浏览器缓...

  • 事先说明 标题说是“坑”,并没有说是“bug”,也就是多半是玩的姿势不对。 线上问题 我司(lecloud)目前线上大小文件都是使用的ATS 6.2.1版本,昨天运维反馈有文件超过缓存时间并不回源刷新,截图如下: 现象就是:age超过max-age了,过期了不更新! 另外需要说的一点就是,源站是可以正常回源的。 复...

  • 将追加的主题 内存常驻副本(resident alternates)缓存对象刷新(object refresh) 缓存一致性(Cache Consistency) ATS缓存是完全一致性的,除非你不小心踢掉电源,让ATS突然关机。如果要禁用硬盘驱动器自身的缓存,你需要使用下面的命令 hdparm -W0 缓存系统会校验可用...

  • ATS名词术语 副本(alternate) 缓存对象(cache object)的一种变体,最初创建该术语是为了处理HTTP协议中的VARY机制(RFC2616#sec14.44),现在多用于其它的目的。一个对象的所有副本必须以某种方式等价,也就是说,它们是同一个流的等价形式,最常用的一个例子就是,一个流既有普通版本也有压缩版本。...

  • 该博文翻译自参考文献[1] parent.config parent.config文件识别用在缓存分级中的父代理,用这个文件去执行下面的配置: 搭建父分级缓存,兼容多父级缓存和父级缓存故障转移配置指定的URL请求避开父代理缓存 仅当父缓存选项开启后,ATS才能使用parent.config文件。 当你修改parent.conf...

  • ng g s services/http  app.module.ts ... @NgModule({declarations: [...],imports: [...HttpClientModule,//这个很重紧要,没有就会报错],providers: [],bootstrap: [AppComponent] }) expor...

  • set-misc-nginx-module模块是标准的HttpRewriteModule指令的扩展,提供更多的功能,如URI转义与非转义、JSON引述、Hexadecimal/MD5/SHA1/Base32/Base64编码与解码、随机数等等。在后面的应用中,都将会接触使用到这个模块的。该模块是由章亦春先生开发的,他开发的其他模块应用...

  • 该源码包是MySQL-python-1.2.4b4.tar.gz 从2013-06-28以来一直没有更新,注意该网站可以区分访问的终端类型是Windows还是Linux之类的,从而返回的源码包格式不一样。 在CentOS上的安装方法是 http://www.cnblogs.com/jackluo/p/3559978.html...

  • ATS默认提供了对Referer头的http request的防盗链功能,主要应用于图片,对视频等会使用级别更高的防盗链功能,比如事先约定好key,采用md5或HMAC-Sha1算法加密等。 在remap.config中按如下格式设置: map_with_referer client-URL origin-server-URL re...

  • 测试大文件下载 curl -I "http://resource.tsk.erya100.com/TS/flv/TS180/5836/9.flv?t=1430796561727" 单条转发模式in per remap mode 在remap.config中添加一条 map http://resource.tsk.e...

  • 生成分析文件 命令行运行: valgrind --tool=callgrind ./palmGateMachine 检测完毕之后会生成一个文件callgrind.out.26805, 后面的数字其实是这个待测进程的pid 可视化方法 可视化方法 可视化工具 kcachegrind 1、下载地址: https://launchp...

  • MQTT 心跳和keepalive配置 内容: 正常MQTT 服务器端会配置一个超时时间,一般为60s, 在这个时间段内一个连接如果没有数据传输的话,服务端会主动断开连接以释放资源, 有两种方式可以规避这个问题: 方式1: 最为简单, 将keepalive的时间设置小于 服务端的超时时间,则客户端每隔 keepalive的时间就...

  • 概述 我们用jmeter做性能测试,必然需要学会分析测试报告。但是初学者常常因为对概念的不清晰,最后被测试报告带到沟里去。   常见的误区 分析响应时间全用平均值响应时间不和吞吐量挂钩响应时间和吞吐量不和成功率挂钩。。。。。   平均值特别不靠谱 平均值为什么不靠谱?相信大家读新闻的时候经常可以看到,平均工资,平均房价,平均支出,等等...

  • 原文: https://mp.weixin.qq.com/s/Dns-ucDwuDeR7lNSlibyAA 放假通知   今年7月1日放暑假 9月2日开学   今天,省教育厅发布通知,2019年全省中小学幼儿园暑期放假时间统一为7月1日,秋季开学时间9月2日。2020年寒假放假时间为1月18日,春季开学时间为2月10日。 刚刚...

  • 1. P117页,练习15:最高响应比 HRRF: 作业 提交时刻 运行时刻 开始时刻 完成时刻 周转时间/min 带权周转时间/min 1 10:00 2:00 10:00 12:00 120 120/120 2 10:10 1:00 12:25 13:25 195 195/60 3 1...