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()來讀取配置文件, 如果沒有指定的配置文件,就使用全局的.
總結
以上是生活随笔為你收集整理的ATS 5.2.1中Background-Fetch插件调研笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Ubuntu 14.04 64bit上
- 下一篇: 在Ubuntu 14.04 64bit上