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

基于主題發(fā)布-訂閱的分布式通信總線設計與實現(xiàn)*

2021-08-06 09:18:50魏興雲(yún)任祥維譚陸媛
通信技術 2021年7期
關鍵詞:信息系統(tǒng)

魏興雲(yún),任祥維,譚陸媛

(中國電子科技集團公司第三十研究所,四川 成都 610041)

0 引 言

隨著計算機與網(wǎng)絡技術的高速發(fā)展,在計算機上處理的工作越來越多,業(yè)務也越來越復雜,多個系統(tǒng)(節(jié)點)協(xié)同工作的需求也越來越大。為了高效地實現(xiàn)系統(tǒng)間數(shù)據(jù)共享、互操作,解決系統(tǒng)不易集成問題,對象管理組織(Object Management Group,OMG)在高級體系結構(High Level Architecture,HLA)和通用對象請求代理體系(Common Object Request Broker Architecture,CORBA)等標準的基礎上,制定了采用以數(shù)據(jù)為中心發(fā)布-訂閱機制(Data Centric Publish Subscribe,DCPS)的分布式實時通信中間件技術規(guī)范:數(shù)據(jù)分發(fā)服務(Data Distribute Service,DDS)[1]。DDS基于主題進行數(shù)據(jù)發(fā)布-訂閱,適用于分布式節(jié)點之間的數(shù)據(jù)交換,其以數(shù)據(jù)為中心,能實現(xiàn)高效和實時地數(shù)據(jù)交換[2]。在工業(yè)自動化、分布式控制和仿真應用等領域,許多實時應用程序都構建了以數(shù)據(jù)中心的DDS通信模型,其中部分應用程序發(fā)布(提供或流式傳輸)數(shù)據(jù),供對該數(shù)據(jù)感興趣的遠程應用程序訂閱使用。

1 數(shù)據(jù)分發(fā)服務DDS

1.1 DDS簡介

根據(jù)規(guī)范,DDS主要分為如圖1所示的兩個層次,分別是DCPS層和本地數(shù)據(jù)重構(Data Local Reconstruction Layer,DLRL)層。其中,DCPS是數(shù)據(jù)發(fā)布-訂閱系統(tǒng)的基本框架,其負責系統(tǒng)中數(shù)據(jù)的發(fā)布、訂閱、處理、分發(fā),并實現(xiàn)把主題數(shù)據(jù)發(fā)送給已訂閱的節(jié)點;DLRL層的目的是外部應用程序與DDS內(nèi)部的數(shù)據(jù)交互,提供簡單的方式,使各個外部應用能夠之間向DDS中獲取數(shù)據(jù)或者向DDS中寫入數(shù)據(jù)[1]。

本文所介紹的通信中間件主要參考DCPS層進行系統(tǒng)設計與實現(xiàn),因此下文主要對DCPS的發(fā)布-訂閱模型進行介紹。

1.2 DDS模型與DCPS

DCPS是實現(xiàn)數(shù)據(jù)發(fā)布訂閱服務的基礎框架,其概念模型如圖2所示。它基于全局數(shù)據(jù)空間(Global Data Space,GDS)的概念,提供基于主題的數(shù)據(jù)發(fā)布和訂閱相關功能[1]。

DCPS包括主題、數(shù)據(jù)讀取器、訂閱者、數(shù)據(jù)寫入器、發(fā)布者等類型對象。以主題為中心,通過數(shù)據(jù)寫入器進行主題數(shù)據(jù)的寫入;通過數(shù)據(jù)讀取器進行主題數(shù)據(jù)的讀取;通過發(fā)布者和訂閱者進行主題數(shù)據(jù)的發(fā)布與訂閱。

