999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Thrift框架的數(shù)據(jù)交換方案

2015-05-04 07:48:28梁明炯
科技創(chuàng)新與應(yīng)用 2015年13期

梁明炯

摘 要:在實(shí)際應(yīng)用中,異構(gòu)系統(tǒng)之間經(jīng)常需要進(jìn)行數(shù)據(jù)的交換。Facebook公司開(kāi)發(fā)的Thrift框架通過(guò)強(qiáng)大的代碼生成引擎,可快速構(gòu)建數(shù)據(jù)交換接口。文章基于Thrift技術(shù)闡述異構(gòu)系統(tǒng)間的數(shù)據(jù)交換方案,從而實(shí)現(xiàn)跨語(yǔ)言跨平臺(tái)的數(shù)據(jù)傳輸。

關(guān)鍵詞:Thrift框架;異構(gòu)系統(tǒng);數(shù)據(jù)交換

前言

系統(tǒng)間的數(shù)據(jù)交換方案是軟件構(gòu)建中的重要組成部分。數(shù)據(jù)交換的常用方式包括Web Service、消息中間件以及遠(yuǎn)程過(guò)程調(diào)用(RPC,Remote Procedure Call)等。其中,Web Service和消息中間件方式是通過(guò)消息報(bào)文的形式直接或者間接地實(shí)現(xiàn)數(shù)據(jù)的交換。在此方式下,數(shù)據(jù)在傳輸前需封裝成特定格式的消息報(bào)文,而傳輸完成后又需對(duì)該消息報(bào)文進(jìn)行解封裝以獲得實(shí)際數(shù)據(jù)。這在進(jìn)行大量的數(shù)據(jù)傳輸時(shí)效率并不高。RPC方式通過(guò)本地客戶端的過(guò)程聲明來(lái)調(diào)用遠(yuǎn)程服務(wù)端的方法實(shí)現(xiàn)數(shù)據(jù)的交換。面向?qū)ο蟮南到y(tǒng)構(gòu)建中,RPC方式的優(yōu)點(diǎn)是可將交換數(shù)據(jù)以對(duì)象的形式進(jìn)行傳輸,因此效率更高。在實(shí)際中,進(jìn)行數(shù)據(jù)傳輸?shù)南到y(tǒng)大多是異構(gòu)系統(tǒng),如何通過(guò)RPC方式構(gòu)建適合異構(gòu)系統(tǒng)間的數(shù)據(jù)交換方案是個(gè)重要問(wèn)題。文章將基于開(kāi)源的Thrift框架,闡述一種跨語(yǔ)言跨平臺(tái)的數(shù)據(jù)交換方案。

1 Thrift框架

Thrift軟件框架最初由Facebook開(kāi)發(fā),2008年5月成為Apache子項(xiàng)目。它支持跨語(yǔ)言服務(wù)的開(kāi)發(fā),通過(guò)功能強(qiáng)大的軟件堆棧和代碼生成引擎,可構(gòu)建基于C++、Java、Python、PHP、Ruby、Perl、C#、Cocoa、JavaScript等編程語(yǔ)言的客戶端和服務(wù)器端。

Thrift實(shí)際上實(shí)現(xiàn)了RPC模式,通過(guò)代碼生成引擎將接口定義文件生成客戶端和服務(wù)器端代碼,從而實(shí)現(xiàn)通信系統(tǒng)間的跨語(yǔ)言支持。通過(guò)特定的描述語(yǔ)言定義好接口文件中的數(shù)據(jù)類型和服務(wù)接口,并以此作為輸入文件,編譯器則會(huì)生成RPC的客戶端和服務(wù)器端實(shí)現(xiàn)。另外,由生成的代碼負(fù)責(zé)RPC協(xié)議層和傳輸層的實(shí)現(xiàn)。因此,對(duì)于異構(gòu)系統(tǒng),用戶只需維護(hù)統(tǒng)一的接口文件,無(wú)需手動(dòng)為特定的語(yǔ)言重新編寫(xiě)該文件。

