《淺談?wù)嘢OA架構(gòu)》第1篇 背景介紹

引言:

我們是車載以太網(wǎng)小L,深耕于整車以太網(wǎng)架構(gòu)系統(tǒng)設(shè)計(jì)和軟件開發(fā),入過(guò)很多坑,尤其是SOA架構(gòu),沒(méi)有經(jīng)驗(yàn)可以借鑒,一路過(guò)關(guān)斬將,摸著石頭過(guò)河,可謂經(jīng)歷九九八十一難,有一堆的經(jīng)驗(yàn)和心得,想和行業(yè)內(nèi)同仁分享和探討,如果能夠幫助大家解決一些實(shí)際問(wèn)題,那將是我分享的意義所在,喜歡的話,記得關(guān)注我哦

《淺談?wù)嘢OA架構(gòu)》系列分為四大部分,層層遞進(jìn),干活滿滿,千萬(wàn)不要錯(cuò)過(guò)哦:

1.?背景介紹

2.大家眼中的SOA

3.我眼中的SOA

4.整車SOA系統(tǒng)設(shè)計(jì)分享

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?背景介紹

首先讓我們從背景介紹作為切入點(diǎn),來(lái)介紹SOA。在開始之前,需要跟大家交代一下SOA的相關(guān)概念定義。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 01

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 定義

? ? ? ? 中間件:一種獨(dú)立的系統(tǒng)軟件服務(wù)程序,分布式應(yīng)用軟件借助這種軟件在不同的技術(shù)之間共享資源,中間件位于客戶機(jī)服務(wù)器的操作系統(tǒng)之上,管理計(jì)算資源和網(wǎng)絡(luò)通信。

? ? ? ? SOME/IP:Scalable service-Oriented MiddlewarE over IP,一種中間件,在傳輸層UDP/TCP協(xié)議基礎(chǔ)之上,應(yīng)用層之下的特定協(xié)議,擁有特定的服務(wù)交互機(jī)制,服務(wù)上線后廣播告知域內(nèi)其他節(jié)點(diǎn),其他節(jié)點(diǎn)收到服務(wù)廣播后,請(qǐng)求或者訂閱相關(guān)服務(wù)接口。

? ? ? ? HTTP:互聯(lián)網(wǎng)常用的服務(wù)協(xié)議,使用GET/POST等機(jī)制來(lái)獲取或者設(shè)置相關(guān)數(shù)據(jù)。在汽車行業(yè)內(nèi),一般用于車內(nèi)節(jié)點(diǎn)和云端無(wú)線通信協(xié)議,傳輸大于10MB的數(shù)據(jù)

? ? ? ? MQTT:互聯(lián)網(wǎng)常用的服務(wù)協(xié)議,基于訂閱和發(fā)布機(jī)制來(lái)獲取或者設(shè)置相關(guān)數(shù)據(jù)。在汽車行業(yè)內(nèi),一般也用于車內(nèi)節(jié)點(diǎn)和云端無(wú)線通信協(xié)議,傳輸小于10MB的數(shù)據(jù)。

HTTP,MQTT和SOMEIP均用于實(shí)現(xiàn)SOA架構(gòu)的通信,只是負(fù)責(zé)的場(chǎng)景不同,SOME/IP協(xié)議用于車內(nèi)節(jié)點(diǎn)之間的服務(wù)通信,HTTP/MQTT用于和互聯(lián)網(wǎng)模塊通信,三者實(shí)現(xiàn)機(jī)制相類似,可以相互切換。

? ? ? ? ? ?服務(wù)

互聯(lián)網(wǎng)概念:應(yīng)用了面向?qū)ο蠓?wù)之后的具有豐富外延(API)的邏輯單元,通過(guò)發(fā)布服務(wù)接口的方式使其功能對(duì)外可見的軟件程序

Classic AUTOSAR概念:提供一個(gè)或多個(gè)服務(wù)接口的功能實(shí)體;

自己的理解:汽車行業(yè)內(nèi),將最小功能邏輯單位封裝成服務(wù),通過(guò)調(diào)用服務(wù)接口,來(lái)實(shí)現(xiàn)不同功能邏輯模塊的相互交互,實(shí)現(xiàn)數(shù)據(jù)交互。

? ? ? ?SOA:

