楊 帆,孔維萍, 蔣曉肖, 肖永利, 虢 華
(上海航天控制技術(shù)研究所,上海 200233)
基于Thrift的RPC中間件在航天信息系統(tǒng)中的設(shè)計(jì)與實(shí)現(xiàn)
楊 帆,孔維萍, 蔣曉肖, 肖永利, 虢 華
(上海航天控制技術(shù)研究所,上海 200233)
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,大數(shù)據(jù)存儲(chǔ)技術(shù)日趨成熟,針對(duì)系統(tǒng)應(yīng)用實(shí)施中存在的跨平臺(tái)和可擴(kuò)展性問題,分析了在航天信息系統(tǒng)中遠(yuǎn)程服務(wù)調(diào)用的幾種技術(shù)方法,提出了基于Thrift技術(shù)設(shè)的一種跨平臺(tái)可擴(kuò)展的遠(yuǎn)程調(diào)用中間件,利用Thrift框架的技術(shù)特點(diǎn),有效提高了可擴(kuò)展性和高效傳輸性能;實(shí)際應(yīng)用表明,該技術(shù)方案在跨平臺(tái)可擴(kuò)展性有顯著優(yōu)勢(shì),大數(shù)據(jù)傳輸性能優(yōu)越,較好地滿足信息化項(xiàng)目的需求。
Thrift;遠(yuǎn)程過程調(diào)用;航天信息化
國(guó)家十三五以來,互聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、物聯(lián)網(wǎng)等信息化技術(shù)高速發(fā)展,帶動(dòng)了航天軍工系統(tǒng)的信息化應(yīng)用,多數(shù)型號(hào)設(shè)備實(shí)驗(yàn)測(cè)試軟件也逐步從單機(jī)單軟、專機(jī)專用的定制化研發(fā)模式向通用化、信息化的技術(shù)發(fā)展。劉杰等[1]介紹了航天信息化工程中云計(jì)算方面的應(yīng)用情況,胡明明等[2]探討了航天系統(tǒng)中信息化通用標(biāo)準(zhǔn)體系的構(gòu)建,馬昌超等[3]介紹了航天信息化的建設(shè)模式。本文調(diào)研了主流互聯(lián)網(wǎng)產(chǎn)品的應(yīng)用情況,根據(jù)阿里巴巴公司的實(shí)時(shí)數(shù)據(jù)傳輸平臺(tái)[4],以及Facebook的開源日志收集系統(tǒng)[5]等的信息技術(shù)研究,結(jié)合航天信息化系統(tǒng)應(yīng)用背景,提出了一種基于Thrift框架的跨平臺(tái)、跨語言的遠(yuǎn)程過程調(diào)用協(xié)議(remote procedure call protocol,RPC)方案,并在自研的信息化項(xiàng)目能源系統(tǒng)(energy mangement system,EMS)、試驗(yàn)管理系統(tǒng)(test data management system,TDM)中成功應(yīng)用,取得良好的效果。
目前,遠(yuǎn)程服務(wù)調(diào)用的技術(shù)實(shí)現(xiàn)方式大致可分為三類[6]:第一類,采用分布式對(duì)象技術(shù);第二類,基于過程的服務(wù)調(diào)用;第三類,通過WebService服務(wù)調(diào)用方式。
分布式對(duì)象技術(shù)是最早期提出的一種實(shí)現(xiàn)方式,主要技術(shù)有:RMI(remote method invocation,遠(yuǎn)程方法調(diào)用)/EJB(enterprise java bean, JavaEE服務(wù)器端組件模型),COM(component object model,組件對(duì)象模型)/DCOM(distribute component object model,分布式組件對(duì)象模型)/COM+和OMG (object management group,對(duì)象管理組織)提出的CORBA(common object request broker architecture,公用對(duì)象請(qǐng)求代理體系結(jié)構(gòu))[7]。其中比較流行的技術(shù)是微軟提出的COM/DCOM和OMG對(duì)象管理組織提出的CORBA。COM/DCOM/COM+是基于組件的對(duì)象模型,DCOM比COM技術(shù)支持更多的通信協(xié)議,而且在分布式處理性能優(yōu)于COM,COM+則在延續(xù)COM技術(shù)的基礎(chǔ)上增加了分布式網(wǎng)絡(luò)應(yīng)用程序的設(shè)計(jì)和實(shí)現(xiàn)[8]。CPRBA技術(shù)廣泛應(yīng)用在分布式產(chǎn)品中,解決了分布式環(huán)境下軟硬件系統(tǒng)的互連問題。實(shí)際應(yīng)用中,上述技術(shù)均要求客戶端和服務(wù)端應(yīng)用明確的同類型對(duì)象協(xié)議模型,在跨語言和可擴(kuò)展性方面的應(yīng)用有較高難度。
基于過程的遠(yuǎn)程服務(wù)調(diào)用主要指RPC,是基于客戶端/服務(wù)器的分布式架構(gòu)模型[9]。類似于本地API,部署在客戶端的應(yīng)用程序(Client)通過RPC的服務(wù)請(qǐng)求調(diào)用部署在在網(wǎng)絡(luò)中某節(jié)點(diǎn)的RPC服務(wù)器端(Server)的服務(wù)。目前,主流的RPC技術(shù)有Facebook在2008年開源的支持跨語言特性的服務(wù)部署框架Apache Thrift,Hadoop創(chuàng)始人Doug Cutting領(lǐng)導(dǎo)開發(fā)的數(shù)據(jù)序列化系統(tǒng)Apache Avro以及Google發(fā)布的自動(dòng)序列化、反序列化結(jié)構(gòu)化數(shù)據(jù)的機(jī)制Protocol Buffers[10]。它們提供跨語言的序列化和通信支持,不僅解決了分布式對(duì)象技術(shù)的兼容性問題,同時(shí)在高并發(fā),跨平臺(tái)語言及大數(shù)據(jù)傳輸上有明顯優(yōu)勢(shì)。
Web Service服務(wù)調(diào)用方式是通過Web訪問實(shí)現(xiàn),具有模塊自包含和自描述特性的新型Web應(yīng)用程序分支[11]。這種方式使用標(biāo)準(zhǔn)互聯(lián)網(wǎng)協(xié)議,既是一種編程組件,又是一種遠(yuǎn)程服務(wù)調(diào)用方式。其中,HTTP協(xié)議為最常用的傳輸協(xié)議,最常見的消息交換方式為JSON-RPC、XML-RPC以及SOAP(Simple Object Access Protocol)等[12]。而Web Service在傳輸過程中攜帶的冗余信息多,在編碼和解碼xml文件上處理耗時(shí)也較高,因此,在處理信息系統(tǒng)的并發(fā)應(yīng)用中對(duì)服務(wù)器的負(fù)載較高,導(dǎo)致性能較低[13]。
經(jīng)調(diào)研分析,Apache Thrift、Apache Avro 以及 Protocol Buffers 這3種主流的新型RPC框架在大數(shù)據(jù)傳輸、大規(guī)模并發(fā)調(diào)用中性能優(yōu)異,尤其適合應(yīng)用于云計(jì)算。考慮信息化系統(tǒng)中的對(duì)可擴(kuò)展性,高并發(fā)和數(shù)據(jù)體量等方面的要求,進(jìn)一步分析比較3種RPC技術(shù)方式的特點(diǎn),得出Thrift框架最適合應(yīng)用在信息化系統(tǒng)這種大型的的數(shù)據(jù)通信中間件搭建中,本文提出采用基于Thrift的RPC框架進(jìn)行信息化系統(tǒng)中數(shù)據(jù)通信的中間件的設(shè)計(jì)方案。Thrift的框架結(jié)構(gòu)如圖1所示。