按照屬性與職責范圍的不同可將DCPS分成基礎設施模塊、域模塊和數(shù)據(jù)發(fā)布訂閱模塊3個部分。基礎設施模塊定義了系統(tǒng)的交互方式、服務質(zhì)量(Quality of Service,QoS)以及質(zhì)量策略等公共基礎組件,是整個系統(tǒng)的基礎模塊。域模塊域和數(shù)據(jù)發(fā)布訂閱模塊均依賴域基礎設施模塊。域模塊作為系統(tǒng)服務的入口,系統(tǒng)通過該模塊創(chuàng)建主題、發(fā)布者、訂閱者。發(fā)布者和訂閱者只能在相同的域中進行主題數(shù)據(jù)的交互。數(shù)據(jù)發(fā)布訂閱模塊由主題、發(fā)布者、訂閱者、數(shù)據(jù)寫入器、數(shù)據(jù)讀取器等對象組成。發(fā)布者通過數(shù)據(jù)寫入器進行主題數(shù)據(jù)發(fā)布。訂閱者通過數(shù)據(jù)讀取器進行主題數(shù)據(jù)獲取。

1.3 DDS體系結構

DDS發(fā)布-訂閱系統(tǒng)分為集中式和分布式兩種體系結構。

集中式發(fā)布-訂閱系統(tǒng)具有服務器節(jié)點和普通節(jié)點。其中服務器節(jié)點存儲了所有系統(tǒng)發(fā)布訂閱的數(shù)據(jù)信息,同時負責數(shù)據(jù)的調(diào)度、處理等各種事務。普通節(jié)點都連接到服務器節(jié)點,通過服務器節(jié)點進行數(shù)據(jù)的發(fā)布和訂閱,各個普通節(jié)點之間不直接相連[3]。集中式體系結構的優(yōu)點是連接結構簡單,系統(tǒng)易于協(xié)調(diào)和控制,但是整個系統(tǒng)的運行依賴于服務器節(jié)點,一旦服務器節(jié)點出現(xiàn)問題,整個系統(tǒng)都將癱瘓而無法工作。目前最具代表性的集中式發(fā)布-訂閱系統(tǒng)是TAO DDS,其為對象計算公司(Object Computing Inc.,OCI)的一個開源項目。

與集中式發(fā)布-訂閱不同,分布式發(fā)布-訂閱系統(tǒng)不存在服務器節(jié)點。該類型系統(tǒng)中每個節(jié)點都是相等的,都可根據(jù)需要成為主題數(shù)據(jù)的發(fā)布者和訂閱者,并且都維護著整個系統(tǒng)各個節(jié)點之間的發(fā)布-訂閱信息。該結構中,數(shù)據(jù)的發(fā)布訂閱信息先在本節(jié)點處注冊,而后通過系統(tǒng)中的一個網(wǎng)絡中間件將本節(jié)點的信息發(fā)送至系統(tǒng)各節(jié)點處,使系統(tǒng)中所有節(jié)點處的發(fā)布-訂閱信息都相同。該系統(tǒng)中,各個節(jié)點兩兩之間均建立通信鏈路。節(jié)點發(fā)布數(shù)據(jù)的時候,直接通過節(jié)點之間的連接將數(shù)據(jù)發(fā)送給已訂閱數(shù)據(jù)的節(jié)點。相比于集中式結構,分布式結構具有更高的可靠性。系統(tǒng)中部分節(jié)點出現(xiàn)問題,只影響與出現(xiàn)故障節(jié)點之間的數(shù)據(jù)交互,其他節(jié)點之間的數(shù)據(jù)發(fā)布訂閱仍可正常運行。同時,由于分布式結構中兩兩節(jié)點之間均建立通信連接,鏈路數(shù)據(jù)比集中式結構多,因此比較適合在小規(guī)模的網(wǎng)絡中進行使用。

2 ZMQ通信庫

2.1 ZMQ簡介

