大连仟亿科技
客服中心
  • 电话
  • 电话咨询:0411-39943997
  • 手机
  • 手机咨询:15840979770
    手机咨询:13889672791
网络营销 >更多
您现在的位置:仟亿科技 > 新闻中心 > 常见问题

开源项目thrift应用 和一些已知的问题

作者:billionnet 发布于:2012/5/10 17:29:58 点击量:

 

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上都是无法正常运作的。需要解决一下几个问题

  • 初始化windows socket library
  • socket server在listen之前需要先bind。需要修改TServerSocket.cpp的listen函数

解决以上问题后能保证thrift client正常运作。

  • socket的flag需要修改为0,windows不支持AI_PASSIVE | AI_ADDRCONFIG
  • socket的协议族要修改为PF_INET

解决了以上问题之后,能保证thrift server在win7上正常运作。若需要thrift 在windows XP也能正常运行,还需要修改

  • 编译thrift时,强制指定WINVER=0×501
  • 在listen函数中增加如下代码

#if WINVER<=0x502
// on WINDOWS XP platform, after poll(actually select) operation,
// the revents field will not be set
fds[0].revents = POLLIN;
#endif

  • 建立socket server时,必须指定acceptTimeout,至少为100ms。如果使用默认值,会导致应用进入死循环,占用全部CPU


分享到:


评论加载中...
内容:
评论者: 验证码:
  

Copyright@ 2011-2017 版权所有:大连仟亿科技有限公司 辽ICP备11013762-1号   google网站地图   百度网站地图   网站地图

公司地址:大连市沙河口区中山路692号辰熙星海国际2215 客服电话:0411-39943997 QQ:2088827823 42286563

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