Apache Traffic Server插件開(kāi)發(fā)手記(一)

目錄

一、編譯、安裝ATS

二哪廓、ATS原理與使用

三强经、插件開(kāi)發(fā)過(guò)程


一、編譯掘殴、安裝ATS


下載解壓源代碼

wget http://mirrors.shuosc.org/apache/trafficserver/trafficserver-5.3.2.tar.bz2

tar -jxvf trafficserver-5.3.2.tar.bz2

安裝依賴

sudo apt-get install g++ make pkg-config libssl-dev tcl-dev libexpat1-dev libpcre3-dev libmodule-install-perl

sudo apt-get install bison flex

sudo apt-get install bison flex

配置

./configure --prefix=/usr/local/ats --with-user=carl --with-group=carl --enable-debug --enable-experimental-plugins --enable-example-plugins

修改Main.cc源碼

在Main.cc中添加,這樣在開(kāi)發(fā)插件的時(shí)候就能以root的方式運(yùn)行traffic_server,擁有綁定1-1023端口的權(quán)限

#if !defined(BIG_SECURITY_HOLE)

#define BIG_SECURITY_HOLE 0

#endif

編譯安裝

make & sudo make install


當(dāng)然,ats也支持apt-get install安裝千所,但是我有時(shí)候需要改動(dòng)里面的源碼,因此我選擇了利用源碼編譯來(lái)安裝的方式蒜埋。

二淫痰、ATS原理與使用

原理:

大家目前能體驗(yàn)到的極速的上網(wǎng)速度,除了帶寬不斷擴(kuò)大所帶來(lái)的效益外整份,最大的功臣當(dāng)屬CDN待错,CDN即報(bào)文分發(fā)網(wǎng)絡(luò)籽孙,它是通過(guò)將源站的內(nèi)容存至離用戶比較近的地方,方便用戶要用的時(shí)候去取火俄,從而減少了回源的時(shí)間犯建,而這一系統(tǒng)得以運(yùn)轉(zhuǎn)的根本在于緩存機(jī)制——cache」峡停可能看起來(lái)有點(diǎn)抽象适瓦,舉個(gè)例子來(lái)說(shuō),京東就是現(xiàn)實(shí)世界的CDN谱仪,京東的物流很快玻熙,這得益于京東發(fā)貨的時(shí)候采用就近原則,從最近的倉(cāng)庫(kù)取出貨物派發(fā)給用戶疯攒。

本文所說(shuō)的ATS就相當(dāng)于jd的倉(cāng)庫(kù)嗦随,將院站的數(shù)據(jù)不斷拉取到靠近用戶的節(jié)點(diǎn),當(dāng)用戶請(qǐng)求時(shí)卸例,再分發(fā)給用戶称杨。本文中,將以ATS的使用筷转、配置姑原、插件的開(kāi)發(fā)(主要在于此)介紹。

看一段來(lái)自百度百科的性能介紹

緩存:改進(jìn)響應(yīng)時(shí)間的同時(shí)降低了服務(wù)器負(fù)載與對(duì)帶寬的需求呜舒,這是通過(guò)緩存并且重用經(jīng)常請(qǐng)求的網(wǎng)頁(yè)锭汛、圖片和Web Service調(diào)用實(shí)現(xiàn)的。

代理:很容易添加持續(xù)連接袭蝗、過(guò)濾器或異步內(nèi)容請(qǐng)求唤殴,還可以通過(guò)添加代理層實(shí)現(xiàn)負(fù)載平衡。

速度:在現(xiàn)代的SMP硬件上具有很好的可伸縮性到腥,每秒鐘可以處理數(shù)以萬(wàn)計(jì)的請(qǐng)求朵逝。

可擴(kuò)展性:API考慮到了自定義插件,可以修改頭與內(nèi)容乡范,還可以實(shí)現(xiàn)新的協(xié)議處理器配名。

可靠性:能夠完美處理TB級(jí)別的數(shù)據(jù),包括正向與反向代理晋辆。

緩存渠脉、代理,不必說(shuō)最基本的功能瓶佳;

速度方面芋膘,具有很強(qiáng)的并發(fā)能力,nginx采用的master+work的方式,多線程多進(jìn)程下一般能開(kāi)的work不多为朋,而ats采用協(xié)程(continuations)的方式臂拓,理論上可以隨便開(kāi),百萬(wàn)級(jí)別都不是問(wèn)題潜腻,但是性能肯定會(huì)下降埃儿,凡是都是雙刃劍,所以不說(shuō)哪個(gè)好融涣,適用才是王道童番。

可擴(kuò)展性,ATS提供了方便的插件開(kāi)發(fā)結(jié)構(gòu)威鹿,整個(gè)的架構(gòu)如圖所示


ATS采用事件驅(qū)動(dòng)方式來(lái)安排工作剃斧,通過(guò)事件喚醒所要操作的功能。處理器在于事件系統(tǒng)進(jìn)行交談過(guò)程中對(duì)線程安排工作忽你,線程在工作過(guò)程中會(huì)發(fā)送一些事件幼东,這些事件用于回調(diào)響應(yīng)的continuations,每個(gè)continuations被喚醒后會(huì)做一些工作科雳,完成后要嗎銷毀要嗎回到睡眠狀態(tài)等待下一事件的到來(lái)根蟹。比如說(shuō)在監(jiān)聽(tīng)到客戶端請(qǐng)求連接后會(huì)創(chuàng)建狀態(tài)機(jī)來(lái)完成每個(gè)連接所需要的操作,這些事件會(huì)作用到ATS平臺(tái)下的線程中糟秘。大概就是這么個(gè)流程简逮,然后事件則是通過(guò)hook的機(jī)制將事件發(fā)送給這些continuations。

