thrift 是由facebook貢獻,目前由apache在推進(jìn)的一個(gè)開(kāi)源項目。它主要是作為一個(gè)可靠的RPC 框架來(lái)使用,當然它也包含了序列化與反序列化的功能。對比其他的具備類(lèi)似功能的開(kāi)源工具,thrift在語(yǔ)言支持、性能、可靠性、易用性上具有相當的優(yōu)勢。
1. 語(yǔ)言支持
C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml等,十分方便在不同的語(yǔ)言或組件之間交互和協(xié)作。
2. IDL 描述
thrift依靠 IDL 來(lái)描述提供的服務(wù)和接口。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通過(guò)編譯IDL文件,為不同的語(yǔ)言生成對應的client以及server端代碼模板。以生成c++代碼為例
thrift --gen cpp job.thrift
service SharedService {
i32 exeucte(1: JobInfo job)
}
依賴(lài)IDL的一個(gè)不足之處,就是在實(shí)現應用時(shí),必須預先知道要提供的服務(wù)的接口細節。一旦確定了thrift IDL描述并編碼成代碼之后,就無(wú)法在運行期動(dòng)態(tài)的改變服務(wù)接口了。這對于大型系統來(lái)說(shuō),會(huì )有一定的限制。在這個(gè)問(wèn)題上apache avro提供了一個(gè)新的思路。有興趣的同學(xué)可以研究一下apache avro的generic 方式動(dòng)態(tài)加載schema的機制
3. 性能
作為一個(gè)RPC框架,其性能方面主要是比拼序列化和反序列化兩個(gè)方面。這方面的對手當然是google protobuf了。(實(shí)際上還有avro,這里偷個(gè)懶)
序列化的性能對比(ms)
反序列化的性能對比(ms)
從這個(gè)數據上來(lái)看,thrift要比protobuf 快近1倍。
4. 可靠性
不詳述
5. 在windows上使用 thrift 的一些問(wèn)題
thrift在開(kāi)發(fā)過(guò)程可以說(shuō)是完全沒(méi)有照顧windows的打算,一直到目前最新的0.8.0版本,根據IDL生成的代碼都是無(wú)法在windows上編譯運行的。甚至thrift 本身的lib庫代碼在windows上都是無(wú)法正常運作的。需要解決一下幾個(gè)問(wèn)題
解決以上問(wèn)題后能保證thrift client正常運作。
解決了以上問(wèn)題之后,能保證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網(wǎng)站地圖 百度網(wǎng)站地圖 網(wǎng)站地圖
公司地址:大連市沙河口區中山路692號辰熙星海國際2317 客服電話(huà):0411-39943997 QQ:2088827823 37482752
法律聲明:未經(jīng)許可,任何模仿本站模板、轉載本站內容等行為者,本站保留追究其法律責任的權利! 隱私權政策聲明