ZeroMQ簡稱ZQM,是一種基于消息隊列的多線程網(wǎng)絡庫,能夠?qū)μ捉幼诸愋汀⑦B接處理、幀等底層細節(jié)進行抽象,提供跨越多種傳輸協(xié)議的套接字。ZMQ采用無鎖的數(shù)據(jù)結構來存儲消息,使用專門的后臺線程處理消息數(shù)據(jù),實現(xiàn)異步處理輸入/輸出(Input/Output,I/O)操作,因此具有良好的通信性能;ZMQ實現(xiàn)自動進行鏈路重連和消息緩存,對各個節(jié)點的啟動順序不作限制,而且可以自由地加入或者退出;ZMQ支持多種通信協(xié)議,包括傳輸控制協(xié)議(Transmission Control Protocol,TCP)、進程內(nèi)、進程間等;ZMQ提供了請求-應答、發(fā)布-訂閱、管道等多種消息通信模式,通過對各種模式組合使用,有效降低分布式系統(tǒng)搭建的難度。

2.2 ZMQ通信模型

ZMQ提供了3種基本的通信模型,分別是請求-應答、發(fā)布-訂閱和管道模式。

(1)請求-應答模式。請求應答模式通信模型如圖3所示。客戶端使用REQ類型套接字,表示向服務端發(fā)起的請求;服務端使用REP類型套接字,表示對客戶端請求的響應。這種模式下的通信過程是客戶端先向服務端發(fā)送數(shù)據(jù),服務端收到數(shù)據(jù)后向客戶端發(fā)送響應,客戶端收到響應后方可發(fā)送下一次請求。該模式下,客戶端嚴格按照一發(fā)一收的模式進行通信,服務端則是嚴格按照一收一發(fā)的模式通信。這種模式對應了經(jīng)典的客戶端/服務端(Client/Server,C/S)模型,可用在遠程過程調(diào)用(Remote Procedure Call,RPC)上[4]。

(2)發(fā)布-訂閱模式。在消息中間件,發(fā)布-訂閱是一種常見的模式。ZMQ中,消息發(fā)布者使用PUB類型的套接字,綁定到發(fā)布地址后即可進行消息發(fā)布。消息訂閱者使用SUB類型套接字,連接到發(fā)布者的發(fā)布地址后即可開始訂閱消息。消息發(fā)布者可以被多個消息訂閱者連接,訂閱者可以中途連接或者退出消息訂閱[4]。發(fā)布-訂閱模式的示意模型如圖4所示。

(3)管道模式。管道模式(Parallel Pipeline)是一種分布式并行處理模型,結構如圖5所示。這個模型由3種類型的節(jié)點組成:第1個是任務分發(fā)者(Ventilator),其使用PUSH類型套接字,負責任務(Tasks)的分發(fā);第2個是任務處理/計算者(Worker),其使用 PULL和PUSH兩種類型套接字,首先使用PULL類型套接字從Ventilator中獲取任務,其次對任務進行處理/計算,最后把結果(Result)通過PUSH類型套接字推送出去;第3個是結果收集器(Sink),通過使用PULL類型套接字,從多個Worker中獲取任務處理/計算結果。在管道模式中,一般有一個Ventilator節(jié)點、多個Worker節(jié)點和一個Sink節(jié)點,Ventilator會把任務平均PUSH到Worker。Sink節(jié)點也會公平地從Worker節(jié)點中獲取結果[4]。

3 TPSBLIB設計實現(xiàn)

主題發(fā)布-訂閱總線庫(Topic Publish Subscribe Bus Library,T-PSBLIB)參考DDS模型,構建一個共享的全局數(shù)據(jù)空間,所有對該空間中的數(shù)據(jù)感興趣的應用程序都可以加入。發(fā)布者加入數(shù)據(jù)空間后,通過總線庫提供的接口發(fā)布主題數(shù)據(jù),從而向數(shù)據(jù)空間提供信息;訂閱者加入數(shù)據(jù)空間后,通過總線提供的接口訂閱主題數(shù)據(jù)。每當發(fā)布者將新數(shù)據(jù)發(fā)送到這個全局數(shù)據(jù)空間,該總線庫就會把信息發(fā)送給已訂閱該主題的訂閱者[5]。TPSBLIB節(jié)點對數(shù)據(jù)的訪問示意如圖6所示。

