码迷,mamicode.com
首页 > 其他好文 > 详细

rpc框架之thrift教程2 - 基本概念

时间:2015-09-20 17:28:13      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

thrift的基本构架

技术分享

上图源自:http://jnb.ociweb.com/jnb/jnbJun2009.html

底层Underlying I/O以上的部分,都是由thrift编译器生成的代码,其中:

Your Code 这是根据thrift文件中定义的dto及service接口方法

FooService.Client及FooService.Processer是thrift生成的用于客户端及服务端的标准代码

Foo.read/write 参数对象及结果对象在传输时,最终需要在client、server间进行重写,红色框指的就是这个

TProtocal 指传输的内容是啥?(二进制?Json ? )由于TProtocal是一个抽象类,因此最终调用时,如果想从BinaryProtocal换成JsonProtocal,这部分代码也不用重新生成

TTransport 指用什么方式传输?(Scoket? Memory?File?)同样,TTransport是抽象类,运行时由具体子类决定运输方式

最底层的Underlying I/O则是依赖于各种语言的实现,负责底层的网络通讯,thrift最初是由c++写的,理论上讲,c++上的性能应该最好。

以上一章的demo为例如,QueryParameter及DemoService的类图如下:

技术分享

点击图片可以查看大图,从类图上看,大量使用了内部类(inner class),对于dto对象,内部类基本上分为_Fileds, Schema,SchemaFactory 三类,

_Fields 是一个枚举,罗列了dto的各种属性成员,

Schema 封装了write/read方法

SchemaFactory 是一个工厂,用于创建Schema实例

 

技术分享

服务接口的类图,就有点复杂了,密密麻麻象蜘蛛网,除了刚才的三大类外,DemoService的Inner Class中还有Client、Processor等类,大家有兴趣可以慢慢看。

 

TProtocal : 传输的内容(即:What? )

技术分享

从类图上看,支持 压缩格式、二进制格式、Json格式 等。

 

TTransport : 传输的方式(即:How? ) 

技术分享

Thrift支持的传输方式非常多,从类的命名就能大概看出一二。

 

TServer: Server的类图如下

技术分享

基本上分为二大类:一类是同步阻塞的Server,一类是非阻塞模式的Server,其中THsHaServer是一个Half-Sync/Half-Async 半同步,半异步的server

 

meta_data 元数据

技术分享

类图中的xxxMetaData,基本对应了 列表、K-V映射、(无重复元素)集合、结构(即:类)、枚举以及字段的元数据信息。

 

Schema :对不同类型的TProtocal的读写操作,在这里抽象出来。

技术分享

 

Variable-Length Quantity VLQ 变长编码
Thirft序列化之所以高效,跟采用VLQ变长编码有很大关系,直接借下面这张图来说吧:

技术分享

整数106903,在java中我们知道int占用4个bytes,也就是32bit,高位字节如果不满,用0填充(最高位符号位除外), 这样的话,很多用0填充的高位字节位置其实是浪费的,VLQ的基本思路是将2进制每7位分组,这样106903的2进制就可以分成3组,然后每1组的最高位设为1或0,如果为1,表示相邻的下一个字节还有内容,要继续读取,如果该位置为0,则表示结束了。

这样的话,106903最终只需要3个字节就可以存储了,节省了1个字节。

 

参考文章:

http://dongxicheng.org/search-engine/thrift-rpc/

http://blog.chinaunix.net/uid-20357359-id-2876170.html

http://jnb.ociweb.com/jnb/jnbJun2009.html

http://www.ibm.com/developerworks/cn/java/j-lo-apachethrift/

http://www.cnblogs.com/brucewoo/tag/Thrift/

rpc框架之thrift教程2 - 基本概念

标签:

原文地址:http://www.cnblogs.com/yjmyzz/p/4823082.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!