基于Thrift框架的数据交换方案_第1页
基于Thrift框架的数据交换方案_第2页
基于Thrift框架的数据交换方案_第3页
基于Thrift框架的数据交换方案_第4页
基于Thrift框架的数据交换方案_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

精选优质文档-----倾情为你奉上精选优质文档-----倾情为你奉上专心---专注---专业专心---专注---专业精选优质文档-----倾情为你奉上专心---专注---专业基于Thrift框架的数据交换方案摘要:在实际应用中,异构系统之间经常需要进行数据的交换。Facebook公司开发的Thrift框架通过强大的代码生成引擎,可快速构建数据交换接口。文章基于Thrift技术阐述异构系统间的数据交换方案,从而实现跨语言跨平台的数据传输。关键词:Thrift框架;异构系统;数据交换前言系统间的数据交换方案是软件构建中的重要组成部分。数据交换的常用方式包括WebService、消息中间件以及远程过程调用(RPC,RemoteProcedureCall)等。其中,WebService和消息中间件方式是通过消息报文的形式直接或者间接地实现数据的交换。在此方式下,数据在传输前需封装成特定格式的消息报文,而传输完成后又需对该消息报文进行解封装以获得实际数据。这在进行大量的数据传输时效率并不高。RPC方式通过本地客户端的过程声明来调用远程服务端的方法实现数据的交换。面向对象的系统构建中,RPC方式的优点是可将交换数据以对象的形式进行传输,因此效率更高。在实际中,进行数据传输的系统大多是异构系统,如何通过RPC方式构建适合异构系统间的数据交换方案是个重要问题。文章将基于开源的Thrift框架,阐述一种跨语言跨平台的数据交换方案。1Thrift框架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。表1Thrift的定义文件接下来需根据该文件通过Thrift代码生成引擎生成数据交换接口代码。本例生成Java版本。具体是运行thrift-r-genjavamessage.thrift命令。由于message.thrift文件中有一个结构体Message和一个服务MessageStorage,Thrift引擎会生成两个java文件:Message.java和MessageStorage.java。然后,根据业务功能编写代码。在项目工程中需引入上述步骤生成的两个java文件以及相应的lib包。这里,服务器端首先要实现Thrift定义文件中所定义的service,即MessageStorage方法。在本例的MessageStorage方法中,先打印接收到的报文中的姓名信息,然后再持久化保存,如表2所示。表2Thrift服务器端核心代码服务器端的流程如下:(1)创建模型类型(Handler);(2)基于Handler创建数据处理器(Processor);(3)创建数据传输方式(Transport);(4)创建数据传输协议(Protocol);(5)基于Processor、Transport和Protocol创建服务器模型(Server);(6)运行Server。其中,Transport定义数据传输方式,可以为TCP/IP传输、内存共享或者文件共享等。如TFileTransport是文件(日志)传输类、THttpTransport采用Http传输协议进行数据传输、TSocket则用TCPSocket进行数据传输、TZlibTransport会压缩后对数据进行传输,支持二进制或者XML。Protocol定义传输的数据格式,包括使用二进制格式的TBinaryProtocol、使用压缩格式的TCompactProtocol、使用JSON格式的TJSONProtocol等。服务器端的核心代码如表2所示。表3Thrift客户端核心代码这里选择TThreadPoolServer线程池服务模型,使用标准的阻塞式IO,预先创建一组线程处理请求。当有客户端连接过来时,从线程池里分配可用的连接处理客户端请求。常用的TServer子类还包括:TSimpleServer:简单的单线程服务模型,常用于测试;TThreadedServer:多线程服务模型,使用阻塞式IO,为每个请求创建一个线程。TNonblockingServer:多线程服务模型,使用非阻塞式IO。如果服务需要处理大量更新,则主要选择TThreadedServer和TNonblockingServer。TNonblockingServer能够使用少量线程处理大量并发连接,但延迟较高;相比之下,TThreadedServer的延迟较低。实际中,TThreadedServer的吞吐量可能会比TNonblockingServer高,但它的CPU占用率也比TNonblockingServer高很多。客户端通过调用服务端的方法传输定义好的Message对象。具体的步骤为:(1)创建数据传输方式(Transport);(2)创建数据传输协议(Protocol);(3)创建客户模型(Client);(4)调用Client的相应方法。核心代码见表3。3结束语Thrift实现了异构系统间的数据传输方案。并且数据结构定义简单,适合快速生成系统的数据交换接口。此外,Thrift结合了功能强大的软件堆栈,可方便地生成不同开发语言的RPC客户端和服务器端,能统一构建底层框架。因此,Thrift可以有效地解

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论