高速服務(wù)框架HSF

一、簡述

HSF(High-speed Service Framework),是在阿里巴巴內(nèi)部廣泛使用的分布式 RPC 服務(wù)框架。

HSF 連通不同的業(yè)務(wù)系統(tǒng)厌衔,解耦系統(tǒng)間的實(shí)現(xiàn)依賴蜡歹。HSF 從分布式應(yīng)用的層面,統(tǒng)一了服務(wù)的發(fā)布與調(diào)用方式紧索,從而幫助用戶更加方便、快速地開發(fā)分布式應(yīng)用菜谣,以及提供或使用公共功能模塊珠漂。HSF 為用戶屏蔽了分布式領(lǐng)域中的各種復(fù)雜技術(shù)細(xì)節(jié),如遠(yuǎn)程通訊尾膊、序列化實(shí)現(xiàn)媳危、性能損耗、同步與異步調(diào)用方式的實(shí)現(xiàn)等冈敛。

二待笑、架構(gòu)設(shè)計(jì)

HSF 作為一個純客戶端架構(gòu)的 RPC 框架,沒有服務(wù)端集群莺债,所有 HSF 服務(wù)調(diào)用均是通過服務(wù)消費(fèi)方(Consumer)與服務(wù)提供方(Provider)點(diǎn)對點(diǎn)進(jìn)行滋觉。為了實(shí)現(xiàn)整套分布式服務(wù)體系签夭,HSF 還需要依賴以下外部系統(tǒng):

1??Provider——服務(wù)提供者

通常是某個業(yè)務(wù)系統(tǒng),提供相關(guān)的業(yè)務(wù)服務(wù)椎侠,一般都是個服務(wù)集群第租。業(yè)務(wù)系統(tǒng)初期使用 HSF,通過引入 SDK 的方式我纪。后期阿里定制化改造了容器(tomcat/docker)慎宾,通過配置完成 HSF 的接入使用,作為架構(gòu)中的服務(wù)提供方浅悉。對業(yè)務(wù)系統(tǒng)本身(war/jar)不造成侵入性趟据。綁定了12200端口,用于接受請求并提供服務(wù)术健,同時將地址信息發(fā)布到地址注冊中心汹碱。

2??Consumer——服務(wù)消費(fèi)者

通常也是某個業(yè)務(wù)系統(tǒng)集群,跟服務(wù)提供者非常類似荞估,只是服務(wù)咳促、消費(fèi)角度區(qū)別。通過地址注冊中心訂閱服務(wù)勘伺,根據(jù)訂閱到的地址信息發(fā)起調(diào)用跪腹,地址注冊中心不參與調(diào)用。

3??ConfigServer——配置服務(wù)器

HSF 依賴注冊中心進(jìn)行服務(wù)發(fā)現(xiàn)飞醉,如果沒有注冊中心冲茸,HSF 只能完成簡單的點(diǎn)對點(diǎn)調(diào)用。因?yàn)樽鳛榉?wù)提供端缅帘,沒有辦法將自己的服務(wù)信息對外發(fā)布轴术,讓外界知曉;作為服務(wù)消費(fèi)端钦无,可能已經(jīng)知道需要調(diào)用的服務(wù)膳音,但是無法獲取能夠提供這些服務(wù)的機(jī)器硝皂。而 ConfigServer 就是服務(wù)信息的中介余掖,提供服務(wù)發(fā)現(xiàn)的能力烦味。

  • 注冊與訂閱

    服務(wù)注冊——在服務(wù)提供方啟動時,完成該服務(wù)的注冊——上報(bào)當(dāng)前服務(wù)的 ip/port趣席、服務(wù)類名方法名、版本號醇蝴、分組等信息宣肚。

    服務(wù)訂閱——在服務(wù)消費(fèi)方啟動時,完成某些服務(wù)的訂閱——通過訂閱的服務(wù)標(biāo)識(類名+方法名+版本號等)悠栓,在內(nèi)存中查找相關(guān)服務(wù)霉涨,一旦找到則將服務(wù)提供者的 IP 端口等信息推送給當(dāng)前服務(wù)消費(fèi)方按价,以便消費(fèi)。

  • 長連接與內(nèi)存級

    服務(wù)提供方與服務(wù)消費(fèi)方均與配置服務(wù)器保持長連接笙瑟,一旦服務(wù)提供方發(fā)生變化楼镐,會立即被通知,更新內(nèi)存中的列表數(shù)據(jù)往枷,并同步給訂閱該服務(wù)的服務(wù)消費(fèi)方框产。

