ATS 5.2.1中Background-Fetch插件调研笔记
簡介
這是Apache Traffic Server(簡稱ATS)中的一個插件, 允許你從源站主動獲取Object內(nèi)容并填充到緩存中, 當(dāng)你的所有或是大部分client request都是byte-ranged類型時, 這特別有用. 目前ATS并不能緩存byte0-range類型的request/response.
功能
檢查回源的響應(yīng), 在原始的(客戶端)請求滿足下面條件時, 是否觸發(fā)一條background fetch操作:
- 目前只支持GET請求
- 響應(yīng)是206狀態(tài)碼
- 通過接口TSHttpTxnIsCacheable()判斷響應(yīng)是否可緩存
一旦確定要執(zhí)行一次background fetch, 我們將去掉Range頭, replay客戶端請求, 再次通過Traffic Server的Proxy功能, 去回源請求, 這對于original request是透明的, 它會繼續(xù)進行并不受任何影響.確保每個url最多只能有一次background fetch, 以免給Original Server意外增加額外的壓力.
開啟插件
在編譯時, 開啟如下配置選項,就會將plugings/experimental目錄下面所有的模塊的動態(tài)庫都編譯和安裝進系統(tǒng)中
autoconf -i
./configure --enable-experimental-plugins
make
該插件既可以作為一個global插件,也可以作為一個per remap插件, 它后面帶一個參數(shù)來指定配置文件的路徑, 可以是絕對路徑,也可以是相對于安裝目錄的路徑.
使用方法:
1.in global mode
在plugin.config中添加一行
background_fetch.so –config background_fetch.config
2.in per remap mode
在remap.config中添加如下到一行特定的改寫規(guī)則后面, 也就是可以實現(xiàn)對單條轉(zhuǎn)發(fā)規(guī)則使用
@plugin=background_fetch.so @pparm=background_fetch.config
配置文件的內(nèi)容
配置文件background_fetch.config中基于任意的Http header or Client-ip, 可以指定包含(include)或是排除(exclude)的規(guī)則, 比如
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
尚待添加的功能
限制對某些大小的內(nèi)容的background fetch
源碼分析
和其他插件一樣的代碼結(jié)構(gòu), 這里只添加了一個READ_HTTP_RESPONSE_HDR Hook, 下面是基本的函數(shù)調(diào)用流程
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, 它的回調(diào)函數(shù)是cont_bg_fetch()
另外里面定義了幾個數(shù)據(jù)結(jié)構(gòu):
static BgFetchRuleMap是一個全局的配置項數(shù)據(jù)結(jié)構(gòu)
BGFetchConfig類定義了針對每個url的預(yù)取配置, BGFetchData類會引用它
插件一啟動時會首先調(diào)用BGFetchConfig()來讀取配置文件, 如果沒有指定的配置文件,就使用全局的.
總結(jié)
以上是生活随笔為你收集整理的ATS 5.2.1中Background-Fetch插件调研笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu 14.04 64bit上
- 下一篇: 在Ubuntu 14.04 64bit上