百度百科怎麼說
它結合了功能強大的軟體堆棧和代碼生成引擎,以建構在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa,
JavaScript, Node.js, Smalltalk, and OCaml 這些程式設計語言間無縫結合的、高效的服務。
thrift最初由facebook開發,07年四月開放源代碼,08年5月進入apache孵化器。
thrift同意你定義一個簡單的定義檔案裡的資料類型和服務接口。以作為輸入檔案,編譯器生成代碼用來友善地生成RPCclient和server通信的無縫跨程式設計語言。
互動百科的觀點
thrift能夠通過定義的腳本自己主動生成不同語言的代
碼以支援不同語言之間的通信。thrift支援多種資料通信協定,比方xml,jason,binnary等等。
Thrift并非唯一的跨語言通信架構。像google的protocol buffers也是與之類似的架構。
關于兩者之前的比較能夠去google一下。
我的總結
架構
開源項目
通訊中間件
跨語言
RPC服務(Remote Procedure Call Protocol——遠端過程調用協定)
IDL工具(Interface Description Language——接口描寫叙述語言)
高并發
TCompactProtocol協定
Thrift适用于程式對程 序靜态的資料交換,須要先确定好他的資料結構,他是全然靜态化的,當資料結構發生變化時,必須又一次編輯IDL檔案,代碼生成,再編譯加載的流程,跟其它 IDL工具相比較能夠視為是Thrift的弱項,Thrift适用于搭建大型資料交換及存儲的通用工具,對于大型系統中的内部傳輸資料相對于JSON和 xml不管在性能、傳輸大小上有明顯的優勢。

Thrift是一個服務端和client的架構體系。從我個人的感官上來看Thrift是一個類似XML-RPC+Java-to- IDL+Serialization Tools=Thrift 的東東。Thrift 具有自己内部定義的傳輸協定規範(TProtocol)和資料傳輸标準(TTransports)。通過IDL腳本對資料傳輸的資料結構(struct) 和資料傳輸的業務邏輯(service)依據不同的執行環境高速的建構對應的代碼,而且通過自己内部的序列化機制對傳輸的資料進行簡化和壓縮提高高并發、 大型系統中資料互動的成本,下圖描繪了Thrift的總體架構。分為6個部分:1.你的業務邏輯實作(You Code) 2.client和服務端相應的Service 3.運作讀寫操作的計算結果4.TProtocol 5.TTransports 6.底層I/O通信。
說明:圖中前面3個部分是1.你通過Thrift腳本檔案生成的代碼,2.圖中的褐色框部分是你依據生成代碼建構的client和處理器的代碼,3.圖中紅色的部分是2 端産生的計算結果。
從TProtocol以下3個部分是Thrift的傳輸體系和傳輸協定以及底層I/O通信,Thrift而且提供 阻塞、非阻塞,單線程、多線程的模式執行在server上,還能夠配合server/容器一起執行,能夠和現有JEEserver/Web容器無縫的結合。
Base Types:基本類型
Struct:結構體類型
Container:容器類型,即List、Set、Map
Exception:異常類型
Service: 定義對象的接口,和一系列方法
Thrift能夠讓你選擇client與服務端之間傳輸通信協定的類别,在傳輸協定上整體上劃分為文本(text)和二進制(binary)傳輸協定, 為節約帶寬,提供傳輸效率,普通情況下使用二進制類型的傳輸協定為多數,但有時會還是會使用基于文本類型的協定,這須要依據項目/産品中的實際需求:
TBinaryProtocol – 二進制編碼格式進行傳輸資料。
TCompactProtocol – 這樣的協定很有效的。使用Variable-Length Quantity (VLQ) 編碼對資料進行壓縮。
TJSONProtocol – 使用JSON的資料編碼協定進行傳輸資料。
TSimpleJSONProtocol – 這樣的節約僅僅提供JSON僅僅寫的協定,适用于通過腳本語言解析
TDebugProtocol – 在開發的過程中幫助開發者調試用的,以文本的形式展現友善閱讀。
TSocket- 使用阻塞式I/O進行傳輸,也是最常見的模式。
TFramedTransport- 使用非阻塞方式,按塊的大小。進行傳輸,類似于Java中的NIO。
TFileTransport- 顧名思義依照檔案的方式程序傳輸,盡管這樣的方式不提供Java的實作。可是實作起來很easy。
TMemoryTransport- 使用記憶體I/O。就好比Java中的ByteArrayOutputStream實作。
TZlibTransport- 使用運作zlib壓縮,不提供Java的實作。
TSimpleServer - 單線程server端使用标準的阻塞式I/O。
TThreadPoolServer - 多線程server端使用标準的阻塞式I/O。
TNonblockingServer – 多線程server端使用非阻塞式I/O,而且實作了Java中的NIO通道。
Thrift與其它傳輸方式的比較
xml與JSON相比。體積太大。可是xml傳統。也不算複雜。
json體積較小,新穎。但不夠完好。
thrift體積超小,使用起來比較麻煩,不如前兩者輕便。可是對于1.高并發、2.傳輸資料量大、3.多語言環境, 滿足當中2點使用 thrift還是值得的。
在上圖中我們能明顯看出,最臃腫的是RMI,其次是xml,使用Thrift的TCompactProtocol協定和Google 的 Protocol Buffers 相差的不算太多,相比而言還是Google 的 Protocol Buffers效果最佳。
傳輸資料量大
多語言環境
本文轉自mfrbuaa部落格園部落格,原文連結:http://www.cnblogs.com/mfrbuaa/p/5183519.html,如需轉載請自行聯系原作者