thrift是一個軟件框架,用來進行可擴展且跨語言的服務的開發。它結合了功能強大的軟件堆棧和代碼生成引擎,以構建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 這些編程語言間無縫結合的、高效的服務。 thrift最初由facebook開發,07年四月開放源代碼,08年5月進入apache孵化器。php
thrift贊成你定義一個簡單的定義文件裏的數據類型和服務接口。以做爲輸入文件,編譯器生成代碼用來方便地生成RPCclient和server通訊的無縫跨編程語言。python
Thrift是Facebook的核心技術框架之中的一個,使不一樣語言開發的系統可以經過該框架進行通訊。開發人員使用thrift提供的格式來定義數據和服務腳本。thrift可以經過定義的腳本本身主動生成不一樣語言的代 碼以支持不一樣語言之間的通訊。thrift支持多種數據通訊協議,比方xml,jason,binnary等等。 Thrift並不是惟一的跨語言通訊框架。像google的protocol buffers也是與之相似的框架。apache
關於二者以前的比較可以去google一下。編程
Thrift源於大名鼎鼎的facebook之手,在2007年facebook提交Apache基金會將Thrift做爲一個開源項目,對於當時的 facebook來講創造thrift是爲了解決facebook系統中各系統間大數據量的傳輸 通訊以及系統之間語言環境不一樣需要跨平臺的特性。因此thrift可以支持多種程序語言,好比: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多種不 同的語言之間通訊thrift可以做爲二進制的高性能的通信中間件。支持數據(對象)序列化和多種類型的RPC服務。
說明:圖中前面3個部分是1.你經過Thrift腳本文件生成的代碼,2.圖中的褐色框部分是你依據生成代碼構建的client和處理器的代碼,3.圖中紅色的部分是2 端產生的計算結果。json
從TProtocol如下3個部分是Thrift的傳輸體系和傳輸協議以及底層I/O通訊,Thrift並且提供 阻塞、非阻塞,單線程、多線程的模式執行在server上,還可以配合server/容器一塊兒執行,可以和現有JEEserver/Web容器無縫的結合。後端
Thrift可以讓你選擇client與服務端之間傳輸通訊協議的類別,在傳輸協議上總體上劃分爲文本(text)和二進制(binary)傳輸協議, 爲節約帶寬,提供傳輸效率,普通狀況下使用二進制類型的傳輸協議爲多數,但有時會仍是會使用基於文本類型的協議,這需要依據項目/產品中的實際需求:api
Thrift與其它傳輸方式的比較 網絡
假定需要傳輸一樣的內容。但使用不一樣的方式從一、傳輸內容所產生的大小 二、傳輸過程當中服務端和client所產生的開銷,這2個方便進行比較。使用Thrift和其它方式的所產生的內容大小比較結果例如如下:數據結構
在上圖中咱們能明顯看出,最臃腫的是RMI,其次是xml,使用Thrift的TCompactProtocol協議和Google 的 Protocol Buffers 相差的不算太多,相比而言仍是Google 的 Protocol Buffers效果最佳。多線程
Thrift用於Quara系統後端數據的通訊,服務端是用C++來實現的。client則是python。 Quara背景:Quara是在線問答服務公司,相似新浪微博和百度知道的合體。消息靈通人士透露,去年Quara得到了1400萬美圓投資。眼下他們僅僅有9名員工。 原文:http://www.philwhln.com/quoras-technology-examined#thrift
Thrift用於在多種Evernote API平臺開發的client與Evernoteserver之間的通訊與傳輸數據,Evernote API定義了本身的Evernote Data Access and Management (EDAM) 協議規範,讓client使用更小的網絡帶寬上傳、下載文件和在線即時搜索服務。 Evernote 背景:EverNote是一款很著名的免費軟件,它最大的特色就是支持多平臺,而且數據能經過網絡互一樣步。譬如說,你可以隨時在手機上的Evernote新增筆記,回家後在電腦上也能看到它了。 原文:http://www.evernote.com/about/developer/api/evernote-api.htm HBase 中的Thrift Thrift用於HBase中是爲了提供跨平臺的服務接口,在HBase 中可以使用[hbase-root]/bin/hbase thrift start 命令啓動涵蓋Thrift的HBase服務端。client經過thrift的命令生成不一樣版本號的client代碼,依據定義的數據格式。對遠程HBase服務端進行 操做。是除了REST遠程方法調用的還有一種途徑。 參見:http://wiki.apache.org/hadoop/Hbase/ThriftApi