基本命令:

sudo /usr/local/ats/bin/trafficserver restart

sudo /usr/local/ats/bin/trafficserver start

sudo /usr/local/ats/bin/trafficserver stop

三尿赚、插件的開(kāi)發(fā)

前面說(shuō)到ATS擴(kuò)展性好散庶,表現(xiàn)在用戶能利用ATS所提供的API開(kāi)發(fā)自己的插件,那么用戶如何開(kāi)發(fā)一個(gè)正常使用的插件呢凌净?

根據(jù)官方給出的SDK文檔悲龟,開(kāi)發(fā)一個(gè)plugin需要滿足以下5個(gè)條件。

1冰寻、確保你的插件源碼中包含TSPluginInit初始化函數(shù)须教;

2、編譯源碼斩芭,創(chuàng)建鏈接庫(kù)没卸;

3、在plugin.config中添加該插件入口秒旋;

4、在record.config中聲明插件對(duì)應(yīng)的鏈接庫(kù)所在的位置诀拭;

5迁筛、重啟ATS讓配置生效。

針對(duì)這五點(diǎn),我們來(lái)寫個(gè)簡(jiǎn)單的helloworld插件细卧。

針對(duì)第一個(gè)要求尉桩,需要注意的是程序的入口都是main函數(shù),而這里的main函數(shù)已經(jīng)在ATS中了贪庙,因此插件函數(shù)的入口將其設(shè)計(jì)為TSPluginInit蜘犁,第二個(gè)注意的地方在于該采用c還是c++編寫呢?答案肯定是都可以止邮,但是如果用C++的話这橙,需要按C的編譯器來(lái)編譯,而不是C++导披,針對(duì)這兩點(diǎn)屈扎,我采用C++做個(gè)示范,代碼如下撩匕。

#include

#include

#include "hello.h"

extern "C" void TSPluginInit (int argc, const char *argv[]);

void TSPluginInit (int argc, const char *argv[])

{

TSPluginRegistrationInfo info;

info.plugin_name = "hello-world";

info.vendor_name = "carlpc";

info.support_email = "carl@ carlpc.com";

if (TSPluginRegister(&info) != TS_SUCCESS) {

????TSError("load error");

}

????TSError("Hello World鹰晨!");

}


#ifndef __HELLO_H__

#define __HELLO_H__

void TSPluginInit (int argc, const char *argv[]);

#endif

這樣就滿足了第一個(gè)條件。

針對(duì)第二個(gè)要求止毕,我們需要將源碼編譯成動(dòng)態(tài)鏈接庫(kù)模蜡。這里直接通過(guò)ATS提供的編譯器tsxs進(jìn)行編譯,命令如下:

/usr/local/ats/bin/tsxs-o hello.so -c hello.cpp

另外扁凛,通過(guò)這個(gè)命令可以將生成的動(dòng)態(tài)鏈接庫(kù)安裝到默認(rèn)的插件目錄/usr/local/ats/libexec下忍疾,安裝命令如下

sudo/usr/local/ats/bin/tsxs -o hello.so -i

接下來(lái),配置第三個(gè)要求令漂,在/usr/local/ats/etc/trafficserver/plugin.config中加入膝昆,hello.so。

最后是配置第四個(gè)要求叠必,在record.config中配置動(dòng)態(tài)鏈接庫(kù)所在的位置荚孵,即在末尾中加入

CONFIGproxy.config.plugin.plugin_dir STRING /usr/local/ats/libexec/trafficserver/

至此,條件都滿足了纬朝,接下來(lái)重啟ATS,可以在ATS的日志中看到打印出來(lái)的信息收叶。查看/usr/local/ats/var/trafficserver/下的diags.log和error.log


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市共苛,隨后出現(xiàn)的幾起案子判没,更是在濱河造成了極大的恐慌,老刑警劉巖隅茎,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件澄峰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辟犀,警方通過(guò)查閱死者的電腦和手機(jī)俏竞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人魂毁,你說(shuō)我怎么就攤上這事玻佩。” “怎么了席楚?”我有些...
    開(kāi)封第一講書人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵咬崔,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我烦秩,道長(zhǎng)垮斯,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任闻镶,我火速辦了婚禮甚脉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铆农。我一直安慰自己牺氨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布墩剖。 她就那樣靜靜地躺著猴凹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岭皂。 梳的紋絲不亂的頭發(fā)上郊霎,一...
    開(kāi)封第一講書人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音爷绘,去河邊找鬼书劝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛土至,可吹牛的內(nèi)容都是我干的购对。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼陶因,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼骡苞!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起楷扬,我...
    開(kāi)封第一講書人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤解幽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后烘苹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體躲株,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年镣衡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了徘溢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吞琐。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖然爆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情黍图,我是刑警寧澤曾雕,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站助被,受9級(jí)特大地震影響剖张,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜揩环,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一搔弄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丰滑,春花似錦顾犹、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至郁妈,卻和暖如春浑玛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背噩咪。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工顾彰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胃碾。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓涨享,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親书在。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灰伟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容