天天看点

什么是Thrift

百度百科怎么说

它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa,

JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

thrift最初由facebook开发,07年四月开放源代码,08年5月进入apache孵化器。

thrift同意你定义一个简单的定义文件里的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPCclient和server通信的无缝跨编程语言。

互动百科的观点

thrift能够通过定义的脚本自己主动生成不同语言的代

码以支持不同语言之间的通信。thrift支持多种数据通信协议,比方xml,jason,binnary等等。

Thrift并非唯一的跨语言通信框架。像google的protocol buffers也是与之类似的框架。

关于两者之前的比較能够去google一下。

我的总结

框架

开源项目

通讯中间件

跨语言

RPC服务(Remote Procedure Call Protocol——远程过程调用协议)

IDL工具(Interface Description Language——接口描写叙述语言)

高并发

TCompactProtocol协议

Thrift适用于程序对程 序静态的数据交换,须要先确定好他的数据结构,他是全然静态化的,当数据结构发生变化时,必须又一次编辑IDL文件,代码生成,再编译加载的流程,跟其它 IDL工具相比較能够视为是Thrift的弱项,Thrift适用于搭建大型数据交换及存储的通用工具,对于大型系统中的内部传输数据相对于JSON和 xml不管在性能、传输大小上有明显的优势。

什么是Thrift

Thrift是一个服务端和client的架构体系。从我个人的感官上来看Thrift是一个类似XML-RPC+Java-to- IDL+Serialization Tools=Thrift 的东东。Thrift 具有自己内部定义的传输协议规范(TProtocol)和数据传输标准(TTransports)。通过IDL脚本对数据传输的数据结构(struct) 和数据传输的业务逻辑(service)依据不同的执行环境高速的构建对应的代码,而且通过自己内部的序列化机制对传输的数据进行简化和压缩提高高并发、 大型系统中数据交互的成本,下图描绘了Thrift的总体架构。分为6个部分:1.你的业务逻辑实现(You Code) 2.client和服务端相应的Service 3.运行读写操作的计算结果4.TProtocol 5.TTransports 6.底层I/O通信。

什么是Thrift

说明:图中前面3个部分是1.你通过Thrift脚本文件生成的代码,2.图中的褐色框部分是你依据生成代码构建的client和处理器的代码,3.图中红色的部分是2 端产生的计算结果。

从TProtocol以下3个部分是Thrift的传输体系和传输协议以及底层I/O通信,Thrift而且提供 阻塞、非阻塞,单线程、多线程的模式执行在server上,还能够配合server/容器一起执行,能够和现有JEEserver/Web容器无缝的结合。

Base Types:基本类型

Struct:结构体类型

Container:容器类型,即List、Set、Map

Exception:异常类型

Service: 定义对象的接口,和一系列方法

Thrift能够让你选择client与服务端之间传输通信协议的类别,在传输协议上整体上划分为文本(text)和二进制(binary)传输协议, 为节约带宽,提供传输效率,普通情况下使用二进制类型的传输协议为多数,但有时会还是会使用基于文本类型的协议,这须要依据项目/产品中的实际需求:

TBinaryProtocol – 二进制编码格式进行传输数据。

TCompactProtocol – 这样的协议很有效的。使用Variable-Length Quantity (VLQ) 编码对数据进行压缩。

TJSONProtocol – 使用JSON的数据编码协议进行传输数据。

TSimpleJSONProtocol – 这样的节约仅仅提供JSON仅仅写的协议,适用于通过脚本语言解析

TDebugProtocol – 在开发的过程中帮助开发者调试用的,以文本的形式展现方便阅读。

TSocket- 使用阻塞式I/O进行传输,也是最常见的模式。

TFramedTransport- 使用非阻塞方式,按块的大小。进行传输,类似于Java中的NIO。

TFileTransport- 顾名思义依照文件的方式进程传输,尽管这样的方式不提供Java的实现。可是实现起来很easy。

TMemoryTransport- 使用内存I/O。就好比Java中的ByteArrayOutputStream实现。

TZlibTransport- 使用运行zlib压缩,不提供Java的实现。

TSimpleServer - 单线程server端使用标准的阻塞式I/O。

TThreadPoolServer - 多线程server端使用标准的阻塞式I/O。

TNonblockingServer – 多线程server端使用非阻塞式I/O,而且实现了Java中的NIO通道。

Thrift与其它传输方式的比較

xml与JSON相比。体积太大。可是xml传统。也不算复杂。

json体积较小,新颖。但不够完好。

thrift体积超小,使用起来比較麻烦,不如前两者轻便。可是对于1.高并发、2.传输数据量大、3.多语言环境, 满足当中2点使用 thrift还是值得的。

什么是Thrift

在上图中我们能明显看出,最臃肿的是RMI,其次是xml,使用Thrift的TCompactProtocol协议和Google 的 Protocol Buffers 相差的不算太多,相比而言还是Google 的 Protocol Buffers效果最佳。

什么是Thrift
什么是Thrift
什么是Thrift

传输数据量大

多语言环境 

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5183519.html,如需转载请自行联系原作者