用戶只需在Thrift接口文件中聲明自己的服務(wù),這些服務(wù)經(jīng)過(guò)編譯后會(huì)生成相應(yīng)語(yǔ)言的代碼文件,用戶只需實(shí)現(xiàn)這些服務(wù)。

2 數(shù)據(jù)交換方案

本節(jié)闡述基于Thrift框架的數(shù)據(jù)交換方案。以Java語(yǔ)言為例,通過(guò)定義數(shù)據(jù)交換的數(shù)據(jù)結(jié)構(gòu)以及接口方法,構(gòu)建服務(wù)端和客戶端服務(wù)代碼,從而實(shí)現(xiàn)數(shù)據(jù)交換功能。

2.1 數(shù)據(jù)交換架構(gòu)

進(jìn)行數(shù)據(jù)交換的系統(tǒng)分為客戶端和服務(wù)器端。服務(wù)器端響應(yīng)客戶端的請(qǐng)求。客戶端則通過(guò)調(diào)用服務(wù)器端的方法向服務(wù)器端接收或者發(fā)送數(shù)據(jù)。客戶端和服務(wù)器端的數(shù)據(jù)結(jié)構(gòu)與接口是一致的,然后通過(guò)Thrift的特定代碼生成引擎編譯出不同的語(yǔ)言版本,從而實(shí)現(xiàn)跨語(yǔ)言跨平臺(tái)的調(diào)用。圖1描述了數(shù)據(jù)交換的框架圖。從圖可以看出,兩方系統(tǒng)通過(guò)Thrift自動(dòng)生成的數(shù)據(jù)交換接口實(shí)現(xiàn)數(shù)據(jù)交換。

圖1 數(shù)據(jù)交換的框架圖

2.2 數(shù)據(jù)交換流程

基于Thrift技術(shù)的數(shù)據(jù)交換流程主要分三步。首先要定義交換數(shù)據(jù)的格式;其次定義接收或者發(fā)送數(shù)據(jù)的接口;然后,通過(guò)Thrift代碼生成引擎為各系統(tǒng)生成數(shù)據(jù)接口的底層實(shí)現(xiàn)。最后,實(shí)現(xiàn)具體的數(shù)據(jù)交換的業(yè)務(wù)功能。定義數(shù)據(jù)格式和數(shù)據(jù)接口是通過(guò)thrift文件來(lái)描述的,在該文件定義數(shù)據(jù)的各項(xiàng)信息以及接口函數(shù)的原型。Thrift根據(jù)該文件會(huì)生成特點(diǎn)版本的數(shù)據(jù)接口實(shí)現(xiàn)。開(kāi)發(fā)者只需關(guān)心數(shù)據(jù)交換的業(yè)務(wù)功能。

2.3 數(shù)據(jù)交換實(shí)現(xiàn)

本節(jié)將假設(shè)C系統(tǒng)(客戶端)向S系統(tǒng)(服務(wù)器端)傳輸一個(gè)包含姓名、性別、身份證號(hào)碼信息的報(bào)文來(lái)闡述實(shí)現(xiàn)方案。

首先,為所傳輸?shù)膱?bào)文定義數(shù)據(jù)結(jié)構(gòu)格式以及接口調(diào)用方法,其定義文件如表1所示。該文件需定義結(jié)構(gòu)以及服務(wù)。在表1中,Message結(jié)構(gòu)包括ID、sex以及name這三項(xiàng)信息,而MessageStorage服務(wù)中定義了saveMessage方法。值得指出的是,這里定義的函數(shù)方法只需定義原型,其具體實(shí)現(xiàn)由開(kāi)發(fā)者根據(jù)業(yè)務(wù)功能編寫(xiě)。該文件以.thrift后綴名保存,如message.thrift。

表1 Thrift的定義文件

