`
thecloud
  • 浏览: 883194 次
文章分类
社区版块
存档分类
最新评论

Thrift之TProtocol类体系原理及源码详细解析之稠密协议类TDenseProtocol

 
阅读更多

我的新浪微博:http://weibo.com/freshairbrucewoo

欢迎大家相互交流,共同提高技术。

这个协议类不建议投入到实际的生产环境(除非自己做了很强的压力和全面的测试)。这个密集协议的最大作用就是尽可能使用小的空间,密集协议类有两种类型的实例对象,一种是独立的,它不被使用在rpc通信中,而只是用于编码和解码;另一种是非独立的实例类型,它可以用于rpc通信,不过现在还不支持这种类型的实例。

要使用这个密集协议类来进行编码和解码必须支持Thrift自己实现的一直特殊的记录数据类型形式:就是type_spec属性,它的主要作用就是用于本地化反射机制来进行读写数据。

最佳的实践方法如下:

(1)永远不要使用可选的原语或容器类型;

(2)如果数据类型非常的大或非常的稀少那么使用结构体类型(struct);

(3)所有整数类型使用可变长的,能够使用i64类型避免膨胀;

(4)永远不要以任何方式修改结构体的定义而不改变换成的键,否则会造成恐慌的错误。

这个密集协议类继承至二进制协议类,所以可以直接使用二进制协议类的一些协议方法。

那么这个协议类相比前面的协议类又有什么优势和不足。既然这个协议类是后面逐渐发展起来的,那么它肯定有自己的优势和适合的应用场景,据我学习之,它的优势如下:

(1)相比较二进制协议它使用了可变长编码,当然紧凑协议类也实现了这个来减少整数型数据的传输流量,那么它相对于紧凑协议类又有什么优势?请看下面一条;

(2)相对于紧凑协议类它减少了一部分元数据的传输,例如struct结构里面的字段id和数据类型,这样就极大的减少了流量,当然速度也就自然提升了不少。

虽然它有这些优势,但是它的缺陷也是比较明显的,主要有以下三点:

(1)抽象将失去效果;

(2)必须维持第二个代码生成器;

(3)想要保持与旧版本的兼容将是是非常困难的。

通过它的优势和缺陷的分析发现,它们都是那么的鲜明,所以选择这个协议作为传输层之上的协议类型需要经过比较慎重的考虑,优点其实就是靠牺牲抽象性、易维护和向前兼容来提升数据传输速度和减少流量。

那么实现这个协议类需要用到什么特殊的技术,通过代码和注释发现,主要两点技术,一个是可变长编码,这个在紧凑协议类中已经实现和介绍;另一个技术就是消除一些传输的元数据。消除元数据的传输需要支持Thrift的编译器和牺牲一些二进制协议的向前和向后的兼容性。

上面分析了密集协议类的优秀和不足,但是就目前而言这个类还是处于试验的阶段,不能投入真正的生产环境,所以就不具体分析代码的实现了,有兴趣的同仁们可以自己看看代码的实现,使用到的技术前面已经介绍了。


分享到:
评论

相关推荐

    thrift源码

    thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码thrift源码...

    使用wireshark抓取thrift协议接口调用

    使用wireshark抓取thrift协议接口调用

    thrift包及其源码

    thrift0.9.1版本的jar包,还有源码,可供大家参考学习使用。

    Apache Thrift Java实战源码,包含了客户端和服务端源码

    Apache Thrift Java实战源码,包含了客户端和服务端源码,客户端和服务端是分开的,如果需要放到一个工程,直接把Client.java文件复制到服务端运行即可。

    thrift源码+DEMO+简单教程

    thrift源码+DEMO+简单教程

    windows下vs2010编译的thrift,包含lib和cpp源码

    windows下vs2010完美编译thrift,包含lib文件和src源码,thrift版本为thrift-0.11.0

    Thrift之C++初体验

    thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, ...

    libthrift-1.0.0.jar,thrift例子,thrift源码

    libthrift-1.0.0.jar,thrift例子,thrift源码 里面有你想要java版的thrift全部文件

    Apache Thrift 使用说明

    详细介绍了Apache Thrift在Ubuntu以及Windows下基于C++和Java语言的安装和运行。附有小例子,亲自测试通过。所述方法网上应该有教程,但大多零散不统一或者不完整,因此本人整理了一份,特来分享。

    thrift实现http协议案例

    thrift实现http协议案例,thrift官方好像就一个socket,此案例是通过继承servlet实现http协议通信

    thrift官方代码+与dubbo集成支持原生thrift协议

    thrift官方代码+与dubbo集成支持原生thrift协议

    thrift初步了解

    不要认为thrift能在*.thrift文件中定义调度之类的工作 thrift通过IDL(接口描述语言)来生成各种语言需要的接口代码。 执行thrift文件命令: java:thrift-0.9.1.exe --gen java test.thrift java:thrift-0.9.1.exe ...

    支持thrift协议的纯java版的增强工具集合, pojo直接转换为thrift,json/xml转换为thrift

    thrift-enhancer是一组支持thrift协议的加强包,设计...thrift-translator: 提供动态解析idl并生成参数对象的能力,动态生成的参数对象可以自动转换为thrift协议数据,同时提供 thrift与json、xml的双向转换, 动态解析

    thrift-0.9.2.tar.gz

    thrift,Apache Thrift 0.9.2 版本,解压后直接直接安装,可伸缩的跨语言服务开发框架,命令: 解压命令:tar -zxf thrift-0.9.2.tar.gz 安装命令:./configure --with-lua=no && make && make install 查看版本:...

    编译的spark-hive_2.11-2.3.0和 spark-hive-thriftserver_2.11-2.3.0.jar

    spark-hive_2.11-2.3.0...spark-hive-thriftserver_2.11-2.3.0.jar log4j-2.15.0.jar slf4j-api-1.7.7.jar slf4j-log4j12-1.7.25.jar curator-client-2.4.0.jar curator-framework-2.4.0.jar curator-recipes-2.4.0.jar

    thrift例子

    NULL 博文链接:https://andilyliao.iteye.com/blog/1931911

    thrift 源码(一种可伸缩的跨语言服务的发展软件框架)

    thrift是一种可伸缩的跨语言服务的发展软件框架。它结合了功能强大的软件堆栈的代码生成引擎,以建设服务,工作效率和无缝地与C + +,C#,Java,Python和PHP和Ruby结合。thrift是facebook开发的,我们现在把它作为...

    flume通过thrift协议收集日志-Python

    flume通过thrift协议收集日志-Python。博客地址:http://blog.csdn.net/wangshuwei5/article/details/48902757

    基于Scala的Spark Thrift Server设计源码

    本设计源码提供了一个基于Scala的Spark Thrift Server。项目包含12731个文件,主要使用Scala、Java、Python、Shell、JavaScript、CSS、HTML、Ruby和C编程语言。文件类型包括3539个Scala源代码文件、1559个Q文件、...

    thrift-0.9.3.exe

    Thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。thrift允许你定义一个简单的定义文件中的数据类型和服务接口。以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨...

Global site tag (gtag.js) - Google Analytics