4??Diamond——EDAS 持久化配置中心

用于存儲 HSF 服務(wù)的各種治理規(guī)則,HSF 客戶端在啟動的過程中會向持久化配置中心訂閱各種服務(wù)治理規(guī)則错洁,如白名單秉宿、權(quán)限、路由規(guī)則屯碴、歸組規(guī)則描睦、權(quán)重規(guī)則等,從而根據(jù)規(guī)則對調(diào)用過程的選址邏輯進(jìn)行干預(yù)导而。持久化配置中心的角色是由 Diamond 組件承擔(dān)的忱叭。

當(dāng)需要時,用戶通過在界面上設(shè)計(jì)規(guī)則嗡载,Diamond 會快速的將新的規(guī)則推送給相關(guān)的服務(wù)提供方窑多。

5??addressServer——地址服務(wù)器

地址服務(wù)器的職責(zé)是保存上文的 ConfigServer 與 Diamond 服務(wù)器的地址列表。在 consumer洼滚、provider 啟動時埂息,會首先以域名訪問的方式訪問地址服務(wù)器,從地址服務(wù)器獲取到 ConfigServer 與 Diamond 服務(wù)器的地址列表信息遥巴,以便訪問千康。

6??EDAS 元數(shù)據(jù)存儲中心

元數(shù)據(jù)是指 HSF 服務(wù)對應(yīng)的方法列表以及參數(shù)結(jié)構(gòu)等信息,元數(shù)據(jù)不會對 HSF 的調(diào)用過程產(chǎn)生影響铲掐,因此元數(shù)據(jù)存儲中心也并不是必須的拾弃。但考慮到服務(wù)運(yùn)維的便捷性,HSF 客戶端在啟動時會將元數(shù)據(jù)上報(bào)到元數(shù)據(jù)存儲中心摆霉,以便提供給服務(wù)運(yùn)維使用豪椿。元數(shù)據(jù)存儲中心的角色是由 Redis 承擔(dān)的。

7??EDAS 控制臺

EDAS 控制臺打通了服務(wù)地址注冊中心携栋、持久化配置中心搭盾、元數(shù)據(jù)存儲中心等,為用戶提供了服務(wù)運(yùn)維功能婉支,包括服務(wù)查詢鸯隅、服務(wù)治理規(guī)則管理等,提高 HSF 服務(wù)研發(fā)的效率向挖、運(yùn)維的便捷性蝌以。

完成初始化后炕舵,服務(wù)調(diào)用者內(nèi)保存了相關(guān)的服務(wù)信息,通過內(nèi)部設(shè)置的調(diào)用方式(如隨機(jī)訪問一臺跟畅,權(quán)重等)可以進(jìn)行點(diǎn)對點(diǎn)的調(diào)用咽筋。
其內(nèi)部通過 NIO 多路復(fù)用(Netty)+Hessian 序列化實(shí)現(xiàn) RPC 調(diào)用,使用 Hessian 主要是壓測表現(xiàn)出穩(wěn)定性以及高效的綜合特性碍彭。

三晤硕、功能

HSF 作為分布式 RPC 服務(wù)框架,支持多種服務(wù)的調(diào)用方式庇忌。

1??同步調(diào)用
HSF 客戶端默認(rèn)以同步調(diào)用的方式消費(fèi)服務(wù)舞箍,客戶端代碼需要同步等待返回結(jié)果。

2??異步調(diào)用
對于服務(wù)調(diào)用的客戶端皆疹,并非所有 HSF 服務(wù)都需要同步等待返回結(jié)果疏橄。HSF 提供異步調(diào)用,幫助客戶端無需同步阻塞在 HSF 調(diào)用上略就。HSF 的異步調(diào)用捎迫,有 Future 調(diào)用和 Callback 調(diào)用兩種:
①Future 調(diào)用
客戶端在需要獲取調(diào)用的返回結(jié)果時,通過 HSFResponseFuture.getResponse(int timeout)主動獲取結(jié)果表牢。

