➠更多技術干貨請戳:聽雲博客
Thrift是什麼?什麼情況下使用thrift
Thrift源於大名鼎鼎的facebook之手,在2007年facebook提交Apache基金會將Thrift作為一個開源項目,對於當時的facebook來說創造thrift是為了解決facebook系統中各系統間大數據量的傳輸通信以及系統之間語言環境不同需要跨平台的特性。所以thrift可以支持多種程序語言,例如: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多種不同的語言之間通信thrift可以作為二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。Thrift是IDL(interface definition language)描述性語言的一個具體實現,Thrift適用於程序對程序靜態的數據交換,需要先確定好他的數據結構,他是完全靜態化的,當數據結構發生變化時,必須重新編輯IDL文件,代碼生成,再編譯載入的流程,跟其他IDL工具相比較可以視為是Thrift的弱項,Thrift適用於搭建大型數據交換及存儲的通用工具,對於大型系統中的子系統間數據傳輸相對於JSON和xml無論在性能、傳輸大小上有明顯的優勢。
Thrift 基礎架構
Thrift是一個服務端和客戶端的架構體系,就是socket傳輸,Thrift 具有自己內部定義的傳輸協議規范(TProtocol)和傳輸數據標准(TTransports),通過IDL腳本對傳輸數據的數據結構(struct) 和傳輸數據的業務邏輯(service)根據不同的運行環境快速的構建相應的代碼,並且通過自己內部的序列化機制對傳輸的數據進行簡化和壓縮提高高並發、 大型系統中數據交互的成本,下圖描繪了Thrift的整體架構,分為6個部分:1.你的業務邏輯實現(You Code) 2.客戶端和服務端對應的Service 3.執行讀寫操作的計算結果4.TProtocol 5.TTransports 6.底層I/O通信
Thrift腳本的數據類型
* Base Types:基本類型
bool Boolean, one byte
byte Signed byte
i16 Signed 16-bit integer
i32 Signed 32-bit integer
i64 Signed 64-bit integer
double 64-bit floating point value
string String
binary Blob (byte array)
* Struct:結構體類型
* Container:容器類型,即List、Set、Map
map<t1,t2> Map from one type to another
list<t1> Ordered list of one type
set<t1> Set of unique elements of one type
* Exception:異常類型
* Service: 定義對象的接口,和一系列方法
協議
Thrift可以讓你選擇客戶端與服務端之間傳輸通信協議的類別,在傳輸協議上總體上劃分為文本(text)和二進制(binary)傳輸協議, 為節約帶寬,提供傳輸效率,一般情況下使用二進制類型的傳輸協議為多數,但有時會還是會使用基於文本類型的協議,這需要根據項目/產品中的實際需求:
* TBinaryProtocol – 二進制編碼格式進行數據傳輸。
* TCompactProtocol – 這種協議非常有效的,使用Variable-Length Quantity (VLQ) 編碼對數據進行壓縮。
* TJSONProtocol – 使用JSON的數據編碼協議進行數據傳輸。
* TSimpleJSONProtocol – 這種節約只提供JSON只寫的協議,適用於通過腳本語言解析
* TDebugProtocol – 在開發的過程中幫助開發人員調試用的,以文本的形式展現方便閱讀。
傳輸層
* TSocket- 使用堵塞式I/O進行傳輸,也是最常見的模式。
* TFramedTransport- 使用非阻塞方式,按塊的大小,進行傳輸,類似於Java中的NIO。
* TFileTransport- 顧名思義按照文件的方式進程傳輸,雖然這種方式不提供Java的實現,但是實現起來非常簡單。
* TMemoryTransport- 使用內存I/O,就好比Java中的ByteArrayOutputStream實現。
* TZlibTransport- 使用執行zlib壓縮,不提供Java的實現。
服務端類型
* TSimpleServer - 單線程服務器端使用標准的堵塞式I/O。
* TThreadPoolServer - 多線程服務器端使用標准的堵塞式I/O。
* TNonblockingServer – 多線程服務器端使用非堵塞式I/O,並且實現了Java中的NIO通道。
Thrift構建步驟總結(參考實例1)
1 、下載thrift.exe
到thrift官網下載,這裡我用的是0.9.3版本
http://thrift.apache.org/
2、將exe放到C:\Windows下(重命名為thrift.exe)
3、C:\Windows創建.thrift文件,編寫ThriftServer.thrift代碼
4、在目錄下執行thrift.exe -r -gen java ./ThriftServer.thrift;執行成功後看到在該目錄下生成了gen-java文件夾,在該文件夾中生成了IThriftServer.java;
5、將IThriftServer.java拷貝到server端,進行後續編寫即可。
6、如果client和server端是跨應用,那麼需要server端先編譯打包成jar,將這個jar添加到client端的依賴中。
原文鏈接:http://blog.tingyun.com/web/article/detail/1083