- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Thrift框架数据交换方案
基于Thrift框架数据交换方案
摘 要:在实际应用中,异构系统之间经常需要进行数据的交换。Facebook公司开发的Thrift框架通过强大的代码生成引擎,可快速构建数据交换接口。文章基于Thrift技术阐述异构系统间的数据交换方案,从而实现跨语言跨平台的数据传输。
关键词:Thrift框架;异构系统;数据交换
前言
系统间的数据交换方案是软件构建中的重要组成部分。数据交换的常用方式包括Web Service、消息中间件以及远程过程调用(RPC,Remote Procedure Call)等。其中,Web Service和消息中间件方式是通过消息报文的形式直接或者间接地实现数据的交换。在此方式下,数据在传输前需封装成特定格式的消息报文,而传输完成后又需对该消息报文进行解封装以获得实际数据。这在进行大量的数据传输时效率并不高。RPC方式通过本地客户端的过程声明来调用远程服务端的方法实现数据的交换。面向对象的系统构建中,RPC方式的优点是可将交换数据以对象的形式进行传输,因此效率更高。在实际中,进行数据传输的系统大多是异构系统,如何通过RPC方式构建适合异构系统间的数据交换方案是个重要问题。文章将基于开源的Thrift框架,阐述一种跨语言跨平台的数据交换方案。
1 Thrift框架
Thrift软件框架最初由Facebook开发,2008年5月成为Apache子项目。它支持跨语言服务的开发,通过功能强大的软件堆栈和代码生成引擎,可构建基于C++、Java、Python、PHP、Ruby、Perl、C#、Cocoa、JavaScript等编程语言的客户端和服务器端。
Thrift实际上实现了RPC模式,通过代码生成引擎将接口定义文件生成客户端和服务器端代码,从而实现通信系统间的跨语言支持。通过特定的描述语言定义好接口文件中的数据类型和服务接口,并以此作为输入文件,编译器则会生成RPC的客户端和服务器端实现。另外,由生成的代码负责RPC协议层和传输层的实现。因此,对于异构系统,用户只需维护统一的接口文件,无需手动为特定的语言重新编写该文件。
用户只需在Thrift接口文件中声明自己的服务,这些服务经过编译后会生成相应语言的代码文件,用户只需实现这些服务。
2 数据交换方案
本节阐述基于Thrift框架的数据交换方案。以Java语言为例,通过定义数据交换的数据结构以及接口方法,构建服务端和客户端服务代码,从而实现数据交换功能。
2.1 数据交换架构
进行数据交换的系统分为客户端和服务器端。服务器端响应客户端的请求。客户端则通过调用服务器端的方法向服务器端接收或者发送数据。客户端和服务器端的数据结构与接口是一致的,然后通过Thrift的特定代码生成引擎编译出不同的语言版本,从而实现跨语言跨平台的调用。图1描述了数据交换的框架图。从图可以看出,两方系统通过Thrift自动生成的数据交换接口实现数据交换。
图1 数据交换的框架图
2.2 数据交换流程
基于Thrift技术的数据交换流程主要分三步。首先要定义交换数据的格式;其次定义接收或者发送数据的接口;然后,通过Thrift代码生成引擎为各系统生成数据接口的底层实现。最后,实现具体的数据交换的业务功能。定义数据格式和数据接口是通过thrift文件来描述的,在该文件定义数据的各项信息以及接口函数的原型。Thrift根据该文件会生成特点版本的数据接口实现。开发者只需关心数据交换的业务功能。
2.3 数据交换实现
本节将假设C系统(客户端)向S系统(服务器端)传输一个包含姓名、性别、身份证号码信息的报文来阐述实现方案。
首先,为所传输的报文定义数据结构格式以及接口调用方法,其定义文件如表1所示。该文件需定义结构以及服务。在表1中,Message结构包括ID、sex以及name这三项信息,而MessageStorage服务中定义了saveMessage方法。值得指出的是,这里定义的函数方法只需定义原型,其具体实现由开发者根据业务功能编写。该文件以.thrift后缀名保存,如message.thrift。
表1 Thrift的定义文件
接下来需根据该文件通过Thrift代码生成引擎生成数据交换接口代码。本例生成Java版本。具体是运行thrift-r-gen java message.thrift 命令。由于message.thrift文件中有一个结构体Message和一个服务MessageStorage,Thrift引擎会生成两个java文件:Message.java和MessageStorage.java。
然后,根据业务功能编写代码。在项目工程中需引入上述步骤生成的两
文档评论(0)