首页 > ATS 5.2.1中Background-Fetch插件调研笔记

ATS 5.2.1中Background-Fetch插件调研笔记

简介

这是Apache Traffic Server(简称ATS)中的一个插件, 允许你从源站主动获取Object内容并填充到缓存中, 当你的所有或是大部分client request都是byte-ranged类型时, 这特别有用. 目前ATS并不能缓存byte0-range类型的request/response.

功能

检查回源的响应, 在原始的(客户端)请求满足下面条件时, 是否触发一条background fetch操作:

  • 目前只支持GET请求
  • 响应是206状态码
  • 通过接口TSHttpTxnIsCacheable()判断响应是否可缓存

一旦确定要执行一次background fetch, 我们将去掉Range头, replay客户端请求, 再次通过Traffic Server的Proxy功能, 去回源请求, 这对于original request是透明的, 它会继续进行并不受任何影响.确保每个url最多只能有一次background fetch, 以免给Original Server意外增加额外的压力.

开启插件

在编译时, 开启如下配置选项,就会将plugings/experimental目录下面所有的模块的动态库都编译和安装进系统中

autoconf -i
./configure --enable-experimental-plugins
make

该插件既可以作为一个global插件,也可以作为一个per remap插件, 它后面带一个参数来指定配置文件的路径, 可以是绝对路径,也可以是相对于安装目录的路径.

使用方法:

1.in global mode

在plugin.config中添加一行

background_fetch.so –config background_fetch.config

2.in per remap mode

在remap.config中添加如下到一行特定的改写规则后面, 也就是可以实现对单条转发规则使用

@plugin=background_fetch.so @pparm=background_fetch.config

配置文件的内容

配置文件background_fetch.config中基于任意的Http header or Client-ip, 可以指定包含(include)或是排除(exclude)的规则, 比如

include User-Agent ABCDEF
exclude User-Agent *
exclude Content-Type text
exclude X-Foo-Bar text
exclude ip  1.2.3.4
exclude Client-IP *
exclude Content-Length <1000

尚待添加的功能

限制对某些大小的内容的background fetch

源码分析

和其他插件一样的代码结构, 这里只添加了一个READ_HTTP_RESPONSE_HDR Hook, 下面是基本的函数调用流程

TSPluginInit() ==> cont_handle_response() ==> is_background_fetch_allowed() ==> 
check_field_configured() ==> check_field_configured()\>cont_check_cacheable()==> data->initialize()\>data->schedule()

对每个符合要求的http transaction, 会生成一个名为BGFetchData的continuation, 它的回调函数是cont_bg_fetch()

另外里面定义了几个数据结构:

static BgFetchRuleMap是一个全局的配置项数据结构

BGFetchConfig类定义了针对每个url的预取配置, BGFetchData类会引用它

插件一启动时会首先调用BGFetchConfig()来读取配置文件, 如果没有指定的配置文件,就使用全局的.

这里写图片描述

更多相关:

  • 原文出处: 韩昊    1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事   谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师,王新年老师以及张晶泊老师。   转载的同学请保留上面这句话,谢谢。如果还能保留文章来源就更感激不尽了。 我保证这篇文章...

  • 原文出处: 韩昊   我保证这篇文章和你以前看过的所有文章都不同,这是 2012 年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者…… 这篇文章的核心思想就是: 要让读者在不看任何数学公式的情况下理解傅里叶分析。 傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维...

  • 很多Linux高手都喜欢使用screen命令,screen命令可以使你轻松地使用一个终端控制其他终端。尽管screen本身是一个非常有用的工具,byobu作为screen的增强版本,比screen更加好用而且美观,并且提供有用的信息和快捷的热键。 想象一下这样一个场景:你通过Secure Shell(ssh)链接到一个服务器,并...

  • NarrowbandPrimary Synchronization Signal时域位置每1个SFN存在一个NPSSSFNSubframeSymbol长度每个SFN5最后11个symbol11个symbols频域位置NB-IOT下行带宽固定180kHz,一个PRB,12个子载波。...

  •  [h1]反斜杠只能够阻止一个字符  [h2]位于键盘的左上角,和~公用一个键。...

  • 满满的都是干货  所有插件都是在 ctrl+alt+s   里的plugins 里进行搜索安装1、CodeGlance 代码迷你缩放图插件2、 Codota代码提示工具,扫描你的代码后,根据你的敲击完美提示Codota基于数百万个开源Java程序和您的上下文来完成代码行,从而帮助您以更少的错误更快地进行编码。安装:3、Material...

  • 1. 搭建markdown环境   > 禁用atom自带的markdown-preview插件(功能简单)   > 安装插件:[email protected](在markdown-preview的基础上做了扩展,支持预览实时渲染,支持Latex公式)   > 安装插件:markdown-scroll-sy...

  •   很多时候需要把树状的数据显示除来,比如分类,中国省份、城市信息,等,因此这方面的javascript插件也有很多.比如性能优异的jquery.treeview和国人开发的功能强大的zTree. 我最近在一个项目中用到了jquery.treeview,但是很可惜的是这款小巧高效的jquery插件不支持checkbox的行为。因此我花...

  • 上一章我们介绍了cordova android项目是如何运行的,这一章我们介绍cordova的核心内容,插件的调用。演示一个例子,通过cordova插件,去调用摄像头。   一、插件的安装以及基本信息:   我们先在项目中安装调用摄像头的插件cordova-plugin-camera,cd到hello下,执行: cordova p...

  • 一、生成javadoc Tools->Gerenate JavaDoc 1. 选择是整个项目还是模块还是单个文件 2. 文档输出路径 3. Locale 选择地区,这个决定了文档的语言,中文就是zh_CN 4. 传入JavaDoc的参数,一般这样写 -encoding UTF-8 -charset UTF-8 -windowtitl...