是一個(gè)組件模型,它將應(yīng)用程序的不同功能單元(稱為服務(wù))進(jìn)行拆分,并通過(guò)這些服務(wù)之間定義良好的接口和協(xié)議聯(lián)系起來(lái)。接口是采用中立的方式進(jìn)行定義的,它應(yīng)該獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語(yǔ)言。這使得構(gòu)件在各種各樣的系統(tǒng)中的服務(wù)可以以一種統(tǒng)一和通用的方式進(jìn)行交互?!俣劝倏?/p>

一種粗粒度小、松耦合服務(wù)架構(gòu),服務(wù)之間通過(guò)簡(jiǎn)單、精確定義接口進(jìn)行通訊,不涉及底層編程接口和通訊模型

需要注意的是,SOA架構(gòu)并不僅限于HTTP、MQTT、SOME/IP協(xié)議來(lái)實(shí)現(xiàn)

Hybervisor:

提供平臺(tái)虛擬化,通過(guò)某種方式隱藏底層物理硬件的過(guò)程,從而讓多個(gè)操作系統(tǒng)可以透明地使用和共享它;

URL:

在WWW上,每一信息資源都有統(tǒng)一的且在網(wǎng)上唯一的地址,該地址就叫URL(r,統(tǒng)一資源定位符),它是WWW的統(tǒng)一資源定位標(biāo)志,就是指網(wǎng)絡(luò)地址。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?電子電器架構(gòu)

對(duì)于整車電子電器架構(gòu)的發(fā)展以及趨勢(shì),網(wǎng)絡(luò)上有各種分享,這邊就不做累述了, 大家可自行百度。

不管是域控制器電子電器架構(gòu)還是Zonal電子電器架構(gòu)都依托于SOA架構(gòu)理念。因?yàn)镾OA架構(gòu)的軟硬件解耦,所以這兩種架構(gòu)的SOA設(shè)計(jì)理念是完全相同,并且可以相互復(fù)用,所以在推廣和設(shè)計(jì)新型電子電器架構(gòu)的,落實(shí)好SOA理念,對(duì)于發(fā)揮架構(gòu)的優(yōu)勢(shì)至關(guān)重要。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 互聯(lián)網(wǎng)SOA理念

互聯(lián)網(wǎng)對(duì)SOA架構(gòu)的定義是一種架構(gòu)思想,并沒(méi)有公認(rèn)的定義,從不同的方面來(lái)進(jìn)行描述,有的說(shuō)SOA是一種應(yīng)用程序架構(gòu),所有功能都定義為獨(dú)立的服務(wù),這些服務(wù)有非常明確的可以被調(diào)用的服務(wù)接口,能夠按約定好的順序調(diào)用這些服務(wù)接口來(lái)實(shí)現(xiàn)業(yè)務(wù)流程,有的還說(shuō)服務(wù)需要精準(zhǔn)定義,非常完備的封裝,是服務(wù)間非常獨(dú)立的函數(shù),其實(shí)SOA本質(zhì)上是服務(wù)的集合,服務(wù)與服務(wù)之間可以相互調(diào)用和通信,可以是簡(jiǎn)單的數(shù)據(jù)傳輸或者服務(wù)之間協(xié)作完成某些操作功能,還有的說(shuō)SOA是一種基于客戶端和服務(wù)端模式的架構(gòu)軟件設(shè)計(jì)方法,應(yīng)用由服務(wù)和它的使用者組合而成,它特別注重服務(wù)所對(duì)應(yīng)的組件之間的松耦合性,所有的接口都是標(biāo)準(zhǔn)化,獨(dú)立化。

通過(guò)前輩的總結(jié),不難發(fā)現(xiàn)SOA的實(shí)現(xiàn)是多元化的,同理SOA架構(gòu)下的通信協(xié)議是多元化的,任何基于服務(wù)機(jī)制的協(xié)議均可以認(rèn)為是SOA架構(gòu)通信協(xié)議。但是汽車行業(yè),運(yùn)用比較廣泛的主要是HTTP、MQTT和SOME/IP協(xié)議,其中SOME/IP是滿足車規(guī)要求,而HTTP和MQTT承接與互聯(lián)網(wǎng),多運(yùn)用于無(wú)線網(wǎng)絡(luò),以便于車內(nèi)節(jié)點(diǎn)和云端交互,但也可以用于車內(nèi)有線以太網(wǎng),由此可見通信協(xié)議不是重點(diǎn),基于服務(wù)通信的理念是SOA架構(gòu)得以發(fā)展的精髓。

