thrift原始碼分析-架構設計
阿新 • • 發佈:2018-12-21
前言
thrift是一個輕量級、跨語言、提供程式碼生成機制的rpc框架,提供了資料傳輸、序列化、應用層處理的清晰抽象。thrift自身已經非常成熟,支援超過二十種語言,一些基礎專案如hadoop也將thrift整合到自己的多語言sdk內,如果你的公司正在進行多語言微服務技術選型,thrift會是一個不錯的選擇。本系列文章會從整體架構、模組原始碼層面進行剖析,力求呈現出一個更具體的thrift框架。
架構圖
模組劃分
拋開語言層面,thrift可分為以下幾個元件,其中傳輸層被細分為低階傳輸層和複寫傳輸層。
- 程式碼生成器
根據thrift idl檔案生成各個語言程式碼,位於compiler目錄內。
- 低階傳輸層
靠近網路層、作為rpc框架接收報文的入口,提供各種底層實現如socket建立、讀寫、接收連線等。
- 複寫傳輸層
基於低階傳輸層,實現各種複寫傳輸層包括http、framed、buffered、壓縮傳輸層等,複寫傳輸層可以被協議層直接使用,使用者也可以通過重寫低階傳輸層和複寫傳輸層實現自己的傳輸層。
- 協議層
協議層主要負責解析請求、應答報文為具體的結構體、類例項,供處理層直接使用,目前的協議包括Binary(最為常用)、json、多路混合協議等。
- 處理層
由程式碼生成器生成,根據獲取到的具體資訊如method name,進行具體的介面處理,處理層建構函式的入口包含一個handler,handler由業務方進行具體的實現,然後在處理層內被呼叫,並應答處理結果。
- 服務層
融合低階傳輸層、複寫傳輸層、協議層、處理層,自身包含各種不同型別的服務模型,如非阻塞單程序服務、one request per fork、one request per thread、thread pool等模型。
總結
以上為thrift的整體模組劃分,在接下來的文章中會針對每一個模組,做單獨的解析。