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
法律声明:未经许可,任何模仿本站模板、转载本站内容等行为者,本站保留追究其法律责任的权利! 隐私权政策声明