TPSBLIB采用分布式體系結構,每個參與節(jié)點都是相等的,具備發(fā)布主題數(shù)據(jù)、訂閱主題數(shù)據(jù)和發(fā)現(xiàn)相同域中其他節(jié)點的能力。每個節(jié)點至少有一個域空間(Domain),域空間中有數(shù)據(jù)寫入器(Data Writer)、發(fā)布器(Publisher)、數(shù)據(jù)讀取器(DataReader)、訂閱器(Subscriber)和節(jié)點管理器(NodeManager)。數(shù)據(jù)寫入器和數(shù)據(jù)讀取器是應用與中間件的交互實體,主要進行主題數(shù)據(jù)的寫入和讀取。下文對節(jié)點管理器、數(shù)據(jù)發(fā)布器和數(shù)據(jù)訂閱器的設計進行介紹。

3.1 節(jié)點管理器

TPSBLIB通信庫中,節(jié)點管理器的主要負責數(shù)據(jù)域中的節(jié)點發(fā)現(xiàn)信息更新與狀態(tài)同步,包括兩個部分的工作:一是定時廣播自身的狀態(tài)信息,這些信息包括節(jié)點名稱、本節(jié)點發(fā)布的主題數(shù)據(jù)信息、本節(jié)點訂閱的主題數(shù)據(jù)信息;二是接收處理其他節(jié)點廣播的狀態(tài)信息,并維護一個節(jié)點的狀態(tài)信息表,實現(xiàn)對數(shù)據(jù)域中各個節(jié)點的狀態(tài)管理,為節(jié)點對域中主題數(shù)據(jù)的發(fā)布訂閱提供信息支撐。

節(jié)點管理器通過組播的方式進行通信,同一域中各個節(jié)點的節(jié)點管理器加入相同的多播組,定時向該多播組發(fā)送節(jié)點自身的狀態(tài)信息,同時接收該多播組中的數(shù)據(jù),獲取其他節(jié)點廣播的節(jié)點狀態(tài)信息,并將收到的節(jié)點信息增加或者更新到節(jié)點信息表中[6]。節(jié)點管理器工作模式如圖7所示。

3.2 數(shù)據(jù)發(fā)布器

數(shù)據(jù)發(fā)布器的主要功能是根據(jù)給定的質(zhì)量策略建立相應的數(shù)據(jù)發(fā)布鏈接。同時根據(jù)主題數(shù)據(jù)的質(zhì)量策略,把數(shù)據(jù)發(fā)送給已訂閱該主題數(shù)據(jù)的訂閱者。TPSBLIB中數(shù)據(jù)發(fā)布器主要由發(fā)送數(shù)據(jù)隊列、發(fā)布控制器和數(shù)據(jù)發(fā)布接口鏈路3個部分組成(見圖8)。

數(shù)據(jù)發(fā)布控制器是數(shù)據(jù)發(fā)布器的核心,管理和運行一個獨立的數(shù)據(jù)發(fā)布線程。該線程從發(fā)送數(shù)據(jù)隊列中獲取待發(fā)布的主題數(shù)據(jù),并將這些數(shù)據(jù)通過發(fā)布接口鏈路發(fā)送到已訂閱主題的訂閱者。

發(fā)布數(shù)據(jù)接口為數(shù)據(jù)寫入器或者其他模塊提供發(fā)布數(shù)據(jù)接口,對發(fā)送的數(shù)據(jù)按照特定的格式生成發(fā)送數(shù)據(jù)緩存,并把緩存相關信息寫入發(fā)送數(shù)據(jù)隊列。發(fā)送數(shù)據(jù)隊列使用優(yōu)先隊列,每個待發(fā)送的數(shù)據(jù)都有一個優(yōu)先級,發(fā)布控制器首先發(fā)布隊列中優(yōu)先級最高的數(shù)據(jù)。當發(fā)送數(shù)據(jù)隊列沒有數(shù)據(jù)的時候,發(fā)送控制器定時發(fā)布心跳消息,表明數(shù)據(jù)發(fā)布器在正常工作。