圖1 Thrift框架技術(shù)結(jié)構(gòu)示意圖
如上圖所示,Thrift 框架主要由4個(gè)部分組成,從上至下分別是應(yīng)用層、框架層、協(xié)議層以及傳輸層。用戶在應(yīng)用層對(duì)業(yè)務(wù)邏輯進(jìn)行自定義。Thrift的IDL對(duì)用戶定義的應(yīng)用層數(shù)據(jù)結(jié)構(gòu)進(jìn)行編譯,生成Server/Client端代碼框架和讀寫操作,即圖中FooService.Client和Foo.Write()/Read()。TProtocol是負(fù)責(zé)管理不同類型數(shù)據(jù)編碼方案以及序列化和反序列化的協(xié)議。TTransport用于實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)膫鬏攲樱讓覫/O通信負(fù)責(zé)實(shí)際的數(shù)據(jù)傳輸。
基于Thrift框架的通信協(xié)議,是通過內(nèi)部序列化機(jī)制對(duì)數(shù)據(jù)進(jìn)行簡(jiǎn)化,將數(shù)據(jù)以對(duì)象形式進(jìn)行傳輸,本地Client端通過過程聲明來調(diào)用遠(yuǎn)程Server端的方式實(shí)現(xiàn)數(shù)據(jù)的交換,提高了傳輸效率,降低了通信成本。Thrift結(jié)合其功能強(qiáng)大的軟件堆棧和代碼生成引擎,可以構(gòu)建在C#,C++,Java,Python,PHP,Ruby,JavaScript,Perl等編程語言間實(shí)現(xiàn)高效無縫的服務(wù)[14]。Thrift軟件框架支持的數(shù)據(jù)類型如表1所示。
service對(duì)應(yīng)服務(wù)的類Thrift協(xié)議層通過數(shù)據(jù)的序列化和反序列化機(jī)制,如JSON, XML, Plain Text, Binary, Compact Binary 等,抽象數(shù)據(jù)結(jié)構(gòu)的定義。傳輸協(xié)議主要分為文本和二進(jìn)制兩大類,為提高傳輸效率,大多數(shù)傳輸協(xié)議采用二進(jìn)制類型,常用的TProtocol通信協(xié)議如表2所示。
常用Thrift框架傳輸層如表3所示幾種。
常見的服務(wù)端類型如表4所示。

