collapsed_forwarding 插件初探

0、Bug描述

ats-x.x.x 使用 Read While Writer + Open Read Retry Timeout 实现合并回源 和 icp回源会产生冲突,导致合并回源效果不好

在ats-6.2中有一个 collapsed_forwarding 插件,将这个插件编译好部署在 ats-x.x.x 中,之前还担心会不兼容,效果还好;

1、编译方式

collapsed_forwarding 文件夹下只有:

1 [[email protected]10.110.26.73 collapsed_forwarding]# pwd
2 /path/trafficserver-6.2.1/plugins/experimental/collapsed_forwarding
3 [[email protected]10.110.26.73 collapsed_forwarding]# ll
4 total 52
5 -rw-rw-r-- 1 1000 1000 10941 Dec 17 02:14 collapsed_forwarding.cc
6 -rw-rw-r-- 1 1000 1000   996 Dec 17 02:14 Makefile.am
7 -rw-rw-r-- 1 1000 1000 31281 Dec 17 02:14 Makefile.in
8 -rw-rw-r-- 1 1000 1000  3023 Dec 17 02:14 README
9 [[email protected]10.110.26.73 collapsed_forwarding]#

直接make编译会报错,于是我采用ats自带的编译工具 tsxs 进行编译:

  • /path/ats/bin/tsxs -I ../../../proxy/api -L ../../../lib -ldl -o collapsed_forwarding.so collapsed_forwarding.cc
  • 将编译好的 collapsed_forwarding.so 拷贝到 /path/ats/libexec/trafficserver/ 目录下

2、需要改的配置

  • collapsed_forwarding 是基于 open_write_fail_action 和 Read While Writer 的,所以需要在在主配置文件中开启相应的功能;
  • 因为这个插件是 remap mode 所以需要在remap.config 中配置使用;
  • 关于background fill,详见
  • 这个插件需要2个参数,我测试的时候使用了:delay=50 + retries=10 , 后续可根据测试效果进一步修改;
  • 没有在 plugin.config 中启用;

remap.config

1 regex_map ... 2 ... 3 @plugin=/path/ats/libexec/trafficserver/collapsed_forwarding.so @pparam=--delay=50 @pparam=--retries=10

record.config

1 # active the collapsed_forwarding plugin
2 CONFIG proxy.config.http.cache.open_write_fail_action INT 1
3 CONFIG proxy.config.cache.enable_read_while_writer INT 1
4 CONFIG proxy.config.http.redirection_enabled INT 1
5 CONFIG proxy.config.http.number_of_redirections INT 10
6 CONFIG proxy.config.http.redirect_use_orig_cache_key INT 1
7 CONFIG proxy.config.http.background_fill_active_timeout INT 0
8 CONFIG proxy.config.http.background_fill_completed_threshold FLOAT 0.000000

3、原理解释

 1 ////////////////////////////////////////////////////////////////////////////////
 2 // collapsed_forwarding::
 3 //
 4 // ATS plugin to allow collapsed forwarding of concurrent requests for the same
 5 // object. This plugin is based on open_write_fail_action feature, which detects
 6 // cache open write failure on a cache miss and returns a 502 error along with a
 7 // special @-header indicating the reason for 502 error. The plugin acts on the
 8 // error by using an internal redirect follow back to itself, essentially blocking
 9 // the request until a response arrives, at which point, relies on read-while-writer
10 // feature to start downloading the object to all waiting clients. The following
11 // config parameters are assumed to be set for this plugin to work:
12 ////////////////////////////////////////////////////////////////////////////////////
13 // proxy.config.http.cache.open_write_fail_action        1 /////////////////////////
14 // proxy.config.cache.enable_read_while_writer           1 /////////////////////////
15 // proxy.config.http.redirection_enabled                 1 /////////////////////////
16 // proxy.config.http.number_of_redirections             10 /////////////////////////
17 // proxy.config.http.redirect_use_orig_cache_key         1 /////////////////////////
18 // proxy.config.http.background_fill_active_timeout      0 /////////////////////////
19 // proxy.config.http.background_fill_completed_threshold 0 /////////////////////////
20 ////////////////////////////////////////////////////////////////////////////////////
21 // Additionally, given that collapsed forwarding works based on cache write
22 // lock failure detection, the plugin requires cache to be enabled and ready.
23 // On a restart, Traffic Server typically takes a few seconds to initialize
24 // the cache depending on the cache size and number of dirents. While the
25 // cache is not ready yet, collapsed forwarding can not detect the write lock
26 // contention and so can not work. The setting proxy.config.http.wait_for_cache
27 // may be enabled which allows blocking incoming connections from being
28 // accepted until cache is ready.
29 ////////////////////////////////////////////////////////////////////////////////////
30 // This plugin currently supports only per-remap mode activation.
31 ////////////////////////////////////////////////////////////////////////////////////
  • collapsed_forwarding

    • open_write_fail_action
    • read-while-writer
Open Write Fail Action
In addition to the open read retry settings TS supports a new setting proxy.config.http.cache.open_write_fail_action that allows to further reduce multiple concurrent requests hitting the origin for the same object by either returning a stale copy, in case of hit-stale or an error in case of cache miss for all but one of the requests.

4、测试效果

 1 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
 2 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
 3 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
 4 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
 5 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
 6 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
 7 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
 8 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
 9 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
