Thrift详细分析.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Thrift详细分析

Thrift 详细分析INF-DT-UDW 高耀Thrift介绍Thrift是一个用来实现跨程序语言的远程过程调用 (RPC Remote Procedure Call)的软件框架。Thrfit利用自身的协议栈和代码生成工具,根据接口定义语言(IDL Interface definition lanuage)构建可以在C++,Java,Python等程序语言之间进行无缝结合的高效服务。本文不对Thrift的使用做介绍,Thrift使用的相关参考资料:/static/thriftpdf Thrift White Paper/ Thrift官方网站/thrift/ThriftUsage Thrift 使用介绍/thrift/ Thrift Wiki/tutorial/ Thrift TutorialThrift vs ProtocolBuffer与ProtocolBuffer不同,Thrift不仅提供了跨语言的数据序列化和反序列化机制,更提供了跨语言的RPC实现。在Thrift的框架里,用户只需要实现用户逻辑即可完成从客户端到服务器的RPC调用。由于Thrift良好的模块设计,用户也可以非常方便的根据自己的需要选择合适的模块。例如RPC的Server既可以使用单线程的SimpleServer,也可以使用更高性能的多线程NonblockingServer。Thrift和ProtocolBuffer解决的一个主要问题是结构化数据的序列化和反序列化。图1是Thrift结构化数据的逻辑结构。与ProtocolBuffer不同,Thrift在结构化数据之前加入了一个MessageHeader,并使用MessageHeader来完成RPC调用。在MessageBoy上,Thrift和ProtocolBuffer的结构大致相同,每一个数据字段都由Meta信息和数据信息两部分组成。Meta的内容会随着数据信息的不同而发生变化,例如在表示String类型的数据时,Meta信息中会包含一个字长信息,而表示int32类型的数据,并不需要这种Meta信息。但一般都会包含字段类型(Byte,i32,String…)和字段编号两个Meta信息。Thrift不仅支持的程序语言比ProtocolBuffer多,而且支持的数据结构也比ProtocolBuffer要多。Thrift不仅支持Byte,i32,String等基本数据类型,更是支持List,Map,Set和Struct等复杂数据类型,但是Thrift在数据序列化和反序列化上的性能要比ProtocolBuffer稍微差一些。更多地Thrift和ProtocolBuffer的比较以及性能分析的资料可以参考:/articles/thrift-vs-protocol-buffers/ Thrift ProtocolBuffer比较/jnb/jnbJun2009.html Thrift特性介绍,Demo,性能分析/p/thrift-protobuf-compare/wiki/Benchmarking Thrift Benchmark图1 Thrift Message的逻辑结构Thrift ArchitectureThrift的协议栈如图2所示。在Client和Server的最顶层都是用户自定义的处理逻辑,也就是说用户只需要编写用户逻辑,就可以完成整套的RPC调用流程。用户逻辑的下一层是Thrift自动生成的代码,这些代码主要用于结构化数据的解析,发送和接收,同时服务器端的自动生成代码中还包含了RPC请求的转发(Client的A调用转发到Server A函数进行处理)。图2:Thrift协议栈协议栈的其他模块都是Thrift的运行时模块:底层IO模块,负责实际的数据传输,包括Socket,文件,或者压缩数据流等。TTransport负责以字节流方式发送和接收图1所示的Message结构,是底层IO模块在Thrift框架中的实现,每一个底层IO模块都会有一个对应TTransport来负责Thrift的字节流(Byte Stream)数据在该IO模块上的传输。例如TSocket对应Socket传输,TFileTransport对应文件传输。TProtocol主要负责结构化数据组装成图1所示的Message结构,或者从图1所示的Message结构中读出结构化数据。TProtocol将一个有类型的数据转化为字节流以交给TTransport进行传输,或者从TTransport中读取一定长度的字节数据转化为特定类型的数据。如int32会被TBinaryProtocol Encode为一个四字节的字节数据,或者TBinaryProtocol从TTransport中取出四个字节的数据Decode为int32。Pr

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档