thrift源碼分析-架構(gòu)設(shè)計

已遷移至掘金社區(qū)thrift源碼分析-架構(gòu)設(shè)計

前言

? ? thrift是一個輕量級、跨語言、提供代碼生成機(jī)制的rpc框架,提供了數(shù)據(jù)傳輸、序列化、應(yīng)用層處理的清晰抽象。thrift自身已經(jīng)非常成熟,支持超過二十種語言,一些基礎(chǔ)項目如hadoop也將thrift集成到自己的多語言sdk內(nèi),如果你的公司正在進(jìn)行多語言微服務(wù)技術(shù)選型,thrift會是一個不錯的選擇。本系列文章會從整體架構(gòu)、模塊源碼層面進(jìn)行剖析,力求呈現(xiàn)出一個更具體的thrift框架。

架構(gòu)圖


https://github.com/apache/thrift/blob/master/doc/images/thrift-layers.png

模塊劃分

????拋開語言層面,thrift可分為以下幾個組件,其中傳輸層被細(xì)分為低級傳輸層和復(fù)寫傳輸層。

????代碼生成器:根據(jù)thrift idl文件生成各個語言代碼,位于compiler目錄內(nèi)。

????低級傳輸層:靠近網(wǎng)絡(luò)層、作為rpc框架接收報文的入口,提供各種底層實現(xiàn)如socket創(chuàng)建、讀寫、接收連接等。

????復(fù)寫傳輸層:基于低級傳輸層,實現(xiàn)各種復(fù)寫傳輸層包括http、framed、buffered、壓縮傳輸層等,復(fù)寫傳輸層可以被協(xié)議層直接使用,用戶也可以通過重寫低級傳輸層和復(fù)寫傳輸層實現(xiàn)自己的傳輸層。

????協(xié)議層:協(xié)議層主要負(fù)責(zé)解析請求、應(yīng)答報文為具體的結(jié)構(gòu)體、類實例,供處理層直接使用,目前的協(xié)議包括Binary(最為常用)、json、多路混合協(xié)議等。

????處理層:由代碼生成器生成,根據(jù)獲取到的具體信息如method name,進(jìn)行具體的接口處理,處理層構(gòu)造函數(shù)的入口包含一個handler,handler由業(yè)務(wù)方進(jìn)行具體的實現(xiàn),然后在處理層內(nèi)被調(diào)用,并應(yīng)答處理結(jié)果。

????服務(wù)層:融合低級傳輸層、復(fù)寫傳輸層、協(xié)議層、處理層,自身包含各種不同類型的服務(wù)模型,如非阻塞單進(jìn)程服務(wù)、one request per fork、one request per thread、thread pool等模型。

總結(jié)

? ? 以上為thrift的整體模塊劃分,在接下來的文章中會針對每一個模塊,做單獨的解析。

參考資料

thrift官網(wǎng)

thrift代碼地址

thrift白皮書

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容