②Callback 調(diào)用
Callback 調(diào)用利用 HSF 內(nèi)部提供的回調(diào)機(jī)制窄绒,在指定 HSF 服務(wù)消費(fèi)完畢拿到返回結(jié)果時,HSF 會回調(diào)用戶實(shí)現(xiàn)的 HSFResponseCallback 接口崔兴,客戶端通過回調(diào)通知的方式獲取結(jié)果彰导。

3??泛化調(diào)用
對于一般的 HSF 調(diào)用來說,HSF 客戶端需要依賴服務(wù)的二方包敲茄,通過依賴二方包中的 API 進(jìn)行編程調(diào)用位谋,獲取返回結(jié)果。但是泛化調(diào)用不需要依賴服務(wù)的二方包堰燎,可以發(fā)起 HSF 調(diào)用掏父、獲取返回結(jié)果。在平臺型的產(chǎn)品中秆剪,泛化調(diào)用的方式可以有效減少平臺型產(chǎn)品的二方包依賴赊淑,實(shí)現(xiàn)系統(tǒng)的輕量級運(yùn)行。

4??調(diào)用鏈路 Filter 擴(kuò)展
HSF 內(nèi)部設(shè)計(jì)了調(diào)用過濾器仅讽,能夠主動發(fā)現(xiàn)用戶的調(diào)用過濾器擴(kuò)展點(diǎn)膏燃,將其集成到 HSF 調(diào)用鏈路中,便于擴(kuò)展方對 HSF 的請求進(jìn)行擴(kuò)展處理何什。

四、應(yīng)用開發(fā)方式

使用 HSF 開發(fā)應(yīng)用有 Ali-Tomcat 和 Pandora Boot 兩種方式等龙。

Ali-Tomcat:依賴 Ali-Tomcat 和 Pandora处渣,提供了完整的 HSF 功能伶贰,包括服務(wù)注冊與發(fā)現(xiàn)、隱式傳參罐栈、異步調(diào)用黍衙、泛化調(diào)用和調(diào)用鏈路 Filter 擴(kuò)展。應(yīng)用程序須以 WAR 包方式部署荠诬。
Pandora Boot:依賴 Pandora琅翻,提供了比較完整的 HSF 功能,包括服務(wù)注冊與發(fā)現(xiàn)柑贞、異步調(diào)用方椎。應(yīng)用程序編譯為可運(yùn)行的 JAR 包并部署即可。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钧嘶,一起剝皮案震驚了整個濱河市棠众,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌有决,老刑警劉巖闸拿,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異书幕,居然都是意外死亡新荤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門台汇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苛骨,“玉大人,你說我怎么就攤上這事励七≈窍” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵掠抬,是天一觀的道長吼野。 經(jīng)常有香客問我,道長两波,這世上最難降的妖魔是什么瞳步? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮腰奋,結(jié)果婚禮上单起,老公的妹妹穿的比我還像新娘。我一直安慰自己劣坊,他們只是感情好嘀倒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般测蘑。 火紅的嫁衣襯著肌膚如雪灌危。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天碳胳,我揣著相機(jī)與錄音勇蝙,去河邊找鬼。 笑死挨约,一個胖子當(dāng)著我的面吹牛味混,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诫惭,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翁锡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了贝攒?” 一聲冷哼從身側(cè)響起盗誊,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎隘弊,沒想到半個月后哈踱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梨熙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年开镣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片咽扇。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡邪财,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出质欲,到底是詐尸還是另有隱情树埠,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布嘶伟,位于F島的核電站怎憋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏九昧。R本人自食惡果不足惜绊袋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铸鹰。 院中可真熱鬧癌别,春花似錦、人聲如沸蹋笼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诞仓,卻和暖如春缤苫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背墅拭。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涣狗,地道東北人谍婉。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像镀钓,于是被迫代替她去往敵國和親穗熬。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354