在正式講解整車SOA架構(gòu)之前,我們先介紹一下HTTP和MQTT,讓大家對(duì)SOA架構(gòu)的通信機(jī)制有一個(gè)初步了解。HTTP和MQTT都是互聯(lián)網(wǎng)SOA架構(gòu)服務(wù)通信協(xié)議,那如何選擇呢,請(qǐng)關(guān)注后續(xù)《整車SOA系統(tǒng)設(shè)計(jì)分享》章節(jié)詳細(xì)介紹。

1.HTTP

HTTP作為超文本傳輸協(xié)議,標(biāo)準(zhǔn)為RFC1945和RFC 2616(版本不同),眾所周知是用于從WWW服務(wù)器傳輸超文本到本地瀏覽器的一種非常常用的應(yīng)用層協(xié)議,基于請(qǐng)求和響應(yīng)的通信機(jī)制,之所以說(shuō)它是應(yīng)用層協(xié)議,是因?yàn)镠TTP協(xié)議是位于TCP協(xié)議之上。這里請(qǐng)注意,基于TCP傳輸,那TCP必須基于三次握手,才能實(shí)現(xiàn)客戶端和服務(wù)器之間的數(shù)據(jù)傳輸。(三次握手機(jī)制請(qǐng)自行百度)

這里有個(gè)疑問(wèn),為什么我們?yōu)g覽網(wǎng)頁(yè)的時(shí)候經(jīng)??吹降氖莌ttps字符?肯定有好多人跟我有一樣的想法吧,后來(lái)了解才知道是因?yàn)樵赥CP和HTTP協(xié)議之間引入TLS信息安全協(xié)議后,才成為HTTPS。

基于請(qǐng)求和響應(yīng)的通信機(jī)制,所有的通信是客戶端發(fā)起請(qǐng)求,服務(wù)器針對(duì)請(qǐng)求作出對(duì)應(yīng)的響應(yīng),因此如果客戶端沒(méi)有發(fā)起請(qǐng)求的話,服務(wù)器就無(wú)法主動(dòng)給客戶端發(fā)送消息。這里考大家一個(gè)問(wèn)題,如果我們一定要實(shí)現(xiàn)服務(wù)器主動(dòng)發(fā)送消息給客戶端,那該如何用HTTP來(lái)實(shí)現(xiàn)呢?(后續(xù)文檔中解答,敬請(qǐng)關(guān)注 )

兩種最常用的HTTP服務(wù)接口是GET和POST,其中GET是客戶端從指定的服務(wù)器資源中請(qǐng)求數(shù)據(jù),POST則是向指定的服務(wù)器資源提交要被處理的數(shù)據(jù)。

下面詳細(xì)的介紹下這兩種服務(wù)接口。

?Get:

如果當(dāng)客戶端要從服務(wù)器中讀取相關(guān)數(shù)據(jù)時(shí),使用的都是GET方式。GET方法要求服務(wù)器將URL定位的資源放在響應(yīng)報(bào)文的數(shù)據(jù)部分,以響應(yīng)的形式返回給客戶端。使用GET方法時(shí),請(qǐng)求參數(shù)和對(duì)應(yīng)的值附加在URL后面,利用一個(gè)問(wèn)號(hào)‘?’代表URL的結(jié)尾與請(qǐng)求參數(shù)的開始,傳遞參數(shù)長(zhǎng)度受限制。例如,/index.jsp?id=100&op=bind。通過(guò)GET方式傳遞的數(shù)據(jù)直接放在地址中,所以GET方式的請(qǐng)求一般不包含“請(qǐng)求內(nèi)容”部分,請(qǐng)求數(shù)據(jù)以地址的形式表現(xiàn)在請(qǐng)求行。地址中‘?’之后的部分就是通過(guò)GET發(fā)送的請(qǐng)求數(shù)據(jù),各個(gè)數(shù)據(jù)之間用‘&’符號(hào)隔開。另外,由于不同的瀏覽器對(duì)地址的字符限制也有所不同,一半最多只能識(shí)別1024個(gè)字符,所以如果需要傳送大量數(shù)據(jù)的時(shí)候,也不適合使用GET方式。如果數(shù)據(jù)是英文字母/數(shù)字,原樣發(fā)送;如果是空格,轉(zhuǎn)換為+;如果是中文/其他字符,則直接把字符串用BASE64加密,得出:%E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號(hào)以16進(jìn)制表示的ASCII。