10 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
11 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
12 10.110.26.73 HTTP/1.1 303 TCP_MISS_REDIRECT:DIRECT
13 10.110.26.73 HTTP/1.1 200 TCP_MISS:PARENT_HIT
14 10.110.26.73 HTTP/1.1 200 TCP_HIT:NONE
15 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
16 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
17 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
18 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
19 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
20 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
21 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
22 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
23 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
24 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE
25 10.110.26.73 HTTP/1.1 200 TCP_MEM_HIT:NONE

也测试了 icp 回源,也是OK的!

5、参考文献

时间: 2024-10-10 06:41:55

collapsed_forwarding 插件初探的相关文章

VSCODE 插件初探

写在前面 分享一个vscode插件background(用于改变背景).点击直接跳到vscode插件开发步骤 做vscode的插件,很久就有这个想法了,但是一直因为这样,那样的事情耽误,放弃了N次.不过确实让我对文档有了个直观的了解. 上周末的时候因为测试妹纸要加班测试,让我也到公司加班,等待可能出现的bug这理由听着就扯淡 当然一群妹纸都到公司等着了,我也必须去......于是在等待bug的时间里看了看官方的文档,在这里写了点自己的摸索结果. 本文分为2部分,1是分享自己做的一个demo,2个

[CC]CC插件初探

应用程序插件框架的内容包括:主程序App,插件Plugin. 1.实现一个应用程序插架框架关键点有: 一个插件的标准接口,在主程序中存在一个插件的集合.主程序通过循环读取每个插件,将插件对象通过多态的机制转换为插件接口,实现插件的装载. 主程序对象或者主程序接口需要作为参数传递到插件对象中,以方便插件对象调用主程序的内容,如主视图.工具栏.树视图.状态栏等. 2.开源点云处理软件CloudCompare也是一个插件框架,因此也必然包括这些内容. 插件接口:ccPluginInterface,每个

jQuery 图片剪裁插件初探之 Jcrop

主页:http://deepliquid.com/content/Jcrop.html 官方下载地址:http://deepliquid.com/content/Jcrop_Download.html 下载包中除了 CSS 文件夹和 js 文件夹外还提供了几款 demo: 1. non-image.html 不包含图像的任意 div 的剪裁方式: 2.styling.html 提供了 3 种可以选择的遮罩色.透明度和选区边框样式 jcrop-light ( bgcolor:#fff opacit

zTree和SweetAlert插件初探

1.zTree插件简介 zTree是一个依靠 jQuery实现的多功能“树插件”.优异的性能.灵活的配置.多种功能的组合是zTree最大优点.专门适合项目开发,尤其是树状菜单.树状数据的Web显示.权限管理等等. 官网地址:http://www.treejs.cn/v3/main.php#_zTreeInfo 2.zTree资源管理实例 ⑴ 引入zTree的js和css文件: <script type="text/javascript" src="/assets/scr

3DSMAX 中的CS 骨骼动画插件初探

王玉培 郑利平1 合肥工业大学计算机与信息学院VCC 研究室, 合肥 230009 摘要:首先介绍了3DSMAX 中的CS 骨骼动画制作方法,通过Biped 骨架可以快速方便的制 作两足动物的动画.并介绍了基于3DSMAX SDK 的插件开发,SDK 中类库的组织方式和3DSMAX 的场景组织,最后介绍了和3D引擎密切相关的骨骼动画导出插件的开发过程. 关键词:骨骼动画 插件开发 Biped Preliminary Study on the CS Skeletal Animation Plug-

上周热点回顾(5.16-5.22)

热点随笔: · [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(5.2) 登录功能的实现,接口注入.log4net的使用(果冻布丁喜之郎)· [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(5.3) 登录功能的实现,丰富数据表.建立关联(果冻布丁喜之郎)· 微软.NET Core RC2正式发布,横跨所有平台(张善友)· [无私分享:从入门到精通ASP.NET MVC]从0开始,一起搭框架.做项目(5.4) 登录功能的实现,创建与登录用

初探ELK-使用geoip插件来制作可视化的地图

2016/11/17 一.前提 1.本次操作是在前述文章的基础上添砖加瓦. 2.思路 1)通过 logstash 将 clientip 识别成 geoip.location 等数据 2)然后更新 ES 的模版,标记 geoip.location 这个 properties 的 type 为 geo_point 3)最后在 kibana 上选择 "Visualize -> Tile Map",指定一个 search,选择 buckerts 为 geo_point 类型的 prope

Sublime插件支持Sass编译和Babel解析ES6 &amp; .sublime-build文件初探(转载自imwtr)

原文请看:http://www.cnblogs.com/imwtr/p/6010550.html 用Sublime Text蛮久了,配置配来配去的,每次换电脑都得重头再配过,奈何人老了脑子不中用了,得好好整理一些,下次换电脑就有得参考了.. 同事说,他的WebStorm简直太方便,自身集成了很多方便的工具,不用配置太多 哈哈哈哈但我还是更喜欢用ST 如果要将Sass编译成css文件,安装相应的编译工具就行,然后在命令行直接sass a.scss:b.css 编译就行了 要将ES6解析成ES5的语

初探Delphi中的插件编程

前言 我写Delphi程序是从MIS系统入门的,开始尝试子系统划分的时候采用的是MDI窗体的结构.随着系统功能的扩充,不断有新的子系统加入系统中,单个工程会变得非常大,每次做一点修改都要重新编译,单个工程的形式也不利于团队协作.为了提高工作效率,我希望利用DLL动态链接库的形式实现插件结构的编程. 插件结构的编程需要一个插件容器来控制各DLL的运行情况,将划分好的每个子系统安排到一个DLL库文件中.对每个DLL程序需要为容器预留接口函数,一般接口函数包括:启动调用DLL库的函数.关闭DLL库的函