Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。
架构Thrift实际上是实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码(可以为不同语言),从而实现服务端和客户端跨语言的支持。用户在Thirft描述文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,然后用户实现服务(客户端调用服务,服务器端提供服务)便可以了。其中protocol(协议层, 定义数据传输格式,可以为二进制或者XML等)和transport(传输层,定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。
传输支持的传输格式- TBinaryProtocol – 二进制格式.
- TCompactProtocol – 压缩格式
- TJSONProtocol – JSON格式
- TSimpleJSONProtocol –提供JSON只写协议, 生成的文件很容易通过脚本语言解析。
- TDebugProtocol – 使用易懂的可读的文本格式,以便于debug
支持的数据传输方式- TSocket -阻塞式socker
- TFramedTransport – 以frame为单位进行传输,非阻塞式服务中使用。
- TFileTransport – 以文件形式进行传输。
- TMemoryTransport – 将内存用于I/O. java实现时内部实际使用了简单的ByteArrayOutputStream。
- TZlibTransport – 使用zlib进行压缩, 与其他传输方式联合使用。当前无java实现。
支持的服务模型- TSimpleServer – 简单的单线程服务模型,常用于测试
- TThreadPoolServer – 多线程服务模型,使用标准的阻塞式IO。
- TNonblockingServer – 多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式)
Thrift安装下载地址:
- 安装要求:Unix/linux 系统,windows+cygwin
- C++语言:g++、boost
- java 语言:JDK、Apache Ant
- 其他语言:Python、PHP、Perl, etc…
编译安装:
./configure makemake install |