POST:

POST允許客戶端給服務(wù)器提供信息較多。POST方法將請(qǐng)求參數(shù)封裝在HTTP請(qǐng)求數(shù)據(jù)中,以名稱/值的形式出現(xiàn),可以傳輸大量數(shù)據(jù),這樣POST方式對(duì)傳送的數(shù)據(jù)大小沒(méi)有限制,而且也不會(huì)顯示在URL中。POST方式請(qǐng)求行中不包含數(shù)據(jù)字符串,這些數(shù)據(jù)保存于“請(qǐng)求內(nèi)容”部分,各數(shù)據(jù)之間也是使用‘&’符號(hào)隔開。POST方式大多用于頁(yè)面的表單中。因?yàn)镻OST也能完成GET的功能,因此多數(shù)人在設(shè)計(jì)表單的時(shí)候一律都使用POST方式,其實(shí)這是一個(gè)誤區(qū)。GET方式也有自己的特點(diǎn)和優(yōu)勢(shì),我們應(yīng)該根據(jù)不同的情況來(lái)選擇是使用GET還是使用POST。

2.MQTT

MQTT,全稱為消息隊(duì)列遙測(cè)傳輸協(xié)議,位于TCP/IP協(xié)議簇之上,是為硬件性能低下的遠(yuǎn)程設(shè)備以及網(wǎng)絡(luò)狀況糟糕的情況下而設(shè)計(jì)的發(fā)布訂閱型的消息中間件,輕量、簡(jiǎn)單、開放和易于實(shí)現(xiàn),是它的主要亮點(diǎn),也直接決定了它的運(yùn)用非常廣泛。

在介紹MQTT的發(fā)布訂閱型,必須要先明確一下通信角色。MQTT進(jìn)一步細(xì)化了服務(wù)器和客戶端的模式,采用的是Client和Broker,如下圖所示,發(fā)布和訂閱者均為Client,而服務(wù)器端則成為Broker。


Broker類似一個(gè)獵頭的作用,會(huì)在各個(gè)企業(yè)中收集崗位信息,根據(jù)崗位主題Topic來(lái)過(guò)濾分類不同的崗位,并根據(jù)客戶端需求推送給相關(guān)信息,比如某個(gè)訂閱者告訴Broker,凡是涉及SOA軟件開發(fā)工程師招聘消息都發(fā)給自己(訂閱行為),之后某個(gè)發(fā)布者有一個(gè)SOA軟件開發(fā)工程師崗位發(fā)布給獵頭Broker,崗位主題就是SOA軟件開發(fā)工程師招聘,發(fā)布的內(nèi)容是本月30號(hào)面試,這樣Broker收集和整合發(fā)布和訂閱者的夢(mèng)需求者,作為獵頭,需要將發(fā)布的內(nèi)容給到需要的訂閱者手上,因此不管是發(fā)布者還是訂閱者,都不知道對(duì)方的身份,只需要將相關(guān)topic的消息發(fā)送給Broker,由Broker來(lái)代理和整合過(guò)濾,間接完成訂閱和發(fā)布相關(guān)交互。

看到這邊,大家也肯定同樣的疑問(wèn),MQTT只有發(fā)布和訂閱,是如何做到類似HTTP的GET和POST機(jī)制呢,這個(gè)問(wèn)題同樣參看后續(xù)文章《淺談SOA架構(gòu)系統(tǒng)設(shè)計(jì)——整車SOA系統(tǒng)設(shè)計(jì)》

綜上,HTTP和MQTT已經(jīng)有了一個(gè)初步的認(rèn)識(shí),請(qǐng)大家牢記,整車SOA架構(gòu)都是基于服務(wù)器和客戶端展開,服務(wù)接口也都是GET,SET,訂閱和發(fā)布。

請(qǐng)大家繼續(xù)關(guān)注《淺談?wù)嘢OA架構(gòu)》第2篇? ?大家眼中的SOA


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容