thrift 是由facebook貢獻,目前由apache在推進的一個開源項目。它主要是作為一個可靠的RPC 框架來使用,當然它也包含了序列化與反序列化的功能。對比其他的具備類似功能的開源工具,thrift在語言支持、性能、可靠性、易用性上具有相當的優勢。
1. 語言支持
C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml等,十分方便在不同的語言或組件之間交互和協作。
2. IDL 描述
thrift依靠 IDL 來描述提供的服務和接口。IDL 例子如下
namespace cpp shared
namespace java shared
namespace perl shared
struct JobInfo {
1: i32 jobId
2: string jobName
3: string jobDescription
4: string executor
}
thrift通過編譯IDL文件,為不同的語言生成對應的client以及server端代碼模板。以生成c++代碼為例
thrift --gen cpp job.thrift
service SharedService {
i32 exeucte(1: JobInfo job)
}
依賴IDL的一個不足之處,就是在實現應用時,必須預先知道要提供的服務的接口細節。一旦確定了thrift IDL描述并編碼成代碼之后,就無法在運行期動態的改變服務接口了。這對于大型系統來說,會有一定的限制。在這個問題上apache avro提供了一個新的思路。有興趣的同學可以研究一下apache avro的generic 方式動態加載schema的機制
3. 性能
作為一個RPC框架,其性能方面主要是比拼序列化和反序列化兩個方面。這方面的對手當然是google protobuf了。(實際上還有avro,這里偷個懶)
序列化的性能對比(ms)
反序列化的性能對比(ms)
從這個數據上來看,thrift要比protobuf 快近1倍。
4. 可靠性
不詳述
5. 在windows上使用 thrift 的一些問題
thrift在開發過程可以說是完全沒有照顧windows的打算,一直到目前最新的0.8.0版本,根據IDL生成的代碼都是無法在windows上編譯運行的。甚至thrift 本身的lib庫代碼在windows上都是無法正常運作的。需要解決一下幾個問題
解決以上問題后能保證thrift client正常運作。
解決了以上問題之后,能保證thrift server在win7上正常運作。若需要thrift 在windows XP也能正常運行,還需要修改
#if WINVER<=0x502
// on WINDOWS XP platform, after poll(actually select) operation,
// the revents field will not be set
fds[0].revents = POLLIN;
#endif
Copyright@ 2011-2016 版權所有:大連千億科技有限公司 遼ICP備11013762-3號 google網站地圖 百度網站地圖 網站地圖
公司地址:大連市沙河口區中山路692號辰熙星海國際2317 客服電話:0411-39943997 QQ:2088827823 37482752
法律聲明:未經許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利! 隱私權政策聲明