• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    面向服務(wù)的通信中間件的研究與應(yīng)用

    2023-10-31 06:58:18
    信息記錄材料 2023年9期
    關(guān)鍵詞:序列化服務(wù)端調(diào)用

    伍 新

    (航空工業(yè)西安航空計(jì)算技術(shù)研究所 陜西 西安 710068)

    0 引言

    在嵌入式領(lǐng)域,軟件通常采用單體架構(gòu),在該架構(gòu)下,開(kāi)發(fā)者能夠在軟件系統(tǒng)設(shè)計(jì)的同時(shí)設(shè)計(jì)各個(gè)電子控制單元(electronic control unit, ECU)的通信系統(tǒng);嵌入式系統(tǒng)處理的數(shù)據(jù)量相對(duì)較小,對(duì)帶寬的依賴也較小,一般采用控制器局域網(wǎng)總線(controller area network, CAN)面向信號(hào)的方式來(lái)設(shè)計(jì)通信系統(tǒng)[2]。

    隨著芯片工藝和通信技術(shù)的發(fā)展,軟硬系統(tǒng)的處理能力進(jìn)一步提升,業(yè)界為解決單體架構(gòu)可擴(kuò)展性差的瓶頸,將互聯(lián)網(wǎng)技術(shù)領(lǐng)域中面向服務(wù)的軟件架構(gòu)(service-oriented architecture, SOA)引入嵌入式領(lǐng)域[3],SOA是面向服務(wù)的架構(gòu),整個(gè)系統(tǒng)由一個(gè)個(gè)服務(wù)組裝而成,各服務(wù)內(nèi)部體現(xiàn)為高內(nèi)聚特性,服務(wù)之間則是體現(xiàn)為低耦合特性[4],因其高內(nèi)聚、低耦合、拓展性強(qiáng)等特性,為單體架構(gòu)的拓展性差、維護(hù)成本高的問(wèn)題提供了一種可行的解決方案。以太網(wǎng)因其具有應(yīng)用廣泛、通信速率較高、成本低廉和可持續(xù)發(fā)展?jié)摿Υ蟮葍?yōu)勢(shì)[5]備受開(kāi)發(fā)者青睞,為了解決網(wǎng)絡(luò)數(shù)據(jù)處理的技術(shù)瓶頸,將以太網(wǎng)應(yīng)用于該領(lǐng)域,鑒于可擴(kuò)展性和以太網(wǎng)相適應(yīng)的需求設(shè)計(jì)了SOMEIP。

    1 SOMEIP特點(diǎn)與通信機(jī)制

    SOMEIP采用客戶端服務(wù)器的通信架構(gòu),客戶端可根據(jù)服務(wù)接口類型,使用遠(yuǎn)程服務(wù)調(diào)用機(jī)制,通過(guò)數(shù)據(jù)序列化與反序列化使得數(shù)據(jù)可以在網(wǎng)絡(luò)中傳輸,通過(guò)服務(wù)發(fā)現(xiàn)機(jī)制來(lái)動(dòng)態(tài)地獲取可用的服務(wù)實(shí)例,通過(guò)發(fā)布訂閱機(jī)制來(lái)管理服務(wù)的發(fā)布與訂閱關(guān)系。該協(xié)議隸屬于應(yīng)用層,且緊靠傳輸層,為具體業(yè)務(wù)邏輯提供調(diào)用接口,同時(shí)提供數(shù)據(jù)的封裝與解封功能。

    面向信號(hào)的通信,消息發(fā)送方會(huì)將發(fā)送內(nèi)容放到一個(gè)緩沖區(qū)中,緩沖區(qū)的數(shù)據(jù)會(huì)按照CAN總線配置的周期發(fā)送至對(duì)端緩沖區(qū),待對(duì)端使用數(shù)據(jù)時(shí)就從緩沖區(qū)中取出。該設(shè)計(jì)未考慮數(shù)據(jù)的供需關(guān)系,可能造成負(fù)載過(guò)重。面向服務(wù)的通信,則是規(guī)避了這一缺陷,實(shí)現(xiàn)了按需通信,同時(shí)為避免對(duì)同一服務(wù)的多次調(diào)用,提供了發(fā)布訂閱機(jī)制,實(shí)現(xiàn)了一次訂閱,多次接收。

    此外SOMEIP作為通信中間件,實(shí)現(xiàn)了業(yè)務(wù)邏輯與底層通信之間的解耦,上層業(yè)務(wù)的擴(kuò)展不會(huì)影響底層通信的運(yùn)行,具有很好的擴(kuò)展性。

    1.1 SOMEIP特點(diǎn)

    SOMEIP的特點(diǎn)是采用面向服務(wù)的設(shè)計(jì)模式,將原有的功能模塊抽象成一個(gè)個(gè)具體的服務(wù),ECU在需要某項(xiàng)功能時(shí),可以通過(guò)它來(lái)跨ECU異步調(diào)用具體服務(wù)。其核心優(yōu)勢(shì)包括:(1)滿足嵌入式領(lǐng)域?qū)浻布Y源的限制。(2)具有很好的兼容性,如文獻(xiàn)[6]給出的SOMEIP與CAN之間的數(shù)據(jù)轉(zhuǎn)換。(3)可從小平臺(tái)擴(kuò)展到大型平臺(tái),可以在不同的操作系統(tǒng)上實(shí)現(xiàn),甚至可以在沒(méi)有操作系統(tǒng)的情況下實(shí)現(xiàn)。

    1.2 通信機(jī)制

    SOMEIP協(xié)議是以服務(wù)為單位管理數(shù)據(jù)信息的,服務(wù)由若干方法、事件和域構(gòu)成。方法是服務(wù)的某項(xiàng)具體功能,是客戶端調(diào)用的對(duì)象。事件用于發(fā)布訂閱,可以周期性或者當(dāng)事件觸發(fā)時(shí)向訂閱者主動(dòng)發(fā)送信息,其內(nèi)嵌一個(gè)消息結(jié)構(gòu),服務(wù)方可自定義所要發(fā)送的內(nèi)容。域是針對(duì)服務(wù)中的某個(gè)具體屬性而設(shè)計(jì)的,主要對(duì)外提供屬性的獲取、設(shè)置和通知接口,客戶端可通過(guò)獲取和設(shè)置接口實(shí)現(xiàn)對(duì)服務(wù)端屬性值的獲取與設(shè)置,當(dāng)客戶端訂閱該域時(shí),通知還可以像事件一樣,主動(dòng)提供通知,此兩者的區(qū)別在于消費(fèi)者在訂閱域后,通知會(huì)主動(dòng)通知消費(fèi)者,而事件不會(huì)。

    SOMEIP就這3種接口提供對(duì)應(yīng)的通信機(jī)制,分別是基于方法通信、基于事件通信和基于域通信。其中基于方法通信又根據(jù)是否需要返回值而分為請(qǐng)求有回復(fù)和請(qǐng)求無(wú)回復(fù)2種。在基于方法通信中請(qǐng)求有回復(fù)和請(qǐng)求無(wú)回復(fù)的區(qū)別在于前者具有返回值,可以保證遠(yuǎn)程過(guò)程調(diào)用的正確性,而后者則是無(wú)返回值的,因此對(duì)于遠(yuǎn)程過(guò)程調(diào)用正確與否不得而知。其通信機(jī)制如圖1所示。

    圖1 SOMEIP通信原理圖

    客戶端與服務(wù)端在收發(fā)消息時(shí),有多種通信機(jī)制,選擇何種通信機(jī)制取決于消息類型的選擇,協(xié)議定義的消息類型如表1所示。

    表1 消息類型

    對(duì)于請(qǐng)求有回復(fù)通信,客戶端可創(chuàng)建REQUEST類型的消息,并得到服務(wù)端發(fā)來(lái)的RESPONSE類型的消息;對(duì)于請(qǐng)求無(wú)回復(fù)通信,客戶端僅需創(chuàng)建REQUEST_NO_RETURN類型的消息,通過(guò)接口發(fā)給對(duì)端即可。至于事件通信和域中的通知,服務(wù)端會(huì)創(chuàng)建NOTIFICATION類型的消息發(fā)給訂閱者。

    2 VSOMEIP

    VSOMEIP是SOMEIP的開(kāi)源框架,實(shí)現(xiàn)了SOMEIP協(xié)議中提出的各項(xiàng)功能,該框架解決了微服務(wù)框架中注冊(cè)中心單一而造成的單點(diǎn)故障問(wèn)題。

    2.1 VSOMEIP結(jié)構(gòu)

    VSOMEIP通過(guò)一個(gè)應(yīng)用對(duì)外提供一套接口來(lái)給用戶使用,在該應(yīng)用中內(nèi)嵌一個(gè)路由對(duì)象來(lái)實(shí)現(xiàn)該框架的核心功能。路由對(duì)象又分為主模式和代理模式,其中主模式下的路由對(duì)象充當(dāng)注冊(cè)中心和網(wǎng)關(guān)的角色,代理模式下的路由對(duì)象充當(dāng)代理路由的角色,代理路由將核心業(yè)務(wù)發(fā)給主路由處理。在本地可以有多個(gè)應(yīng)用,只有一個(gè)應(yīng)用的路由對(duì)象是主路由,其他應(yīng)用的路由對(duì)象是代理路由,可以通過(guò)配置文件設(shè)置主路由,默認(rèn)第一個(gè)應(yīng)用中的路由對(duì)象為主路由。其結(jié)構(gòu)如圖2所示。

    圖2 框架結(jié)構(gòu)圖

    其中代理處理對(duì)象主要處理本地邏輯,遠(yuǎn)程邏輯則是通過(guò)服務(wù)發(fā)現(xiàn)對(duì)象生成對(duì)應(yīng)報(bào)文并由主路由廣播。

    2.2 VSOMEIP工作機(jī)制

    VSOMEIP采用的IP地址為基本端口+偏移量的方式,其中偏移量就是每個(gè)應(yīng)用的ID值。主路由模式下的應(yīng)用,在初始化時(shí)就獲取了該ID,而其他應(yīng)用在開(kāi)始工作前需要向主路由注冊(cè),一方面是獲取ID值,另一方面則是維護(hù)與主路由的連接。注冊(cè)完成后,就可以回調(diào)對(duì)應(yīng)的接口來(lái)進(jìn)行后續(xù)邏輯,比如服務(wù)端執(zhí)行服務(wù)以及事件的注冊(cè)、客戶端執(zhí)行服務(wù)的請(qǐng)求調(diào)用與事件的訂閱等。

    服務(wù)端服務(wù)或者事件的注冊(cè)都是向本地注冊(cè)中心發(fā)送一個(gè)注冊(cè)命令和注冊(cè)信息,在注冊(cè)中心生成對(duì)應(yīng)對(duì)象并保存到對(duì)應(yīng)列表中,區(qū)別在于服務(wù)注冊(cè)后會(huì)通過(guò)注冊(cè)中心的服務(wù)發(fā)現(xiàn)對(duì)象生成并廣播發(fā)布報(bào)文而事件不會(huì),原因在于事件在邏輯上是隸屬于某個(gè)服務(wù)的,此外服務(wù)注冊(cè)完成后還會(huì)利用本地的請(qǐng)求列表通知對(duì)應(yīng)的請(qǐng)求者。

    客戶端請(qǐng)求某服務(wù)實(shí)例的具體方法以及訂閱某事件都是通過(guò)應(yīng)用來(lái)實(shí)現(xiàn)的,在初始化時(shí)會(huì)將自定義的函數(shù)綁定到應(yīng)用對(duì)應(yīng)結(jié)構(gòu)中,等到條件滿足時(shí)回調(diào)對(duì)應(yīng)函數(shù)。對(duì)于本地邏輯,請(qǐng)求某個(gè)服務(wù)時(shí)會(huì)向主路由發(fā)送對(duì)應(yīng)命令,主路由會(huì)告知對(duì)應(yīng)服務(wù)的ID,然后客戶端就可以發(fā)起連接并將消息發(fā)送到對(duì)端;對(duì)于遠(yuǎn)程邏輯則是通過(guò)服務(wù)發(fā)現(xiàn)對(duì)象生成并廣播尋找服務(wù)的報(bào)文,獲取到對(duì)應(yīng)ID后在主路由端維護(hù)與遠(yuǎn)程服務(wù)的連接,客戶端在調(diào)用時(shí)會(huì)先將消息發(fā)給主路由,然后通過(guò)該連接發(fā)送到遠(yuǎn)端。事件的訂閱則是在事件的列表中添加對(duì)應(yīng)應(yīng)用的ID,本地與遠(yuǎn)程的區(qū)別在于本地只需要發(fā)送對(duì)應(yīng)命令給主路由,而遠(yuǎn)程則需要主路由生成并廣播對(duì)應(yīng)報(bào)文。

    2.3 服務(wù)發(fā)現(xiàn)工作機(jī)制

    服務(wù)發(fā)現(xiàn)是實(shí)現(xiàn)遠(yuǎn)程服務(wù)發(fā)布發(fā)現(xiàn)以及事件訂閱的功能組件,其核心任務(wù)是了解服務(wù)的狀態(tài)和位置。當(dāng)服務(wù)端與客戶端不在同一機(jī)器時(shí),則通過(guò)該模塊產(chǎn)生并廣播服務(wù)發(fā)現(xiàn)報(bào)文來(lái)完成。服務(wù)發(fā)現(xiàn)報(bào)文采用條目+選項(xiàng)的方式實(shí)現(xiàn)服務(wù)的遠(yuǎn)程發(fā)布與發(fā)現(xiàn)、事件的遠(yuǎn)程訂閱與取消等功能。條目對(duì)服務(wù)發(fā)現(xiàn)的功能進(jìn)行抽象,根據(jù)用于服務(wù)和事件分為2大類,其具體分類和功能如表2所示。

    表2 條目類型及功能

    選項(xiàng)是用來(lái)輔助條目實(shí)現(xiàn)其功能的,提供條目缺乏的一些輔助信息,主要用來(lái)告知對(duì)方本節(jié)點(diǎn)業(yè)務(wù)的IP和端口信息,以便對(duì)方能通過(guò)該地址進(jìn)行通信。

    3 應(yīng)用案例

    本小節(jié)結(jié)合VSOMEIP,設(shè)計(jì)了嵌入式設(shè)備蜂鳴器服務(wù)的案例,如下所示:

    Classbuzzer_server{

    Public:

    Buzzer_server() :app_(vsomeip::runtime::get()->create_application()),

    state(false),volume(0){}

    Voidinit(){}}--------------//app_initandbindon_Xintovsomeip

    Voidstart(){}--------------//app_start

    Voidstop(){}-------------------//unregisteron_Xandapp_stop

    Voidon_open(){}----------//F&Fopenthebuzzer

    Voidon_close(){}---------//F&Fclosethebuzzer

    Voidon_state(){}----------------//testtheAPPisregisterediftruethenoffer_service

    Voidon_set_volume(){}--------//fieldsetter

    Voidon_get_volume(){}---------//fieldgetter

    Voidon_notify_volume(){}-------//fieldnotifier

    Private:

    std::shared_ptrapp_;

    Boolstate;//stateupordown

    Unsignedintvolume;//voicelevel

    };

    本案例中只有一個(gè)開(kāi)關(guān)state和音量volume以及用于和VSOMEIP框架相連接的app_,默認(rèn)開(kāi)關(guān)是關(guān)閉狀態(tài),音量為0;buzzer_server接口是本案例的構(gòu)造函數(shù);init、start和stop接口分別是本案例的初始化和開(kāi)關(guān)接口,在初始化過(guò)程中須先對(duì)app_進(jìn)行初始化,且在app_初始化完成后需要將自定義的接口通過(guò)app_對(duì)應(yīng)接口綁定到VSOMEIP框架以備后續(xù)回調(diào)處理,開(kāi)關(guān)接口則是通過(guò)app_調(diào)用VSOMEIP的開(kāi)關(guān)接口;on_open和on_close接口則是蜂鳴器的開(kāi)關(guān)接口,用戶可通過(guò)請(qǐng)求有返回值方式來(lái)開(kāi)啟和關(guān)閉蜂鳴器;on_get_volume、on_set_volume和on_notify_volume_change接口則是針對(duì)volume字段而設(shè)計(jì)的field,用戶可通過(guò)請(qǐng)求有返回的方式調(diào)用前兩個(gè)接口來(lái)獲取以及設(shè)置音量大小,后者是一個(gè)通知接口,當(dāng)音量發(fā)生變化時(shí)主動(dòng)通知音量的訂閱者。

    4 框架總結(jié)

    VSOMEIP的核心優(yōu)勢(shì)是實(shí)現(xiàn)了SOA,并解決了注冊(cè)中心單點(diǎn)故障的問(wèn)題,同時(shí)實(shí)現(xiàn)了SOMEIP協(xié)議中定義的服務(wù)的注冊(cè)與動(dòng)態(tài)發(fā)現(xiàn)機(jī)制以及發(fā)布訂閱機(jī)制,實(shí)現(xiàn)了客戶端與服務(wù)端之間的按需通信,降低了網(wǎng)絡(luò)負(fù)載,解決了面向信號(hào)通信中數(shù)據(jù)處理規(guī)模較小,數(shù)據(jù)發(fā)送未考慮對(duì)端需求從而造成網(wǎng)絡(luò)過(guò)載的問(wèn)題,同時(shí)也實(shí)現(xiàn)了協(xié)議中消息頭部的序列化與反序列化功能。

    同時(shí)該框架也存在一些不足之處:一是它目前是依賴于C++,且不能自動(dòng)生成代碼;二是它缺乏對(duì)復(fù)雜數(shù)據(jù)類型的序列化與反序列化處理,需要手動(dòng)按照協(xié)議來(lái)處理,對(duì)開(kāi)發(fā)人員不太友好,可能會(huì)降低開(kāi)發(fā)效率,該框架中對(duì)服務(wù)實(shí)例全生命周期管理并未實(shí)現(xiàn)。針對(duì)前者,可以引入一個(gè)中間層來(lái)過(guò)渡,例如可以采用諸如ProtoBuf這類插件來(lái)生成不同語(yǔ)言的服務(wù)接口,并在服務(wù)中內(nèi)嵌一個(gè)VSOMEIP的應(yīng)用來(lái)實(shí)現(xiàn),對(duì)外可以支持多語(yǔ)言,底層還是采用C++;針對(duì)復(fù)雜接口序列化與反序列化問(wèn)題,可以將復(fù)雜數(shù)據(jù)類型定義成json格式,然后使用boost中的屬性樹(shù),將json轉(zhuǎn)為屬性樹(shù),拓展VSOMEIP消息處理接口,使其能夠加載boost屬性樹(shù)。針對(duì)服務(wù)實(shí)例全生命周期的管理,則可以拓展原框架中服務(wù)注冊(cè)接口,添加服務(wù)實(shí)例的生命周期,并設(shè)計(jì)一個(gè)接口,周期性地判斷該服務(wù)實(shí)例生命周期是否歸零,如服務(wù)實(shí)例到期,則可進(jìn)行后續(xù)下線處理。

    猜你喜歡
    序列化服務(wù)端調(diào)用
    如何建構(gòu)序列化閱讀教學(xué)
    甘肅教育(2020年14期)2020-09-11 07:58:36
    核電項(xiàng)目物項(xiàng)調(diào)用管理的應(yīng)用研究
    LabWindows/CVI下基于ActiveX技術(shù)的Excel調(diào)用
    云存儲(chǔ)中基于相似性的客戶-服務(wù)端雙端數(shù)據(jù)去重方法
    新時(shí)期《移動(dòng)Web服務(wù)端開(kāi)發(fā)》課程教學(xué)改革的研究
    在Windows Server 2008上創(chuàng)建應(yīng)用
    基于系統(tǒng)調(diào)用的惡意軟件檢測(cè)技術(shù)研究
    Java 反序列化漏洞研究
    作文訓(xùn)練微格化、序列化初探
    利用RFC技術(shù)實(shí)現(xiàn)SAP系統(tǒng)接口通信
    汕尾市| 汶上县| 普格县| 鲜城| 绥宁县| 望都县| 阿巴嘎旗| 安化县| 郁南县| 开鲁县| 密山市| 浑源县| 连州市| 吉首市| 通江县| 将乐县| 长乐市| 泽普县| 香格里拉县| 乐安县| 若尔盖县| 丽水市| 闽清县| 都安| 星座| 阿拉善右旗| 调兵山市| 阳高县| 吉林市| 涪陵区| 嘉义县| 南投市| 攀枝花市| 平昌县| 保山市| 庆元县| 湾仔区| 浙江省| 清流县| 隆安县| 苏尼特右旗|