表1 數(shù)據(jù)類型表

表2 通信協(xié)議類型表

表3 傳輸層定義表

表4 服務(wù)端類型表
綜合分析比較,以Thrift 框架作為信息系統(tǒng)通信中間件設(shè)計(jì)架構(gòu)的主要技術(shù)解決方案,主要有以下優(yōu)勢(shì)特點(diǎn):
1)跨平臺(tái)語言,可擴(kuò)展性強(qiáng)。Thrift框架支持包括主流的C++ 、Java 、C# 、Python 、PHP 、Ruby 、JavaScript 及Coaca 、Smalltalk、OCaml 等十余種編程語言,有效實(shí)現(xiàn)基于不同開發(fā)語言的應(yīng)用系統(tǒng)的Server端和Client端無縫連接和數(shù)據(jù)交互,大大提高信息化系統(tǒng)的可擴(kuò)展性。
2)高效性:相較于傳統(tǒng)的 XML 和 JSON 格式和一般二進(jìn)制數(shù)據(jù)編碼格式而言, Thrift 具有更高效數(shù)據(jù)傳輸方式,支持更多類型對(duì)象進(jìn)行序列化和反序列化,耗能更少。
3)易用性:Thrift框架更容易被研發(fā)人員理解并應(yīng)用。用戶使用Thrift 框架時(shí),定義好描述數(shù)據(jù)傳輸協(xié)議、數(shù)據(jù)類型和服務(wù)的接口文件后,使用Thrift提供的編譯器即可自動(dòng)生成遠(yuǎn)程過程調(diào)用中間件的Server和Client端實(shí)現(xiàn),協(xié)議層和傳輸層代碼也自動(dòng)生成。因此,用戶無需手動(dòng)編寫基于不同語言、不同系統(tǒng)結(jié)構(gòu)的通信中間件代碼文件,只需維護(hù)統(tǒng)一的接口文件即可。
基于Thrift 框架的數(shù)據(jù)調(diào)用中間件實(shí)現(xiàn)主要分三步。首先要定義數(shù)據(jù)傳輸對(duì)象的標(biāo)準(zhǔn)格式,并定義接收或者發(fā)送數(shù)據(jù)的接口。Thrift框架支持多種類型數(shù)據(jù)傳輸,可以是原始數(shù)據(jù)字節(jié)類型數(shù)組,基于MySQL 的查詢計(jì)算結(jié)構(gòu),也可以是文件數(shù)據(jù)流。第二步,通過Thrift 代碼生成引擎為各系統(tǒng)生成數(shù)據(jù)接口的底層實(shí)現(xiàn)。第三步,實(shí)現(xiàn)具體產(chǎn)品測(cè)試數(shù)據(jù)傳輸?shù)臉I(yè)務(wù)功能。數(shù)據(jù)標(biāo)準(zhǔn)格式和服務(wù)接口格式是通過Thrift 文件來描述的,該文件定義了數(shù)據(jù)的各項(xiàng)信息以及接口函數(shù)的原型。Thrift 根據(jù)該文件會(huì)生成特定版本的數(shù)據(jù)接口實(shí)現(xiàn),開發(fā)者只需關(guān)心數(shù)據(jù)傳輸?shù)臉I(yè)務(wù)。Thrift 引擎也可以編譯出不同的語言版本,從而實(shí)現(xiàn)跨語言跨平臺(tái)的調(diào)用。本節(jié)分別以Java 和 C#編程語言為版本介紹基于Thrift 框架中間件部署方法實(shí)現(xiàn)。
本節(jié)以Java 語言為例,介紹Thrift 軟件框架應(yīng)用實(shí)現(xiàn)。實(shí)現(xiàn)中間件 Client端和 Server端部署時(shí),需要在開發(fā)環(huán)境中引入libthrift.jar,log4j.jar 等公共jar 包,并編寫創(chuàng)建Thrift 的IDL文檔 Test.thrift ,執(zhí)行thrift-0.9.3.exe -gen java Test.thrift 命令,調(diào)用Thrift編譯器生成Test.java 公共文件,部署過程示意如圖2所示。

