已遷移至掘金社區(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)圖

模塊劃分
????拋開語言層面,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的整體模塊劃分,在接下來的文章中會針對每一個模塊,做單獨的解析。