接下來(lái)需根據(jù)該文件通過(guò)Thrift代碼生成引擎生成數(shù)據(jù)交換接口代碼。本例生成Java版本。具體是運(yùn)行thrift-r-gen java message.thrift 命令。由于message.thrift文件中有一個(gè)結(jié)構(gòu)體Message和一個(gè)服務(wù)MessageStorage,Thrift引擎會(huì)生成兩個(gè)java文件:Message.java和MessageStorage.java。

然后,根據(jù)業(yè)務(wù)功能編寫(xiě)代碼。在項(xiàng)目工程中需引入上述步驟生成的兩個(gè)java文件以及相應(yīng)的lib包。這里,服務(wù)器端首先要實(shí)現(xiàn)Thrift定義文件中所定義的service,即MessageStorage方法。在本例的MessageStorage方法中,先打印接收到的報(bào)文中的姓名信息,然后再持久化保存,如表2所示。

表2 Thrift服務(wù)器端核心代碼

服務(wù)器端的流程如下:

(1)創(chuàng)建模型類型(Handler);(2)基于Handler創(chuàng)建數(shù)據(jù)處理器(Processor);(3)創(chuàng)建數(shù)據(jù)傳輸方式(Transport);(4)創(chuàng)建數(shù)據(jù)傳輸協(xié)議(Protocol);(5)基于Processor、Transport和Protocol創(chuàng)建服務(wù)器模型(Server);(6)運(yùn)行Server。

其中,Transport定義數(shù)據(jù)傳輸方式,可以為TCP/IP傳輸、內(nèi)存共享或者文件共享等。如TFileTransport是文件(日志)傳輸類、THttpTransport采用Http傳輸協(xié)議進(jìn)行數(shù)據(jù)傳輸、TSocket則用TCP Socket進(jìn)行數(shù)據(jù)傳輸、TZlibTransport會(huì)壓縮后對(duì)數(shù)據(jù)進(jìn)行傳輸,支持二進(jìn)制或者XML。Protocol定義傳輸?shù)臄?shù)據(jù)格式,包括使用二進(jìn)制格式的TBinaryProtocol、使用壓縮格式的TCompactProtocol、使用JSON格式的TJSONProtocol等。

服務(wù)器端的核心代碼如表2所示。

表3 Thrift客戶端核心代碼

這里選擇TThreadPoolServer線程池服務(wù)模型,使用標(biāo)準(zhǔn)的阻塞式IO,預(yù)先創(chuàng)建一組線程處理請(qǐng)求。當(dāng)有客戶端連接過(guò)來(lái)時(shí),從線程池里分配可用的連接處理客戶端請(qǐng)求。常用的TServer子類還包括:

TSimpleServer:簡(jiǎn)單的單線程服務(wù)模型,常用于測(cè)試;TThreadedServer:多線程服務(wù)模型,使用阻塞式IO,為每個(gè)請(qǐng)求創(chuàng)建一個(gè)線程。

TNonblockingServer:多線程服務(wù)模型,使用非阻塞式IO。

如果服務(wù)需要處理大量更新,則主要選擇TThreadedServer和TNonblockingServer。TNonblockingServer能夠使用少量線程處理大量并發(fā)連接,但延遲較高;相比之下,TThreadedServer的延遲較低。實(shí)際中,TThreadedServer的吞吐量可能會(huì)比TNonblockingServer高,但它的CPU占用率也比TNonblockingServer高很多。

客戶端通過(guò)調(diào)用服務(wù)端的方法傳輸定義好的Message對(duì)象。具體的步驟為:(1)創(chuàng)建數(shù)據(jù)傳輸方式(Transport);(2)創(chuàng)建數(shù)據(jù)傳輸協(xié)議(Protocol);(3)創(chuàng)建客戶模型(Client);(4)調(diào)用Client的相應(yīng)方法。

核心代碼見(jiàn)表3。

3 結(jié)束語(yǔ)