圖2 基于Java的Thrift框架部署圖
如圖2所示,Client端調(diào)用Server端的 TestServiceClient.java 代碼。Server端的 Process 類對(duì)象實(shí)現(xiàn)RPC請(qǐng)求處理的核心Test.Iface 接口,并啟動(dòng)TestServiceServer.java。Server 端和Client 端利用 Test.java 提供的API進(jìn)行遠(yuǎn)程服務(wù)調(diào)用。
Thrift服務(wù)器端的流程如下:
1)創(chuàng)建服務(wù)端口通道(TServerTransport);
2)確定傳輸協(xié)議(TProtocolFactory);
3)創(chuàng)建數(shù)據(jù)處理器 (Processor);
4)創(chuàng)建數(shù)據(jù)傳輸協(xié)議(Protocol);
5)基于Processor、TProtocolFactory和TServerTransport創(chuàng)建服務(wù)器模型(Server);
6)運(yùn)行Server。
此處框架的服務(wù)端采用高效密集的二進(jìn)制編碼格式 TCompactProtocol 進(jìn)行數(shù)據(jù)傳輸,Server端代碼示例如下:
public static void main(String[] args) {
try {
TServerTransport serverTransport = new TServerSocket(7911);
TProtocolFactory proFactory = new TCompactProtocol.Factory();
TMultiplexedProcessor processor = new TMultiplexedProcessor();
processor.registerProcessor("Test",new Test.Processor
TServer server = new TThreadPoolServer(new Args(serverTransport).protocolFactory(proFactory).processor(processor));
System.out.println("Start server on port 7911...");
server.serve();
} catch (Exception e) {
/*異常處理*/
}
}
當(dāng)服務(wù)需要處理大量數(shù)據(jù)更新時(shí),Server 端使用 TThreadPoolServer 線程池服務(wù)模型,采用標(biāo)準(zhǔn)的阻塞式 I/O,預(yù)先創(chuàng)建一組線程處理請(qǐng)求,當(dāng)有客戶端連接過來時(shí),從線程池里分配可用的連接處理客戶端請(qǐng)求。
客戶端通過調(diào)用服務(wù)端的方法傳輸定義好的 Test 對(duì)象。具體的步驟為:
1)創(chuàng)建數(shù)據(jù)傳輸方式(Transport);
2)創(chuàng)建數(shù)據(jù)傳輸協(xié) 議(Protocol);
3)創(chuàng)建客戶模型(Client);
4)調(diào)用 Client 的相應(yīng)方法。 核心代碼如下:
public static void main(String[] args) {
try {
TTransport transport=new TSocket(ip, port);
Transport.open();
TProtocol protocol = new TMultiplexedProtocol(new TCompactPortocol(transport),"Test");
ProductTestInformationService.Client client = new Test.Client(protocol);
/* 服務(wù)端提供的接口方法*/
transport.close();
server.serve();
} catch (TException e) {
/*異常處理*/
}
}
基于C#語言實(shí)現(xiàn)信息系統(tǒng)中間件搭建時(shí),需要在工程中引用Thrift開源框架編譯生成的Thrift.dll,根據(jù)用戶定義的Thrift 的IDL文檔 Test.thrift ,執(zhí)行thrift-0.9.3.exe -gen csharp Test.thrift 命令,調(diào)用Thrift編譯器生成 Test.cs 公共文件,部署過程示意如圖3所示。

