thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。 thrift最初由facebook开发,07年四月开放源代码,08年5月进入apache孵化器。php
thrift赞成你定义一个简单的定义文件里的数据类型和服务接口。以做为输入文件,编译器生成代码用来方便地生成RPCclient和server通讯的无缝跨编程语言。python
Thrift是Facebook的核心技术框架之中的一个,使不一样语言开发的系统可以经过该框架进行通讯。开发人员使用thrift提供的格式来定义数据和服务脚本。thrift可以经过定义的脚本本身主动生成不一样语言的代 码以支持不一样语言之间的通讯。thrift支持多种数据通讯协议,比方xml,jason,binnary等等。 Thrift并不是惟一的跨语言通讯框架。像google的protocol buffers也是与之相似的框架。apache
关于二者以前的比較可以去google一下。编程
Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基金会将Thrift做为一个开源项目,对于当时的 facebook来讲创造thrift是为了解决facebook系统中各系统间大数据量的传输 通讯以及系统之间语言环境不一样需要跨平台的特性。因此thrift可以支持多种程序语言,好比: C++, C#, Cocoa, Erlang, Haskell, Java, Ocami, Perl, PHP, Python, Ruby, Smalltalk. 在多种不 同的语言之间通讯thrift可以做为二进制的高性能的通信中间件。支持数据(对象)序列化和多种类型的RPC服务。
说明:图中前面3个部分是1.你经过Thrift脚本文件生成的代码,2.图中的褐色框部分是你依据生成代码构建的client和处理器的代码,3.图中红色的部分是2 端产生的计算结果。json
从TProtocol如下3个部分是Thrift的传输体系和传输协议以及底层I/O通讯,Thrift并且提供 阻塞、非阻塞,单线程、多线程的模式执行在server上,还可以配合server/容器一块儿执行,可以和现有JEEserver/Web容器无缝的结合。后端
Thrift可以让你选择client与服务端之间传输通讯协议的类别,在传输协议上总体上划分为文本(text)和二进制(binary)传输协议, 为节约带宽,提供传输效率,普通状况下使用二进制类型的传输协议为多数,但有时会仍是会使用基于文本类型的协议,这需要依据项目/产品中的实际需求:api
Thrift与其它传输方式的比較 网络
假定需要传输一样的内容。但使用不一样的方式从一、传输内容所产生的大小 二、传输过程当中服务端和client所产生的开销,这2个方便进行比較。使用Thrift和其它方式的所产生的内容大小比較结果例如如下:数据结构
在上图中咱们能明显看出,最臃肿的是RMI,其次是xml,使用Thrift的TCompactProtocol协议和Google 的 Protocol Buffers 相差的不算太多,相比而言仍是Google 的 Protocol Buffers效果最佳。多线程
Thrift用于Quara系统后端数据的通讯,服务端是用C++来实现的。client则是python。 Quara背景:Quara是在线问答服务公司,相似新浪微博和百度知道的合体。消息灵通人士透露,去年Quara得到了1400万美圆投资。眼下他们仅仅有9名员工。 原文:http://www.philwhln.com/quoras-technology-examined#thrift
Thrift用于在多种Evernote API平台开发的client与Evernoteserver之间的通讯与传输数据,Evernote API定义了本身的Evernote Data Access and Management (EDAM) 协议规范,让client使用更小的网络带宽上传、下载文件和在线即时搜索服务。 Evernote 背景:EverNote是一款很著名的免费软件,它最大的特色就是支持多平台,而且数据能经过网络互一样步。譬如说,你可以随时在手机上的Evernote新增笔记,回家后在电脑上也能看到它了。 原文:http://www.evernote.com/about/developer/api/evernote-api.htm HBase 中的Thrift Thrift用于HBase中是为了提供跨平台的服务接口,在HBase 中可以使用[hbase-root]/bin/hbase thrift start 命令启动涵盖Thrift的HBase服务端。client经过thrift的命令生成不一样版本号的client代码,依据定义的数据格式。对远程HBase服务端进行 操做。是除了REST远程方法调用的还有一种途径。 參见:http://wiki.apache.org/hadoop/Hbase/ThriftApi