為了支持不同質(zhì)量屬性主題數(shù)據(jù)的發(fā)布訂閱,TPSBLIB中提供兩種策略的發(fā)布鏈路:可靠發(fā)布鏈路和非可靠發(fā)布鏈路。可靠發(fā)布鏈路使用TCP協(xié)議,保證數(shù)據(jù)可靠的發(fā)送到訂閱者;非可靠鏈路使用用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,UDP)協(xié)議,占用的網(wǎng)絡帶寬比較少,但是不能保證所有訂閱者都收到完整的數(shù)據(jù)。

TPSBLIB中,數(shù)據(jù)發(fā)布接口鏈路采用ZMQ網(wǎng)絡庫的PUB類型套接字,相比于直接使用socket進行接口鏈路實現(xiàn),有效降低底層物理鏈路管理的復雜性。

3.3 數(shù)據(jù)訂閱器

TPSBLIB中,數(shù)據(jù)訂閱器由訂閱鏈路管理、數(shù)據(jù)接收處理、數(shù)據(jù)派遣處理、接收數(shù)據(jù)隊列和數(shù)據(jù)訂閱鏈路等部分組成,如圖9所示。

訂閱鏈路管理根據(jù)本節(jié)點訂閱的數(shù)據(jù)主題,自動與發(fā)布器建立通信鏈路,在數(shù)據(jù)發(fā)布器下線或者對應的主題數(shù)據(jù)取消訂閱的時候,斷開與該發(fā)布器的連接鏈路。數(shù)據(jù)接收處理建立一個獨立的數(shù)據(jù)接收線程,等待并讀取訂閱鏈路中的數(shù)據(jù),并根據(jù)約定數(shù)據(jù)格式,對數(shù)據(jù)進行解析,恢復出完整的主題數(shù)據(jù)信息,并將這些主題數(shù)據(jù)寫入接收數(shù)據(jù)隊列。為了提高數(shù)據(jù)接收處理的穩(wěn)定性,數(shù)據(jù)派遣處理建立一個數(shù)據(jù)派遣線程。該線程從接收數(shù)據(jù)隊列中讀取數(shù)據(jù),并把數(shù)據(jù)發(fā)送給相應的數(shù)據(jù)讀取器提供的主題數(shù)據(jù)處理者。

TPSBLIB中,數(shù)據(jù)訂閱鏈路使用ZMQ網(wǎng)絡庫的SUB類型套接字,與數(shù)據(jù)發(fā)發(fā)布鏈路的PUB類型套接字配合應用,實現(xiàn)各個節(jié)點上下線的順序無關處理。

3.4 TPSBLIB實現(xiàn)

TPSBLIB的實現(xiàn)參考DDS的類結構,并根據(jù)上文設計對其進行調(diào)整簡化,類結構體如圖10所示。圖10中DomainParticipant主要實現(xiàn)上文中的節(jié)點管理器功能,Publisher實現(xiàn)發(fā)布器的功能,Subscriber實現(xiàn)訂閱器功能[7]。

為便于應用開發(fā),TPSBLIB提供配置文件對中間件相關信息進行配置,并通過提供簡單接口對中間件進行訪問控制,從而極大地提高應用開發(fā)的便捷性和高效性。

配置文件采用XML格式。配置內(nèi)容包括節(jié)點信息配置、域信息配置、發(fā)布器與發(fā)布主題配置、訂閱器與訂閱主題配置等信息。配置文件格式如下所示。

應用接口層為應用提供簡單的接口,包括中間件初始化、設置主題數(shù)據(jù)接收回調(diào)、發(fā)送主題數(shù)據(jù)、關閉中間件4個,應用接口函數(shù)聲明如下文。