圖3 基于C#的Thrift框架部署圖
Client端調(diào)用Server端的 TestServiceClient.cs 代碼。Server端的實(shí)現(xiàn)Test.Iface 接口,并啟動(dòng)TestServiceServer.cs服務(wù)。Server 端和Client 端利用 Test.cs 提供的API 進(jìn)行遠(yuǎn)程服務(wù)調(diào)用。由于C#語言的限制無法使用非阻塞的多線程服務(wù)端,此處使用 TThreadPoolServer 線程池服務(wù)模型,采用標(biāo)準(zhǔn)的阻塞式 I/O。工程中Server 端核心代碼如下:
public void Start()
{
try
{
TServerSocket serverTransport = new TServerSocket(9090, 0, false);
//一個(gè)端口注冊(cè)多個(gè)服務(wù)
TMultiplexedProcessor processors = new TMultiplexedProcessor();
Test.Processor testProcessor = new Test.Processor(new Test Impl());
processors.RegisterProcessor("Test", testProcessor);
//多線程服務(wù)器
TServer server = new TThreadPoolServer(processors, serverTransport);
server.Serve();
}
catch (Exception x)
{
/*異常處理*/
}
}
Server 端使用 TThreadPoolServer 線程池服務(wù)模型,創(chuàng)建一組線程處理請(qǐng)求,當(dāng)有Client端連接請(qǐng)求時(shí),為其分配可用的連接處理線程。
客戶端通過調(diào)用服務(wù)端的方法傳輸定義好的 Test 對(duì)象。具體的步驟為:
1)創(chuàng)建數(shù)據(jù)傳輸方式(Transport);
2)創(chuàng)建數(shù)據(jù)傳輸協(xié) 議(Protocol);
3)創(chuàng)建客戶模型(Client);
客戶端核心代碼如下:
static void Main(string[] args)
{
try
{
TTransport transport = new TSocket("localhost", 9090);
TProtocol protocol = new TBinaryProtocol(transport);
Test.Client testClient = new Client.Client(protocol);
transport.Open();
Console.WriteLine("Test Client Calls");
transport.Close();
}
catch (Exception x)
{
/*異常處理*/
}
}
近年來信息化技術(shù)迅速發(fā)展,航天應(yīng)用系統(tǒng)緊跟時(shí)代步伐,所內(nèi)自主研發(fā)了能源管理系統(tǒng)(energy mangement system,簡(jiǎn)稱EMS)、試驗(yàn)管理系統(tǒng)(test data management system,簡(jiǎn)稱TDM)等多個(gè)信息化項(xiàng)目。針對(duì)信息化平臺(tái)特點(diǎn),本文基于Thrift 框架設(shè)計(jì)了靈活的跨語言數(shù)據(jù)通信遠(yuǎn)程服務(wù)調(diào)用中間件方案,有效解決信息化項(xiàng)目中各個(gè)系統(tǒng)技術(shù)架構(gòu)迥異,協(xié)議開發(fā)難度大等問題。本文以EMS系統(tǒng)為例,將此方案在各信息化系統(tǒng)中進(jìn)行廣泛推廣和應(yīng)用。
能源管理系統(tǒng)是響應(yīng)國(guó)家 “十三五”號(hào)召,全方面為實(shí)現(xiàn)“指標(biāo)能分解、責(zé)任能落實(shí)、監(jiān)管能有效、考核有實(shí)效”目標(biāo),踐行人人參與的節(jié)能減排,以信息化技術(shù),科學(xué)實(shí)現(xiàn)能耗減排而自主研制的信息化系統(tǒng)。能源管理系統(tǒng)為航天研發(fā),產(chǎn)品生產(chǎn)的節(jié)能用能管控提供良好的信息化管控手段,改變既有的人工干預(yù)管理的方式,采用硬件與軟件結(jié)合,通過實(shí)時(shí)高效的采集電、水等計(jì)量?jī)x表設(shè)備的數(shù)據(jù),進(jìn)行數(shù)據(jù)整理和統(tǒng)計(jì)分析,通過數(shù)據(jù)建模和圖表繪制,以信息化手段進(jìn)行數(shù)據(jù)管理,為能源的監(jiān)控和管理提供強(qiáng)有力的數(shù)據(jù)支撐,及監(jiān)管條件,有效實(shí)現(xiàn)精細(xì)化管理,提高工作效率。系統(tǒng)提供數(shù)據(jù)預(yù)警及設(shè)備報(bào)警功能,能隨時(shí)發(fā)現(xiàn)跑、冒、滴、漏,有效地保證工業(yè)生產(chǎn)中的能源的高效利用,杜絕能源浪費(fèi)。EMS系統(tǒng)組成結(jié)構(gòu)如圖4所示。

