SOA(Service-oriented architecture)是面向服務(wù)的架構(gòu),是IT行業(yè)在2000年左右的時(shí)候提出來的一個(gè)概念,其本質(zhì)是一種架構(gòu)的風(fēng)格。而不是具體的技術(shù),更不是具體的標(biāo)準(zhǔn)。
目前,在IT行業(yè),SOA儼然已經(jīng)成為了過時(shí)的東西,很少有人再去言必稱SOA了,取而代之的是微服務(wù)、中臺(tái)、去中臺(tái)化,乃至云原生等一系列新的概念。究其原因,IT行業(yè)的業(yè)務(wù)在不斷更新,技術(shù)也在不斷升級(jí),原有的架構(gòu)概念已經(jīng)不再適合當(dāng)前的行業(yè)現(xiàn)狀了。
任何架構(gòu)都只能解決某一時(shí)刻的某一個(gè)企業(yè)的某一類問題,沒有絕對(duì)的仙丹妙藥。企圖畢其功于一役的想法是幼稚的。因此,軟件開發(fā)業(yè)內(nèi)才有這樣一句名言“軟件開發(fā)沒有銀彈”(看過吸血鬼系列電影的朋友一定懂得銀彈的含義)。
讓我們回到汽車行業(yè),當(dāng)前中國(guó)汽車界在風(fēng)風(fēng)火火的進(jìn)行著SOA“革命”,甚至成立了幾個(gè)專門的行業(yè)組織來試圖規(guī)范大家的SOA架構(gòu)及其中的各種細(xì)節(jié)定義?;叵氘?dāng)初AUTOSAR組織成立的時(shí)候,幾個(gè)大的OEM和Tier 1在已有的基礎(chǔ)上共同的定義了AUTOSAR的標(biāo)準(zhǔn)。而現(xiàn)在卻有人在根本沒有任何實(shí)踐基礎(chǔ)支撐的情況下就定義一個(gè)如此宏大的標(biāo)準(zhǔn),有點(diǎn)令人匪夷所思。
正如我在《智能汽車:電子電氣架構(gòu)詳解》一書中所說的:“所有的流程都是最佳實(shí)踐的總結(jié)”。技術(shù)標(biāo)準(zhǔn)更是如此,如果沒有最佳實(shí)踐,怎么能夠有總結(jié)呢?在PPT上總結(jié)的、未經(jīng)實(shí)踐考驗(yàn)的東西,怎么可能知道是不是最佳的呢?也許某些人真的有未卜先知的能力,但我始終相信“實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)”。而且我也擔(dān)心中國(guó)汽車行業(yè)這幾年通過電動(dòng)化“彎道超車”好不容易獲得的一點(diǎn)點(diǎn)優(yōu)勢(shì)被人整體帶偏了。
IT行業(yè)的核心是數(shù)據(jù)和流程
因?yàn)镾OA起源于IT行業(yè),那么我們就先看看SOA在IT行業(yè)是如何被提出和發(fā)展的。
各位看官應(yīng)該大都有以下這樣的經(jīng)歷:
在你所經(jīng)歷的某些企業(yè)中有著眾多的IT系統(tǒng):比如,績(jī)效管理系統(tǒng)、考勤系統(tǒng)、工資系統(tǒng)、報(bào)銷系統(tǒng)等……這些系統(tǒng)最初大都是孤立的,辦理不同的業(yè)務(wù)需要登錄不同的系統(tǒng),它們之間互不相連,賬號(hào)也互不相通;以至于每天可能要打開N個(gè)系統(tǒng)才能正常工作。怎么解決這些系統(tǒng)壁壘呢?由于以上這些系統(tǒng)的底層數(shù)據(jù)都和員工信息之間相關(guān)的,因此,可以以員工信息為基礎(chǔ),在上述的業(yè)務(wù)之間進(jìn)行打通,應(yīng)用端形成統(tǒng)一的用戶界面;在此界面背后,以往孤立的各個(gè)系統(tǒng)作為服務(wù)提供方仍然可以被持續(xù)使用——為了打通各個(gè)系統(tǒng),就需要在應(yīng)用端與服務(wù)提供端之間建立一條統(tǒng)一的服務(wù)總線,這條總線被稱為ESB(Enterprise Service Bus,企業(yè)服務(wù)總線)。
有了ESB之后,就可以在這個(gè)框架下不斷地拓展服務(wù)和應(yīng)用,而且可以近似隨意的在這個(gè)架構(gòu)之上進(jìn)行業(yè)務(wù)流程編排。原來的各個(gè)業(yè)務(wù)實(shí)體轉(zhuǎn)變?yōu)榉?wù),每個(gè)服務(wù)都是一個(gè)相對(duì)獨(dú)立的實(shí)體,可以提供對(duì)某些數(shù)據(jù)所對(duì)應(yīng)的業(yè)務(wù)活動(dòng)的處理。這就是SOA。
(單個(gè)服務(wù)的內(nèi)部結(jié)構(gòu))
然而,隨著SOA解決方案復(fù)雜性的增加,潛在服務(wù)組合配置的復(fù)雜性也隨之增長(zhǎng)。提出SOA的目的是為了將應(yīng)用與服務(wù)進(jìn)行解耦,解耦的本質(zhì)是為了去中心化。但是做好一個(gè)SOA解決方案的前提就是要將各個(gè)可能涉及的應(yīng)用進(jìn)行集中規(guī)劃與考量,通過BPEL(Business Process Execution Language)來組裝,同步對(duì)各個(gè)服務(wù)進(jìn)行集中管理——這樣的環(huán)節(jié)又會(huì)催生一隊(duì)專職流程編排的Team來掌握所有業(yè)務(wù)行為,這群人需要具備架構(gòu)設(shè)計(jì)、流程分析、系統(tǒng)分析的能力,因?yàn)樗袠I(yè)務(wù)變化都跟他們有關(guān)系,所以他們就很容易變成最大的組織瓶頸。
于是IT行業(yè)在十幾年前便開始了新的探索與實(shí)踐,提出了微服務(wù)(去中心化的SOA)和中臺(tái)等一系列概念。
?SOA的基本原則?
根據(jù)《SOA架構(gòu):服務(wù)和微服務(wù)分析及設(shè)計(jì)》一書的定義,SOA的設(shè)計(jì)應(yīng)該遵守如下的基本原則:
標(biāo)準(zhǔn)化服務(wù)契約
-
- ——同一服務(wù)目錄中的服務(wù)符合相同的契約設(shè)計(jì)標(biāo)準(zhǔn)。
服務(wù)松耦合
-
- ——服務(wù)契約降低消費(fèi)者禍合需求,并且它們自身與它所在的周圍環(huán)境解耦。
服務(wù)抽象
-
- ——服務(wù)契約只包含基本信息,以及那些僅限于服務(wù)契約中發(fā)布的信息。
服務(wù)可重用性
-
- ——服務(wù)包含并顯示不可知的邏輯,可以定位為可重用的企業(yè)資源每當(dāng)構(gòu)建一個(gè)服務(wù)時(shí),我們會(huì)尋找方法使其潛在能力得到最佳發(fā)揮而非僅僅針對(duì)一個(gè)目的。面向服務(wù)極大地強(qiáng)調(diào)了重用,因此它成為設(shè)計(jì)過程的核心部分,并且也是關(guān)鍵服務(wù)模型的基礎(chǔ)。
服務(wù)自治
-
- ——服務(wù)對(duì)其內(nèi)部的運(yùn)行時(shí)執(zhí)行環(huán)境進(jìn)行高度的把控。
服務(wù)無狀態(tài)
-
- ——服務(wù)通過必要時(shí)推遲狀態(tài)信息的管理來最小化資源消耗。過度的狀態(tài)信息管理可能會(huì)損害服務(wù)的可用性以及其行為的可預(yù)測(cè)性。
服務(wù)可發(fā)現(xiàn)性
-
- ——服務(wù)補(bǔ)充了交互元數(shù)據(jù),通過它們可以有效地發(fā)現(xiàn)和詮釋服務(wù)。
服務(wù)可組合性
- ——服務(wù)是有效的組合參與者,無須考慮組合物的大小和復(fù)雜性。
以上的基本原則,在IT行業(yè)都是基本適用的。因?yàn)橐粋€(gè)企業(yè)內(nèi)部的各個(gè)IT系統(tǒng)之間雖然有一定的關(guān)聯(lián)性,但是基本上都可以獨(dú)立運(yùn)行,新增的服務(wù)也可以隨時(shí)上線。因?yàn)楦鱾€(gè)服務(wù)之間的依賴性相對(duì)比較低。比如某寶上的商品貨架管理服務(wù)與公益服務(wù)之間的關(guān)聯(lián)性就很低。因?yàn)樗麄兠嫦虿煌臄?shù)據(jù)源,而且業(yè)務(wù)相關(guān)性也不大。
?汽車與IT的異同點(diǎn)?
近年來SOA的理念被引入了汽車行業(yè),眾多的參與者趨之若鶩。但如果從行業(yè)的特點(diǎn)來看,IT行業(yè)與汽車行業(yè)有著眾多的本質(zhì)差異:
1. 業(yè)務(wù)的控制對(duì)象不同。IT行業(yè)主要是面向數(shù)據(jù)(Data Oriented)。但汽車行業(yè)面向的卻是硬件(Device Oriented)。
IT所處理的業(yè)務(wù)絕大多數(shù)是基于數(shù)據(jù)或數(shù)據(jù)庫的,單一的數(shù)據(jù)記錄可能是有狀態(tài)的,但不同的數(shù)據(jù)條目卻可以完全獨(dú)立,從而形成一種無狀態(tài)的情況。而且數(shù)據(jù)的訪問是可以并發(fā)的。同時(shí),IT的服務(wù)建立在一個(gè)基于互聯(lián)網(wǎng)的開放生態(tài)系統(tǒng)之上的。其所使用的硬件主要是服務(wù)器和網(wǎng)絡(luò),具有標(biāo)準(zhǔn)化的特點(diǎn),也就是可以隨時(shí)進(jìn)行擴(kuò)展和遷移。
汽車行業(yè)上中軟件控制的對(duì)象是各種非標(biāo)準(zhǔn)化的I/O設(shè)備,比如各種電機(jī)、電磁閥、傳感器、按鍵等等。這些硬件是有狀態(tài)的,而且是非標(biāo)的,更加無法實(shí)現(xiàn)并發(fā)的訪問與控制,天然的就無法滿足服務(wù)無狀態(tài)的要求。數(shù)據(jù)可以并發(fā),硬件的狀態(tài)卻不可以并發(fā),在某一個(gè)確定的時(shí)間只能有唯一的一個(gè)狀態(tài)。同時(shí),汽車生產(chǎn)之后再想加裝硬件就基本沒有辦法了,即使可以增加內(nèi)存和算力,但傳感器和執(zhí)行器卻沒有辦法再增加了。(如果你非要說增加一個(gè)手機(jī)支架也算數(shù)的話,咱們就不需要再聊了)
2. 業(yè)務(wù)量變化速度不同。IT行業(yè)的業(yè)務(wù)量變化可能非常大:比如雙11的時(shí)候比平時(shí)的業(yè)務(wù)量可能要高一個(gè)數(shù)量級(jí)。對(duì)于汽車而言,每臺(tái)車上的業(yè)務(wù)量在設(shè)計(jì)之時(shí)便可以進(jìn)行精確的估計(jì),對(duì)拓展性的要求并不高。因?yàn)闃I(yè)務(wù)能力已經(jīng)由其所匹配的硬件及其相應(yīng)的功能限制了。目前看到對(duì)功能擴(kuò)展要求比較高的只有多媒體主機(jī)。即使是智能駕駛的功能,也不是隨意可以擴(kuò)展的,更多的是對(duì)性能提升的要求,改變的是軟件算法本身的能力。
3. 成本敏感度不同。IT行業(yè)軟硬件都是被完全復(fù)用的、是集中化部署的,對(duì)于那些大企業(yè)而言部署幾臺(tái)服務(wù)器不重要,客戶的滿意度才是最重要的,客戶使用服務(wù)的時(shí)候也不會(huì)關(guān)心后面的服務(wù)器硬件成本是多少。而汽車是單臺(tái)售賣的,對(duì)于其中每個(gè)部件都是要計(jì)算成本的,客戶買車的時(shí)候不可能不去關(guān)心成本。無論你部署一個(gè)控制器和兩個(gè)控制器,只要功能不增加,就沒人愿意為多出來的成本買單。
PS:采用SOA就必然要使用以太網(wǎng)等,大幅度增加了軟硬件的成本。而且由于服務(wù)要耗費(fèi)更多的算力資源,也必然要求SOC或MCU的性能更高,從而讓成本進(jìn)一步增加。
4. 實(shí)時(shí)性要求不同。大多數(shù)IT業(yè)務(wù)對(duì)實(shí)時(shí)性都沒有什么要求,瀏覽網(wǎng)頁或下單的時(shí)候等待一秒還是5秒的差異并不那么明顯。但汽車上的大部分控制功能卻是以毫秒來計(jì)算的,一個(gè)信息晚了半秒都可能會(huì)帶來安全問題。
PS:在實(shí)時(shí)性方面,可能某些人要說以太網(wǎng)的速度遠(yuǎn)比CAN總線快,應(yīng)該有更好地實(shí)時(shí)性。實(shí)際上,由于以太網(wǎng)本身的機(jī)制和需要多層復(fù)雜的軟件處理,導(dǎo)致處理以太網(wǎng)的消息在很多時(shí)候比CAN總線等要慢的多,而且時(shí)間上也有一定的不確定性。
5. 業(yè)務(wù)重用度與功能迭代速度不同。IT行業(yè)的各個(gè)業(yè)務(wù)模塊是隨時(shí)可能被重用的,這一點(diǎn)只要看看微信等APP在不停增加的新功能就知道了。而在汽車上,尤其對(duì)于傳統(tǒng)的車身控制、底盤和動(dòng)力等板塊,想創(chuàng)造出一個(gè)新功能難上加難,更加離不開新硬件的加入。大家可以看看眾多來自IT行業(yè)的新勢(shì)力在過去的這么多年里面究竟搞出了多少有價(jià)值的創(chuàng)新功能就清楚了。而且,這些新功能沒有一個(gè)是只有通過SOA才能實(shí)現(xiàn)的。在這些領(lǐng)域搞那么多SOA就如同把一個(gè)人扔到一座荒島之上,然后給他一百萬美元,并且對(duì)他說:你隨便花吧!
PS:功能迭代速度與業(yè)務(wù)量的差異也造成了IT行業(yè)的通信與汽車內(nèi)網(wǎng)絡(luò)通信的確定性不同。IT行業(yè)的網(wǎng)絡(luò)通信是非確定性通信的:內(nèi)容與數(shù)量隨時(shí)都可能發(fā)生變化,在設(shè)計(jì)之初難以預(yù)測(cè)。而汽車上的通信都是設(shè)計(jì)好的,不會(huì)有那么多的非預(yù)期的業(yè)務(wù)發(fā)生,帶寬也是可以準(zhǔn)確估算的。
?總結(jié)?
從以上的分析中可以看出:
- 汽車行業(yè)與IT行業(yè)有著諸多本質(zhì)的不同點(diǎn),如果非要生搬硬套IT行業(yè)的東西,不免有削足適履之嫌,必然會(huì)引起諸多的問題。SOA在IT行業(yè)已經(jīng)不是最新的東西了。如果想從IT行業(yè)借鑒一些經(jīng)驗(yàn),也許可以從微服務(wù)或者中臺(tái)等技術(shù)入手,這兩種技術(shù)也許更加適合汽車上的分布式、非標(biāo)準(zhǔn)、迭代速度慢的硬件系統(tǒng),對(duì)于未來的集中式計(jì)算架構(gòu)也許更加適合。消費(fèi)者絕對(duì)不會(huì)因?yàn)槟闶荢OA架構(gòu)就會(huì)更加青睞某個(gè)車,更加不會(huì)多掏錢。汽車行業(yè)內(nèi)的自嗨和和自我感動(dòng)與崇拜如果不能轉(zhuǎn)換為商業(yè)上的成功,就必然淪為一場(chǎng)鬧劇。?在沒有確定的把握時(shí)就把身家性命都?jí)涸谀硞€(gè)尚未被證實(shí)的概念上,無疑是在賭博。萬一這個(gè)概念只是對(duì)手的煙幕彈怎么辦?將全車的幾十個(gè)控制器全部重構(gòu)的代價(jià)與投入是絕大多數(shù)OEM都承擔(dān)不起的,如果你不是家里有礦,還是謹(jǐn)慎一些為好。對(duì)于新技術(shù),既不要盲目追逐,也不要完全排斥,適度投入跟隨也許最合適。萬一SOA變成了第二個(gè)元宇宙就不好玩了。踏踏實(shí)實(shí)的把車做好比什么都強(qiáng),每天都想著換道超車的結(jié)果往往是掉進(jìn)溝里。既然SOA最初的發(fā)展是面向數(shù)據(jù)的,那么就應(yīng)該仔細(xì)想想汽車上的哪些功能數(shù)據(jù)強(qiáng)相關(guān)的,先嘗試把這些東西SOA化,可能更加靠譜一些。
侯旭光,?智能汽車領(lǐng)域資深技術(shù)專家,在汽車電子電氣相關(guān)領(lǐng)域從業(yè)超過20年,現(xiàn)就職于廣汽集團(tuán)汽車工程研究院,電子電氣架構(gòu)總師;曾就職于西門子和吉利汽車,在吉利汽車從事整車電子電氣架構(gòu)開發(fā)和車身電子產(chǎn)品的開發(fā)與管理工作;中國(guó)汽車工程學(xué)會(huì)智能網(wǎng)聯(lián)汽車系統(tǒng)架構(gòu)分會(huì)委員。
侯哥工作感悟:侯哥?@Roy 專注汽車電子電氣架構(gòu)開發(fā)
刪改編:娜可不敢