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