業(yè)界普遍認(rèn)為,沒(méi)有SOA的下一代電子電氣架構(gòu)是沒(méi)有靈魂的。在這樣的價(jià)值觀驅(qū)動(dòng)下,汽車行業(yè)開(kāi)始了轟轟烈烈的SOA運(yùn)動(dòng)。而伴隨著車載以太網(wǎng)的量產(chǎn),SOME/IP、DDS等通訊協(xié)議的成熟,Adaptive AUTOSAR、ROS等操作系統(tǒng)中間件的不斷優(yōu)化,SOA在汽車行業(yè)落地的土壤也已具備,SOA也由雷聲大的口號(hào)階段進(jìn)入到雨點(diǎn)小的落地階段。 S
OA雖已是互聯(lián)網(wǎng)行業(yè)中的一位成名英雄,但在汽車行業(yè)卻是一個(gè)比較新的概念,目前并沒(méi)有一個(gè)放諸四海而皆準(zhǔn)的指導(dǎo)思想。從各家公布的資料來(lái)看,SOA被做成馬的也有,被做成騾子的也有,真可謂是千嬌百媚。
但是正如教員所說(shuō):實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),基于不同的方法、思想實(shí)踐出來(lái)的結(jié)果,如涓涓細(xì)流,終將匯成大一統(tǒng)的SOA指導(dǎo)思想。
前文《SOA,得服務(wù)者得天下?》已對(duì)SOA基礎(chǔ)知識(shí)有過(guò)介紹,本文在此基礎(chǔ)上,繼續(xù)閑聊一下SOA在落地路上的二三事。
SOA設(shè)計(jì)原則
SOA在其成名領(lǐng)域——互聯(lián)網(wǎng),用的是客戶端——服務(wù)器的架構(gòu)??蛻舳送ㄟ^(guò)網(wǎng)絡(luò)向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器響應(yīng)請(qǐng)求,這是客戶端——服務(wù)器架構(gòu)背后的主要邏輯,毫無(wú)疑問(wèn)這也是互聯(lián)網(wǎng)有史以來(lái)發(fā)布最成功的網(wǎng)絡(luò)技術(shù)之一。
客戶端——服務(wù)器架構(gòu)之上的進(jìn)一步抽象是面向服務(wù)的范式,這是將服務(wù)器中的信息組織成服務(wù)的模式,這個(gè)服務(wù)可以被發(fā)現(xiàn)、進(jìn)行交互或用作已知的語(yǔ)義。
這也就意味著該服務(wù)具有確定的行為,在給定相同的條件時(shí),總會(huì)產(chǎn)生同樣的結(jié)果。 這就好比你去麥當(dāng)勞點(diǎn)餐,麥當(dāng)勞提供了從“窮鬼”到“地主”級(jí)別的不同套餐,這些套餐就是這家麥當(dāng)勞門店所能提供的服務(wù),然后你為選擇的服務(wù)支付費(fèi)用。
麥當(dāng)勞生產(chǎn)這個(gè)訂單后,員工會(huì)按照麥當(dāng)勞定義好的流程,一個(gè)負(fù)責(zé)炸薯?xiàng)l,另一個(gè)負(fù)責(zé)制作漢堡,有條不紊地做著自己該做的事情。無(wú)論是誰(shuí)、無(wú)論何時(shí)點(diǎn)的套餐,顧客最終都會(huì)得到他想要的食物。麥當(dāng)勞的這些服務(wù)都是具有預(yù)先確定的行為和已知的術(shù)語(yǔ),并且會(huì)產(chǎn)生可預(yù)知的結(jié)果。
上述例子可以讓我們對(duì)SOA的實(shí)現(xiàn)窺探一二,也可以讓我們?cè)囍偨Y(jié)SOA在設(shè)計(jì)時(shí)應(yīng)盡可能遵循的原則。
一、抽象化
抽象化是SOA非常重要的一個(gè)設(shè)計(jì)原則,是指使用抽象層來(lái)隱藏網(wǎng)絡(luò)拓?fù)洹?a href="http://www.www27dydycom.cn/v/tag/1301/" target="_blank">通信和實(shí)現(xiàn)的復(fù)雜性。如果不利用抽象化,而讓客戶端知道實(shí)現(xiàn)該服務(wù)的所有細(xì)節(jié),那客戶端使用該服務(wù)的方式將會(huì)嚴(yán)重制約服務(wù)的演化。
對(duì)于顧客而言,他們并不需要知道麥當(dāng)勞內(nèi)部是什么樣的流程機(jī)制,里面的員工是如何進(jìn)行合作分工。他們僅僅需要關(guān)心麥當(dāng)勞能提供什么服務(wù),以及對(duì)應(yīng)的服務(wù)結(jié)果是什么。
換言之,我們定義服務(wù)的接口時(shí)(相當(dāng)于菜單),也僅僅需要把服務(wù)接口實(shí)現(xiàn)方式(顧客消費(fèi)方式)和接口調(diào)用的結(jié)果(食物照片)定義清楚。 為了確保遵循該原則,服務(wù)的公開(kāi)狀態(tài)應(yīng)該盡可能地少。此外,只應(yīng)規(guī)定服務(wù)行為的外在表現(xiàn)。
二、正式合約
一個(gè)服務(wù)之所以被稱為服務(wù),是因?yàn)槠浣o公開(kāi)的功能以及如何實(shí)現(xiàn)提供了正規(guī)的描述,即正式合約。這其實(shí)就是我們做SOA設(shè)計(jì)時(shí)定義的服務(wù)接口,每一個(gè)接口都應(yīng)該有明確的定義以及實(shí)現(xiàn)方式。
三、低耦合
在面向?qū)ο蟮能浖校瑔为?dú)的系統(tǒng)組件指的是被設(shè)計(jì)成無(wú)邊界效應(yīng)的獨(dú)立對(duì)象。那些發(fā)生在組件之間的相互作用可以被明確地定義和測(cè)試。將依賴關(guān)系減小到最小程度,也就是低耦合,使修改服務(wù)的實(shí)現(xiàn)方式時(shí)不會(huì)帶來(lái)意想不到的邊界效應(yīng),從而降低風(fēng)險(xiǎn)。
而對(duì)于SOA低耦合的設(shè)計(jì)原則,主要包括兩個(gè)方面:
(1)一是服務(wù)的實(shí)現(xiàn)方式和正式合約應(yīng)該分離開(kāi)來(lái)。服務(wù)的正式合約只要不變或者修改,那不管實(shí)現(xiàn)方式如何變化,這都不影響。就像去麥當(dāng)勞點(diǎn)了一個(gè)套餐,只要套餐內(nèi)容不變,不管麥當(dāng)勞內(nèi)部人員怎么分工,是一個(gè)人炸薯?xiàng)l再做漢堡,還是分不同的人分別去炸薯?xiàng)l和做漢堡,對(duì)于服務(wù)使用方來(lái)說(shuō)結(jié)果都是一樣的,他并不關(guān)心服務(wù)是怎么實(shí)現(xiàn)。
(2)二是服務(wù)的實(shí)現(xiàn)過(guò)程不要依賴另一個(gè)服務(wù)的結(jié)果。就比如麥當(dāng)勞A客戶點(diǎn)了套餐A,B客戶點(diǎn)了套餐B,就算套餐B不能完成,那也不會(huì)影響套餐A的制作。
四、可復(fù)用性
可復(fù)用性其實(shí)是SOA設(shè)計(jì)所期望的設(shè)計(jì)目標(biāo)。真正的可復(fù)用性是讓服務(wù)適用于多種不同應(yīng)用的能力。進(jìn)行一項(xiàng)服務(wù)的設(shè)計(jì)時(shí),如果沒(méi)有進(jìn)行認(rèn)真地思考,它可能僅能滿足某種特定的應(yīng)用。
而經(jīng)過(guò)思考的良好設(shè)計(jì),服務(wù)可以與具體的實(shí)現(xiàn)過(guò)程相獨(dú)立,這就意味著該服務(wù)可以在其它的應(yīng)用中快速地復(fù)制。
五、獨(dú)立性
每一個(gè)服務(wù)與客戶端的狀態(tài)應(yīng)該是相互獨(dú)立的,它應(yīng)該有它內(nèi)部既有的工作流程,而不依賴于客戶端的狀態(tài)。
這樣做的目的是剝離客戶端與服務(wù)端的狀態(tài)交互,這樣做的目的是無(wú)論客戶端來(lái)自哪里,在任何時(shí)間、任何地點(diǎn)請(qǐng)求同樣的服務(wù),服務(wù)端都以同樣的方式響應(yīng),從而得到相同的結(jié)果。
就像當(dāng)顧客點(diǎn)了一個(gè)漢堡時(shí),麥當(dāng)勞門店只要按照既有流程去制作就行,期間不用關(guān)心該用戶是誰(shuí)、來(lái)自哪里。
六、可組合性
我們?cè)谶M(jìn)行服務(wù)的設(shè)計(jì)時(shí),為了低耦合,我們往往把服務(wù)設(shè)計(jì)得小而精。然而在進(jìn)行汽車的服務(wù)架構(gòu)開(kāi)發(fā)時(shí),整車的系統(tǒng)往往是復(fù)雜的。經(jīng)常會(huì)有不同的用戶使用場(chǎng)景,針對(duì)不同的使用場(chǎng)景,利用現(xiàn)有的服務(wù),鼓勵(lì)可以聚合大的服務(wù),以實(shí)現(xiàn)更高級(jí)別的應(yīng)用。比如說(shuō)漢堡、炸雞、薯?xiàng)l、可樂(lè)這些都是屬于小的服務(wù),門店可以自由搭配組合形成新的不同套餐,在價(jià)格中形成一定的優(yōu)惠,以供客戶選擇。應(yīng)用到車上,氛圍燈、座椅、空調(diào)、音樂(lè)等屬于小的服務(wù),車企可以根據(jù)不同的組合,形成不同的用戶場(chǎng)景,比如休憩模式關(guān)閉所有燈光、音樂(lè),座椅和空調(diào)調(diào)整到舒適位置。
七、可發(fā)現(xiàn)性
可發(fā)現(xiàn)性指的是用戶可以通過(guò)某種特定的方式查詢到該服務(wù),而不是通過(guò)靜態(tài)編程的方式。例如在高德地圖中輸入麥當(dāng)勞,你就可以得到附近的門店的位置,而不用在手機(jī)中把每個(gè)門店的地址記下來(lái)。
SOA設(shè)計(jì)舉例
上文簡(jiǎn)單介紹了SOA設(shè)計(jì)時(shí)的七個(gè)指導(dǎo)原則,但在真正進(jìn)行某個(gè)子系統(tǒng)的SOA設(shè)計(jì)時(shí),其實(shí)會(huì)面臨更多的問(wèn)題。每一個(gè)系統(tǒng)工程師對(duì)方案的理解不一樣,都將導(dǎo)致設(shè)計(jì)出來(lái)的架構(gòu)不一致。
當(dāng)然這個(gè)沒(méi)有對(duì)錯(cuò)之分,畢竟通往珠峰的道路也不是只有一條。 下面以控制空調(diào)的開(kāi)和關(guān)為例,比較SOA兩種設(shè)計(jì)方案。
一、方案一
服務(wù)端(空調(diào)模塊)提供開(kāi)和關(guān)的接口,客戶端(娛樂(lè)主機(jī))調(diào)用這個(gè)服務(wù)接口來(lái)請(qǐng)求空調(diào)的開(kāi)和關(guān),服務(wù)端根據(jù)自身的控制邏輯執(zhí)行空調(diào)的開(kāi)和關(guān)。
服務(wù)接口描述:
HVAC ON/OFF_Req:客戶端可通過(guò)調(diào)用這個(gè)接口來(lái)打開(kāi)或者關(guān)閉空調(diào)。 HVAC ON/OFF_Resp:服務(wù)端根據(jù)自身的邏輯,收到請(qǐng)求后反饋給客戶端執(zhí)行結(jié)果,如果正常執(zhí)行就反饋“執(zhí)行成功”。如果不執(zhí)行,就反饋“執(zhí)行失敗”且會(huì)攜帶失敗的原因,比如“執(zhí)行失敗,整車未上高壓或者發(fā)動(dòng)機(jī)未啟動(dòng)”。
二、方案二
服務(wù)端(娛樂(lè)主機(jī))發(fā)布空調(diào)開(kāi)和關(guān)的請(qǐng)求事件,客戶端(空調(diào)模塊)訂閱這個(gè)事件接口,當(dāng)該接口為空調(diào)開(kāi)或者關(guān)請(qǐng)求時(shí),用戶根據(jù)自身的控制邏輯執(zhí)行空調(diào)的開(kāi)和關(guān)。
三、方案比較
從結(jié)果上分析,兩種方案對(duì)用戶的體驗(yàn)實(shí)際上是一樣的,都能實(shí)現(xiàn)對(duì)空調(diào)的開(kāi)和關(guān),但是細(xì)究下來(lái)還是有不少差異的。
方案一的優(yōu)勢(shì)是服務(wù)端提供統(tǒng)一的接口,客戶端可以根據(jù)自身的需求調(diào)用。服務(wù)端可以不關(guān)注客戶端是誰(shuí),只要根據(jù)自身的內(nèi)部邏輯進(jìn)行空調(diào)的狀態(tài)跳轉(zhuǎn)。
方案二其實(shí)細(xì)看就像上一代面向信號(hào)的架構(gòu),只是把之前的信號(hào)重新包裝成服務(wù)的形式在以太網(wǎng)上傳輸,相當(dāng)于脫褲子放屁?;究梢杂矛F(xiàn)有的軟件架構(gòu),把接口名字改改就可以上車,開(kāi)發(fā)的代價(jià)最小,但是沒(méi)有任何擴(kuò)展性可言。如果有其他的APP想控制空調(diào),那就需要重新發(fā)布一個(gè)接口,客戶端(空調(diào)模塊)需要重新訂閱該新的接口,從而實(shí)現(xiàn)另一種控制方式。
從短期來(lái)看,方案二是實(shí)現(xiàn)所謂的SOA代價(jià)最小的方案。但是作為要面向下一個(gè)十年甚至二十年的架構(gòu)設(shè)計(jì)來(lái)說(shuō),方案一才是主流的方案。雖說(shuō)在開(kāi)發(fā)過(guò)程中還會(huì)遇到其他問(wèn)題,但是總體的架構(gòu)思路和方向是對(duì)的。
SOA功能分配
上面介紹的是SOA某個(gè)服務(wù)的架構(gòu)設(shè)計(jì)方案,在進(jìn)行系統(tǒng)的詳細(xì)設(shè)計(jì)時(shí),比如說(shuō)具體到SOA的功能分配,就又面臨另一個(gè)問(wèn)題。 還是上文空調(diào)控制舉例,比如在進(jìn)行空調(diào)的控制時(shí),需要判斷車輛狀態(tài),當(dāng)整車處于高壓或者發(fā)動(dòng)機(jī)啟動(dòng)時(shí)才能開(kāi)啟空調(diào)。
方案一中如果把對(duì)車輛狀態(tài)的判斷放在客戶端,那么意味著每一個(gè)客戶在控制空調(diào)時(shí),都要先獲取車輛的狀態(tài),只有滿足車輛處于高壓或者發(fā)動(dòng)機(jī)啟動(dòng)時(shí),才能調(diào)用空調(diào)的控制接口。服務(wù)端收到空調(diào)的控制器指令,執(zhí)行相應(yīng)的動(dòng)作。
這么做的好處是服務(wù)端提供的接口內(nèi)部邏輯可以做的很簡(jiǎn)單,不會(huì)隨著前置條件的變化而變化,把控制的前置條件判斷上移到客戶端。壞處是對(duì)每個(gè)客戶端提出了更嚴(yán)苛的調(diào)用條件,如果該服務(wù)僅僅針對(duì)內(nèi)部軟件的團(tuán)隊(duì)進(jìn)行開(kāi)發(fā),那相對(duì)來(lái)說(shuō)是可控的,可以通過(guò)設(shè)計(jì)文檔審核以及測(cè)試進(jìn)行把控,不會(huì)出現(xiàn)客戶端在前置條件不滿足時(shí)就調(diào)用服務(wù)端的空調(diào)控制接口的情況。
然而如果這個(gè)接口開(kāi)源的,那顯然這樣的設(shè)計(jì)方案不合理,因?yàn)閷?duì)于開(kāi)源的接口,不可能要求每個(gè)開(kāi)發(fā)者嚴(yán)格按照規(guī)則去做,一旦有某位開(kāi)發(fā)者開(kāi)發(fā)的APP沒(méi)有判斷前置條件就直接調(diào)用空調(diào)的控制接口,那有極大的概率出現(xiàn)小電池被耗盡電的問(wèn)題,除非有智能補(bǔ)電功能。
方案一中如果把對(duì)車輛的狀態(tài)判斷放在服務(wù)端,對(duì)于客戶端來(lái)說(shuō),就可以很簡(jiǎn)單,只要想控制空調(diào),那就調(diào)用服務(wù)端的接口,至于能不能開(kāi)啟,服務(wù)端會(huì)根據(jù)車輛的狀態(tài)反饋給客戶端。
這僅僅是針對(duì)單一車型,對(duì)于不同的車型以及應(yīng)用場(chǎng)景,可能開(kāi)啟空調(diào)的前提條件不同,所以在進(jìn)行服務(wù)的接口定義時(shí),先定義和開(kāi)放適用于大部分應(yīng)用場(chǎng)景的接口,至于特殊的需求,經(jīng)過(guò)評(píng)估后再確認(rèn)是否需要定義新的接口。 這里要闡述一個(gè)觀點(diǎn),服務(wù)并不是一成不變,且不要想著一個(gè)服務(wù)接口就可以覆蓋用戶所有的使用場(chǎng)景。
寫在最后
SOA在互聯(lián)網(wǎng)行業(yè)的成熟經(jīng)驗(yàn)可參考,但也僅供參考,如果是拿來(lái)主義,那注定是不會(huì)成功。要想把這個(gè)概念用到汽車行業(yè),且用得好,無(wú)論是使得軟件復(fù)雜度減少,亦或者為將來(lái)的功能拓展帶來(lái)便利性,這些都需要進(jìn)行深刻的理論分析以及實(shí)踐應(yīng)用。
SOA的系統(tǒng)設(shè)計(jì)也是這幾年剛剛興起,每一家的架構(gòu)以及系統(tǒng)方案都不一樣,但從筆者的拙見(jiàn)來(lái)看,SOA目前的收益其實(shí)并沒(méi)有宣傳的那么大,投入產(chǎn)出比嚴(yán)重不平衡。
SOA的開(kāi)發(fā)不能一蹴而就,在各家不斷的開(kāi)發(fā)實(shí)踐中,不斷地優(yōu)化現(xiàn)有的架構(gòu)以及系統(tǒng)設(shè)計(jì)方案,直至誕生汽車行業(yè)大一統(tǒng)的指導(dǎo)思想及設(shè)計(jì)原則。
審核編輯:劉清
-
AUTOSAR
+關(guān)注
關(guān)注
10文章
379瀏覽量
22655 -
SOA
+關(guān)注
關(guān)注
1文章
301瀏覽量
28208 -
HVAC
+關(guān)注
關(guān)注
0文章
74瀏覽量
20211 -
ROS
+關(guān)注
關(guān)注
1文章
288瀏覽量
17739
原文標(biāo)題:SOA,落地路上二三事
文章出處:【微信號(hào):阿寶1990,微信公眾號(hào):阿寶1990】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
“碰一下”支付終端應(yīng)用在酒店:智能無(wú)卡入住與客房控制

OptiSystem應(yīng)用:寬帶SOA特性
OptiSystem應(yīng)用:SOA波長(zhǎng)變換器(XGM)
OptiSystem應(yīng)用:寬帶SOA特性
OptiSystem應(yīng)用:SOA波長(zhǎng)變換器(XGM)
OptiSystem應(yīng)用:寬帶SOA特性
OptiSystem應(yīng)用:SOA波長(zhǎng)變換器(XGM)
“碰一下”支付背后的4G技術(shù)
基于IMOS平臺(tái)的偏振不敏感SOA設(shè)計(jì)

SOA關(guān)鍵技術(shù)專利分析(一)

面向服務(wù)的整車EE架構(gòu)(SOA)設(shè)計(jì)開(kāi)發(fā)咨詢服務(wù)

TAS5766在SOA頁(yè)下測(cè)量“Measure System Gain” 時(shí),測(cè)試完之后軟件就會(huì)從連接狀態(tài)變?yōu)榉沁B接狀態(tài),怎么回事?
了解在高輸出電流和高溫下工作的 SOA 曲線

理解在高輸出電流和溫度下工作的SOA曲線

墻邊的英雄--關(guān)于插座的二三事

評(píng)論