為什么有Thrift
學習任何一門新技術之前亏镰,首先要理解扯旷,它產(chǎn)生的背景。Thrift它是RPC一種實現(xiàn)方案索抓,它本質上解決了兩個問題:
1.高效的遠程調用
2.多語言的支持
我們日常生活中钧忽,REST用的很普遍,也能解決這些問題逼肯,那為什么還需要有thrift這樣的RPC技術呢耸黑?
RPC和REST的本質區(qū)別在于,REST它基于HTTP協(xié)議是應用層協(xié)議篮幢,簡單大刊,防火墻友好(80和443端口一般不會背禁用)。但代價是傳輸成本高(HTTP是基于TCP的三椿,必然需要多一層封裝缺菌、拆包的過程)。
RPC基于但是傳輸層協(xié)議搜锰,傳輸效率高男翰,但容易被防火墻阻擋。
所以對于高并發(fā)對互聯(lián)網(wǎng)公司來說纽乱,REST太慢了蛾绎,RPC才是更好對選擇,而Thrift是Twitter的實現(xiàn)鸦列。
基于以上考慮租冠,一般在對外暴露服務時采用REST(防火墻友好),內部通信一般用RPC薯嗤。
Thrift特性
1.獨立于語言的IDL(后面會詳細介紹)
2.它支持世面上的大部分后端編程語言Java(1.7和1.8)顽爹、C++,C#骆姐,js镜粤,node.js,go等14種語言
3.支持namespace(甚至每種語言有自己的namespace)玻褪,用于隔離肉渴,這樣不同namespace下的identifier可以重名
4.支持基本類型、支持常量和枚舉带射、支持containers(list同规,set,map)
5.支持struct和service(service支持繼承)、異常
6.支持異步調用
??它不支持struct繼承(用組合)券勺、方法重載绪钥、多肽。方法不能返回null
Thrift IDL
一個Thrift文件成為一個document关炼,它包含header程腹、Definition
Header:Include,CPPInclude儒拂,NameSpace
Definition:Const|TypeDef |Enum|Struct|Union|Service|BaseType
Thrift網(wǎng)絡通信架構設計
---Server層:用于創(chuàng)建Processor跪楞、輸入輸出Protocol,Transport
---Processor層:用于處理輸入侣灶、輸出流
---Protocol層:read/write data interface
---Transport層:tcp甸祭,http