圖4 基于Thrift的EMS框架示意圖
能源管理系統(tǒng)中數(shù)據(jù)存儲(chǔ)層是采用C#語言實(shí)現(xiàn),前臺(tái)B/S端采用Java語言實(shí)現(xiàn),本文提出的基于Thrift框架設(shè)計(jì)的遠(yuǎn)程調(diào)用中間件,有效的解決此類異構(gòu)系統(tǒng)的接口服務(wù)調(diào)用問題,設(shè)計(jì)人員只需定義好數(shù)據(jù)傳輸對(duì)象格式,無需針對(duì)編程語言的差異額外開發(fā)協(xié)議轉(zhuǎn)換模塊,大大降低系統(tǒng)開發(fā)時(shí)間,提高開發(fā)效率。
能源管理系統(tǒng)中使用Thrift 框架技術(shù)作為B/S應(yīng)用層、數(shù)據(jù)采集提取層與數(shù)據(jù)存儲(chǔ)中心的服務(wù)調(diào)用中間件,根據(jù)系統(tǒng)數(shù)據(jù)通信協(xié)議定義的對(duì)象服務(wù)IDL文件,通過Thrift提供的編譯器生成接口代碼。當(dāng)前臺(tái)用戶在界面上通過Client端發(fā)起服務(wù)請(qǐng)求時(shí),服務(wù)注冊(cè)組件尋找業(yè)務(wù)的綁定信息并獲取指定鏈接,調(diào)用Server端的服務(wù),繼而Server端返回調(diào)用結(jié)果,展現(xiàn)給用戶。Thrift技術(shù)是整個(gè)業(yè)務(wù)調(diào)用的關(guān)鍵橋梁,為遠(yuǎn)程服務(wù)調(diào)用提供可靠性能保障。
本文通過分析常用的幾種遠(yuǎn)程服務(wù)調(diào)用方法,提出基于Thrift 實(shí)現(xiàn)的RPC 中間件方案,并應(yīng)用在航天信息化系統(tǒng)建設(shè)中,并以C# 和Java 兩種語言構(gòu)建典型的Server/Client應(yīng)用,展示了Thrift 框架的使用。信息化系統(tǒng)架構(gòu)中數(shù)據(jù)通信中間件通過Thrift 框架的跨平臺(tái)跨語言以及數(shù)據(jù)高效傳輸?shù)忍攸c(diǎn),提高信息化系統(tǒng)的可擴(kuò)展性,大大降低系統(tǒng)的研發(fā)成本。相較于基于傳統(tǒng)的WebService 的解決方案,實(shí)施難度更低,研發(fā)成本更小,且具有更高的傳輸效率,尤其在大數(shù)據(jù)交換和存儲(chǔ)方面表現(xiàn)優(yōu)異,在信息化系統(tǒng)的實(shí)施中具有良好的應(yīng)用前景。
[1] 劉 杰, 丁向峰, 柴旭東,等. 云計(jì)算在航天信息化工程中的應(yīng)用與探討[J]. 軍民兩用技術(shù)與產(chǎn)品, 2011(10):12-14.
[2] 胡明明, 楊前進(jìn), 段 曉. 航天器信息化標(biāo)準(zhǔn)體系構(gòu)建初探[J]. 航天標(biāo)準(zhǔn)化, 2015(1):18-22.
[3] 馬昌超, 陳金蘭. 航天信息化建設(shè)模式探討[A].中國(guó)宇航學(xué)會(huì)計(jì)算機(jī)應(yīng)用專業(yè)委員會(huì)2004年學(xué)術(shù)交流會(huì),2004.
[4] 周 豪. 大數(shù)據(jù)量下的實(shí)時(shí)數(shù)據(jù)報(bào)表系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué), 2016.
[5] 李 俊. 基于塊聚集的MapReduce性能研究與優(yōu)化[D]. 北京:北京交通大學(xué), 2014.
[6] 李 洋. 云計(jì)算中可擴(kuò)展的遠(yuǎn)程服務(wù)調(diào)用機(jī)制的設(shè)計(jì)與實(shí)現(xiàn)[D]. 哈爾濱:哈爾濱工業(yè)大學(xué), 2012.
[7] 胡 珉,許占文,張 宇. 用 Java RMI 實(shí)現(xiàn) JDBC 遠(yuǎn)程調(diào)用的介紹[J]. 沈陽工業(yè)大學(xué)學(xué)報(bào),2003,25(1):65-68.
[8] David S. Platt. Understanding COM+ [M] :55-79.
[9] 孫統(tǒng)風(fēng),孟現(xiàn)飛,姜利群. 基于RPC 的Agent 通信模型及其實(shí)現(xiàn)[J]. 現(xiàn)代計(jì)算機(jī),2003 (7):10-13.
[10] 史棟杰. 5種快速序列化框架的性能比較[J]. 電腦知識(shí)與技術(shù),2010(34):9710-971.
[11] 程曉飛. 基于 REST 架構(gòu)的 Web Services 的研究與設(shè)計(jì)[D]. 武漢:武漢理工大學(xué), 2010(5):15-23.
[12] 許卓明,栗 明,董逸生. 基于 RPC 和基于 REST 的 Web 服務(wù)交互模型比較分析[J]. 計(jì)算機(jī)工程,1003,29(20):6-8.
[13] 袁 赟. Java 與 Restful Web Service.電腦知識(shí)與技術(shù)(學(xué)術(shù)交流)[J].2007,4(21):780-782.
[14] 周 康, 李 覬, 董科軍,等. 一種基于Thrift的日志收集分析系統(tǒng)[J]. 科研信息化技術(shù)與應(yīng)用, 2015(2).
Design and Implement of RPC Middle Ware Based on Thrift Frame in Aerospace Information System
Yang Fan, Kong Weiping, Jiang Xiaoxiao, Xiao Yongli, Guo Hua
(Shanghai Aerospace Control Technology Institute, Shanghai 200233,China)
With the rapid development of internet, big data storage technology is gradually maturing. This paper analyze and compare several popular remote service invocation mechanisms in aerospace information application, then proposed a remote service invocation middleware based on the Thrift framework, which has a better transmission performance and expandability. The application indicates that, based on these techniques, the middleware is effective and flexible to expand, satisfying the needs of the projects.
Thrift; RPC; aerospace information
2017-04-12;
2017-05-10。
楊 帆(1988-),女,碩士研究生,主要從事衛(wèi)星地面測(cè)試系統(tǒng)以及信息化軟件,大數(shù)據(jù)存儲(chǔ)方向的研究。
1671-4598(2017)12-0279-04
10.16526/j.cnki.11-4762/tp.2017.12.072
TP391
A