void initSDDS(void);

typedef void recvSDDSTopicData(char* topic,char* source, char* data, int len);

void setSDDSTopicDataRecver(recvSDDSTopicDa ta* recv);

void sendSDDSTopicData(char* topic, char* data,int len);

void closeSDDS(void);

4 結 語

本文分析設計和實現(xiàn)了一個簡單數(shù)據(jù)發(fā)布訂閱通信庫(TPSBLIB),該通信庫參考DDS規(guī)范相關的概念與思路,并在ZeroMQ(ZMQ)網(wǎng)絡庫的基礎上進行實現(xiàn)。TPSBLIB采用數(shù)據(jù)發(fā)布訂閱通信模式,并提供數(shù)據(jù)可靠傳輸和非可靠傳輸兩種策略,基本滿足小規(guī)模分布式應用系統(tǒng)對信息交換實時性和靈活性的需求。

猜你喜歡
信息系統(tǒng)
Smartflower POP 一體式光伏系統(tǒng)
WJ-700無人機系統(tǒng)
ZC系列無人機遙感系統(tǒng)
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統(tǒng)
半沸制皂系統(tǒng)(下)
連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
信息
健康信息
祝您健康(1987年3期)1987-12-30 09:52:32
主站蜘蛛池模板: a级毛片在线免费观看| 国产成人一二三| 国产chinese男男gay视频网| 五月婷婷丁香色| 亚洲欧美成人影院| 亚洲第一视频网站| 国产成人久久777777| 亚洲美女久久| 色婷婷在线播放| 欧美福利在线| 婷婷开心中文字幕| 呦女亚洲一区精品| 国产一区二区精品福利| 亚洲综合婷婷激情| 456亚洲人成高清在线| 日韩免费毛片视频| 亚洲欧洲综合| 99ri国产在线| 国产欧美网站| 日韩欧美高清视频| 亚洲va在线观看| 亚洲综合18p| 中文成人在线视频| 91成人试看福利体验区| 中国丰满人妻无码束缚啪啪| 亚洲 欧美 偷自乱 图片| 精品综合久久久久久97超人| 国产在线精彩视频论坛| 成人精品视频一区二区在线| 欧美日韩成人在线观看| 黄色三级网站免费| 亚洲av片在线免费观看| 国产成人亚洲精品色欲AV | 久久综合激情网| 国产成人精品在线| 呦系列视频一区二区三区| 国产97区一区二区三区无码| 人人妻人人澡人人爽欧美一区| 黄片一区二区三区| 亚洲精品无码日韩国产不卡| 亚洲精品人成网线在线 | 色综合成人| 成人噜噜噜视频在线观看| 亚洲最大综合网| 国产欧美日韩专区发布| 国产精品第一区| 99久久精品免费看国产电影| 99视频免费观看| 激情影院内射美女| 亚洲区第一页| 日韩av手机在线| 欧美人与动牲交a欧美精品| 国内精品久久九九国产精品| 国产欧美性爱网| 日韩天堂视频| 一级毛片在线免费视频| 亚洲啪啪网| 国产成人久久综合一区| 欧美在线国产| AV老司机AV天堂| 青青青视频91在线 | 一级毛片a女人刺激视频免费| 欧美日韩成人在线观看 | 亚洲中文字幕久久精品无码一区| 国国产a国产片免费麻豆| 精品国产一二三区| 69国产精品视频免费| 久久天天躁狠狠躁夜夜2020一| 韩国福利一区| 日本午夜精品一本在线观看| www精品久久| 亚洲精品无码日韩国产不卡| 在线观看国产精美视频| 黄色网页在线播放| 福利在线免费视频| 国产区福利小视频在线观看尤物| 福利视频久久| 伊人中文网| 亚洲三级色| 免费在线色| 欧美亚洲国产精品久久蜜芽| 中文字幕无码电影|