Thrift實(shí)現(xiàn)了異構(gòu)系統(tǒng)間的數(shù)據(jù)傳輸方案。并且數(shù)據(jù)結(jié)構(gòu)定義簡(jiǎn)單,適合快速生成系統(tǒng)的數(shù)據(jù)交換接口。此外,Thrift結(jié)合了功能強(qiáng)大的軟件堆棧,可方便地生成不同開(kāi)發(fā)語(yǔ)言的RPC客戶端和服務(wù)器端,能統(tǒng)一構(gòu)建底層框架。因此,Thrift可以有效地解決跨平臺(tái)的數(shù)據(jù)傳輸問(wèn)題,確保異構(gòu)系統(tǒng)間穩(wěn)定高效地進(jìn)行數(shù)據(jù)交換。

參考文獻(xiàn)

[1]蘇沫涵.一種基于XML的通用數(shù)據(jù)交換機(jī)制[J].科技創(chuàng)新與應(yīng)用,2011(21).

[2]暢育超.基于XML的數(shù)據(jù)交換技術(shù)[J].電腦編程技巧與維護(hù),2014(17).

[3]楊閣.電子政務(wù)平臺(tái)數(shù)據(jù)交換系統(tǒng)研究[J].企業(yè)科技與發(fā)展:下半月,2014(5).

主站蜘蛛池模板: 欧美精品啪啪| 第一区免费在线观看| 国产日韩AV高潮在线| 免费Aⅴ片在线观看蜜芽Tⅴ | 国产精品林美惠子在线观看| 日韩毛片视频| 丝袜久久剧情精品国产| 国产精品第页| 久久国产精品电影| 国产乱人免费视频| 特级做a爰片毛片免费69| 精品人妻无码区在线视频| 国产网站在线看| 露脸一二三区国语对白| 欧美a级在线| 亚洲国产成熟视频在线多多| 久久国产黑丝袜视频| 在线看AV天堂| 国产香蕉在线| 久久a毛片| 国产午夜精品一区二区三区软件| 欧美在线天堂| 午夜精品久久久久久久2023| a毛片在线| 亚洲品质国产精品无码| 免费国产一级 片内射老| 狠狠色香婷婷久久亚洲精品| 中文字幕人妻av一区二区| 国产亚洲欧美在线专区| 亚洲成人精品久久| 亚洲AV无码精品无码久久蜜桃| 五月婷婷综合色| 免费aa毛片| 成人一区在线| 久久久受www免费人成| 欧美福利在线观看| 色婷婷综合激情视频免费看| 成人va亚洲va欧美天堂| 91精品啪在线观看国产| 白浆视频在线观看| 日本道中文字幕久久一区| 国产草草影院18成年视频| 欧美日本在线一区二区三区| 国产自产视频一区二区三区| 这里只有精品国产| 国产欧美日韩专区发布| 免费福利视频网站| 国产精品欧美激情| 国产成人精品高清不卡在线 | 国产一级在线观看www色| 丝袜国产一区| 国产精品永久不卡免费视频| 婷婷99视频精品全部在线观看| 亚洲av无码久久无遮挡| 欧美亚洲欧美区| 亚洲天堂精品在线| 国产欧美日韩视频怡春院| 色亚洲成人| 亚洲一区二区三区香蕉| 亚洲人成影视在线观看| 国产福利微拍精品一区二区| 国产在线高清一级毛片| 国产成人久久777777| 欧美黄网站免费观看| 国产91全国探花系列在线播放| 国产成人综合亚洲欧洲色就色| 广东一级毛片| 国产午夜在线观看视频| 国产精品成人AⅤ在线一二三四| 黄色国产在线| 亚洲男女在线| 久草视频中文| 欧美日韩在线亚洲国产人| av天堂最新版在线| 国产小视频在线高清播放| 日韩中文字幕亚洲无线码| 亚洲精品黄| AV片亚洲国产男人的天堂| 国产日本欧美在线观看| 亚洲欧美另类专区| 日韩成人午夜| 国产欧美日韩91|