一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

談?wù)凷OA 開發(fā)基礎(chǔ)

 Neal199 2022-05-10 發(fā)布于安徽省

圖片

從去年開始,SOA的概念在汽車軟件行業(yè)逐漸蔓延開來,很多公眾號都發(fā)過講汽車SOA的文章,很多車廠都要開始(或者已經(jīng)在)搞SOA。但我覺得吧,在開搞新技術(shù)之前,是不是先花點(diǎn)時(shí)間弄明白這個(gè)技術(shù)到底是什么,它解決的是什么樣的問題,然后再談架構(gòu),再談開發(fā),很多時(shí)候我們連問題是什么都沒整明白,就急著去做解決方案,最后的結(jié)果只能是一地雞毛。對個(gè)人來說,要搞SOA開發(fā),需要夯實(shí)哪些基礎(chǔ)知識,看了很多SOA文章,卻很少有人梳理這些,這段時(shí)間我陸續(xù)思考了一些,盡管可能不全面(更偏向SOC開發(fā)涉及的技術(shù)點(diǎn)),但仍然試圖寫出來,以期逐步構(gòu)建出自己的領(lǐng)域知識體系~

那么,先來理一理關(guān)于SOA:

軟件定義汽車,E/E架構(gòu)是關(guān)鍵

汽車電子電氣架構(gòu)(簡稱E/E架構(gòu))是指整車電子電氣系統(tǒng)的總布置方案。在智能網(wǎng)聯(lián)汽車產(chǎn)業(yè)大變革背景下,軟件定義汽車?yán)砟钜殉蔀楣沧R。傳統(tǒng)汽車采用的分布式E/E架構(gòu)因計(jì)算能力不足、通訊帶寬不足、不便于軟件升級等瓶頸,已經(jīng)不能滿足現(xiàn)階段汽車發(fā)展的需求,E/E架構(gòu)的變革已成為智能網(wǎng)聯(lián)汽車發(fā)展的關(guān)鍵,其升級主要體現(xiàn)在硬件架構(gòu)、軟件架構(gòu)、通信架構(gòu)三個(gè)方面:

硬件架構(gòu)升級:由分布式ECU向域控制/中央集中架構(gòu)方向發(fā)展,汽車E/E架構(gòu)的升級路徑表現(xiàn)為分布式(模塊化→集成化)、域集中(域控制集中→跨域融合)、中央集中式(車載電腦→車-云計(jì)算)。好處在于:提升算力利用率,減少算力設(shè)計(jì)總需求;數(shù)據(jù)統(tǒng)一交互,實(shí)現(xiàn)整車功能協(xié)同;縮短線束,降低故障率,減輕質(zhì)量。

圖片

軟件架構(gòu)升級:通過 AutoSAR 等軟件架構(gòu)提供標(biāo)準(zhǔn)的接口定義,模塊化設(shè)計(jì),促使軟硬件解耦分層,實(shí)現(xiàn)軟硬件設(shè)計(jì)分離;Classic AutoSAR架構(gòu)逐步向Classic AutoSAR+Adaptive AutoSAR混合式架構(gòu)發(fā)展。好處在于:可實(shí)現(xiàn)軟件/固件 OTA 升級、軟件架構(gòu)的軟實(shí)時(shí)、操作系統(tǒng)可移植;采集數(shù)據(jù)信息多功能應(yīng)用,有效減少硬件需求量,真正實(shí)現(xiàn)軟件定義汽車。

通信架構(gòu)升級:車載網(wǎng)絡(luò)骨干由 LIN/CAN 總線向以太網(wǎng)方向發(fā)展。好處在于:滿足高速傳輸、高通量、低延遲等性能需求,同時(shí)也可減少安裝、測試成本。

中央計(jì)算單元——E/E架構(gòu)的核心

中央計(jì)算單元是E/E架構(gòu)中最關(guān)鍵的部分,不管是按區(qū)域的架構(gòu),還是以后的純中央計(jì)算平臺,其硬件構(gòu)型從根本上決定了軟件架構(gòu)的設(shè)計(jì)方向。中央計(jì)算單元可以分為以下三種形態(tài):

圖片

SOC分離式:將多個(gè)不同的芯片集成到一個(gè)中央計(jì)算單元上去,每個(gè)運(yùn)行不同的操作系統(tǒng),只是在形態(tài)上集中到了一起,各單元依然獨(dú)立的完成各自任務(wù);

硬件隔離式:在統(tǒng)一的計(jì)算平臺上采用虛擬化方案,同時(shí)運(yùn)行多個(gè)操作系統(tǒng),但是各個(gè)系統(tǒng)依然在硬件上進(jìn)行隔離,每個(gè)系統(tǒng)都有自己的專屬硬件資源;

軟件虛擬式:在統(tǒng)一的計(jì)算平臺上采用虛擬化方案,同時(shí)運(yùn)行多個(gè)操作系統(tǒng),每個(gè)操作系統(tǒng)所使用的硬件資源,由Hypervisor層動(dòng)態(tài)調(diào)配,每個(gè)系統(tǒng)并沒有專屬的硬件資源。

硬件隔離式和軟件虛擬式,都采用了虛擬化方案,唯一不同點(diǎn)在于硬件資源是否專屬,如果是專屬的,就意味著資源無法動(dòng)態(tài)調(diào)配,容易產(chǎn)生資源浪費(fèi)。虛擬化方案最大的好處是,硬件上的可拓展性,如果中央計(jì)算單元采用刀片式的設(shè)計(jì)結(jié)構(gòu),可以很方便地拓展計(jì)算單元的算力,而不用替換整個(gè)計(jì)算單元。

在中央計(jì)算單元中,只需要兩個(gè)操作系統(tǒng)即可,用于自動(dòng)駕駛、車控、網(wǎng)關(guān)的RTOS,以及用于娛樂的普通OS(如Android、Linux)。用于娛樂的OS完全可以通過虛擬機(jī)的方式運(yùn)行,用于自動(dòng)駕駛、車控、網(wǎng)關(guān)的RTOS,可以直接運(yùn)行在Hypervisor層,既能兼顧實(shí)時(shí)計(jì)算的要求,也能獲得豐富的娛樂系統(tǒng)功能。

SOA:解決軟件定義汽車中服務(wù)間通信的分布式架構(gòu)

在軟件定義汽車中,應(yīng)用間跨進(jìn)程或跨核的通信,必然成為軟件架構(gòu)設(shè)計(jì)中一個(gè)需要去解決的問題。SOA在互聯(lián)網(wǎng)已經(jīng)應(yīng)用了很長時(shí)間,但在汽車行業(yè)中,算是比較新的概念。鑒于汽車的應(yīng)用場景和通信需求有其特殊性,很多互聯(lián)網(wǎng)的SOA技術(shù),并不能照搬過來。雖然Adaptive AutoSAR采用了SOA作為通信架構(gòu)(ARA::COM架構(gòu)如下圖),但是Adaptive AutoSAR的應(yīng)用可以說還沒有普及,應(yīng)該說整個(gè)行業(yè)就沒什么標(biāo)準(zhǔn)的SOA中間件解決方案,幾乎沒有專業(yè)做中間件研發(fā)的公司,可能在國內(nèi)這種慢工出細(xì)活的東西很難有什么成長的空間和土壤吧。所以,對于汽車SOA,還有很多值得我們?nèi)プ龅难芯亢蛧L試~

圖片
摘自《Introduction of ARA::COM as common communication middleware》April, 2018 by GENIVI

SOA,Service-Oriented Architecture(面向服務(wù)的架構(gòu)),是一種架構(gòu)思想,實(shí)施者可以根據(jù)實(shí)際情況設(shè)計(jì)SOA的技術(shù)實(shí)現(xiàn)。為什么要面向服務(wù)?以前用得好好的面向信號或者面向消息的通信架構(gòu)怎么就不香了?面向服務(wù)的通信架構(gòu),它的優(yōu)勢到底在哪里,如果不能很好地理解這點(diǎn),可能很難從過去面向信號的思維轉(zhuǎn)變過來,也就無法體會引入SOA的價(jià)值和意義。這有點(diǎn)悖論哈,不去用,無法感受其奧義,但又因?yàn)闆]用過,對它保有質(zhì)疑,過往的再擰巴,也是千錘百煉了,從零開始,談何容易。因此,我覺得短時(shí)間內(nèi)不太可能全面鋪開做整車SOA,可能會在安全等級不高的域比如智能座艙先嘗試SOA。

本質(zhì)上SOA就是服務(wù)的集合。下面聊聊我對“服務(wù)”的理解,以智能座艙域?yàn)槔?如下圖),可以把“服務(wù)”分為兩類:基礎(chǔ)服務(wù)和應(yīng)用服務(wù),基礎(chǔ)服務(wù)的功能可能包括:總線消息的解析和路由(如車身數(shù)據(jù)服務(wù))、直接與硬件相關(guān)的邏輯處理(如音頻服務(wù))、上層應(yīng)用有共同需求的一些基礎(chǔ)設(shè)施(如日志服務(wù));應(yīng)用服務(wù)的功能相對復(fù)雜些,可能需要由多個(gè)基礎(chǔ)服務(wù)提供數(shù)據(jù)支撐,也可能需要應(yīng)用服務(wù)之間相互協(xié)同,實(shí)現(xiàn)業(yè)務(wù)邏輯(如導(dǎo)航服務(wù))。

圖片
SOA分層架構(gòu)視圖(僅作舉例)

這只是一個(gè)很簡單的例子,想表達(dá)的是,每個(gè)服務(wù)將自己的功能,以接口的方式提
供,基于這些服務(wù)和接口,便可以設(shè)計(jì)出應(yīng)用場景,以滿足各種用戶需求,提升駕車體驗(yàn)??梢韵胂螅瑧?yīng)用場景的需求一定是豐富且變化的,面向信號的話,新增一個(gè)需求,可能要等上一年,但如果服務(wù)也能夠方便地進(jìn)行開發(fā)、擴(kuò)展和更新,是不是好多了,是不是挺有價(jià)值呢~

個(gè)人覺得,汽車SOA的設(shè)計(jì)難點(diǎn),主要在于以下幾點(diǎn):

1.服務(wù)的定義和劃分,要把業(yè)務(wù)需求分析透徹,從中提煉出服務(wù)的功能,數(shù)據(jù)流向理清,定義服務(wù)的邊界,把握服務(wù)的粒度,怎么做到“低耦合,高內(nèi)聚”,我以前很討厭研究需求,覺得那些不過就是些業(yè)務(wù),沒啥技術(shù)含量,后來才慢慢認(rèn)識到,這種想法很危險(xiǎn)啊,脫離需求的軟件設(shè)計(jì)不可能很好地滿足需求,如果不能很好地服務(wù)于產(chǎn)品功能,那么再牛逼的技術(shù)都沒有機(jī)會實(shí)現(xiàn)它應(yīng)有的價(jià)值,事實(shí)上,能夠把需求文檔轉(zhuǎn)化為可實(shí)施的軟件設(shè)計(jì),也是一種能力;

2.不同系統(tǒng)中,要實(shí)現(xiàn)中間件框架或者底層通信基礎(chǔ)設(shè)施,Adaptive AutoSAR有ARA::COM組件,Android有Framework,但不能跨域,QNX/Linux就不用說了。要實(shí)現(xiàn)一個(gè)中間件框架,本身并不是件容易的事,需要比較強(qiáng)的技術(shù)實(shí)力,一旦出了問題一般都是重大問題;

3.服務(wù)接口標(biāo)準(zhǔn)化,接口描述語言化(IDL),能夠通過工具自動(dòng)生成RPC樁的代碼(最好能夠關(guān)聯(lián)整車通信矩陣,e.g. ARXML->C++ API),能夠跨平臺,支持多語言,畢竟UI層可能不是C++寫的,時(shí)至今日,沒幾個(gè)應(yīng)用愿意去解析原始消息,遠(yuǎn)程調(diào)用接口不香嘛~;

4.如何兼容一些沒有與時(shí)俱進(jìn)的設(shè)備和模塊,如何兼容舊的傳輸通道,如何盡可能復(fù)用以前的業(yè)務(wù)邏輯,理論上任何兼容都是可以實(shí)現(xiàn)的,抽象一層不夠,那就再來一層,但兼容得越多,系統(tǒng)就越復(fù)雜,出問題的概率就越大,維護(hù)起來就越費(fèi)勁,這意味著成本的升高,質(zhì)量卻不見得變好;

5.評估性能影響,怎么保證安全性,……,如果是基于開源項(xiàng)目,可能還要做二次開發(fā),來滿足這些非功能性質(zhì)的需求~;

所以,汽車SOA真不是SOME/IP,也不是DDS,更不是Adaptive AutoSAR,這些都是汽車SOA技術(shù)棧中的一環(huán),并不是全部。

很多時(shí)候,純技術(shù)的部分并不是最難的,新的架構(gòu)方案要達(dá)成共識,要真正落地,需要博弈和取舍,需要天時(shí)地利人和。作為一名工程師,心態(tài)是極為重要的,要分清理想與現(xiàn)實(shí),技術(shù)與工作,所以在這里我只想談技術(shù),本來打算梳理一下做汽車SOA開發(fā)的基礎(chǔ)知識體系,以后公眾號的內(nèi)容大致也會圍繞著這個(gè)體系去寫,沒想到寫著寫著這么長了,于是分成上下篇了,下面先開個(gè)頭吧。

SOA是架構(gòu),做SOA的設(shè)計(jì)和開發(fā),其實(shí)也是做架構(gòu)的設(shè)計(jì)和開發(fā),在這里我想引用陳皓老師為《架構(gòu)整潔之道》作的推薦序里的一段話,我常想起這段話,挺有鞭策的功效,分享給每個(gè)不想成為PPT架構(gòu)師的工程師,以共勉:
問題:如果你要成為一名架構(gòu)師,你需要明確地區(qū)分幾組詞語,否則你不可能成為一名合格的工程師或架構(gòu)師。這幾組詞語是簡單vs.簡陋、平衡vs.妥協(xié)、迭代vs.半成品。如果你不能很清楚地定義出其中的區(qū)別,那么你將很難做出正確的決定,也就不可能成為一名優(yōu)秀的工程師或架構(gòu)師。
陳皓,《架構(gòu)整潔之道》推薦序一
之前很長一段時(shí)間,我經(jīng)常感到焦慮,一方面不想成為PPT黨,開會黨,另一方面,除了工作還要生(帶)活(娃),留給學(xué)習(xí)的時(shí)間并不多,而想學(xué)的知識又如同汪洋大海,今天想好好梳理一下某個(gè)技術(shù)點(diǎn),明天搜到某個(gè)開源項(xiàng)目蠻感興趣想寫個(gè)Demo跑跑看,年輕的時(shí)候覺得日子一天天刷刷地過去,也不是什么事兒,現(xiàn)在愈發(fā)有種緊迫感。在做了一些架構(gòu)方面的設(shè)計(jì)和開發(fā)工作以后,更是深刻體會到構(gòu)建個(gè)人的領(lǐng)域知識體系,尤其是一些基礎(chǔ)技術(shù),真的非常重要。

今年伊始,聽了李運(yùn)華老師關(guān)于“如何打好基礎(chǔ)”的講座,核心觀點(diǎn)是:“基礎(chǔ)≠底層,基礎(chǔ)≠源碼,基礎(chǔ)≠不變”,很是醍醐灌頂~結(jié)合個(gè)人實(shí)際情況,我覺得可以這么去構(gòu)建我的領(lǐng)域知識體系:首先,定義出哪些是與我工作相關(guān)的領(lǐng)域知識(比如現(xiàn)階段是SOA);其次,進(jìn)一步細(xì)化要學(xué)習(xí)的知識范圍,也就是下篇要梳理的SOA相關(guān)知識;最后,分別從廣度和深度(根據(jù)工作內(nèi)容去判別學(xué)習(xí)的深度),有針對性地學(xué)習(xí),并在實(shí)際工作和項(xiàng)目中把知識和技術(shù)串起來,從而系統(tǒng)性地提升技術(shù)能力。

就像前面說的,要分清理想與現(xiàn)實(shí),因?yàn)檫@個(gè)世界從來都不是我所能想象的,很多PPT黨開會黨,基礎(chǔ)不扎實(shí)甚至很水,設(shè)計(jì)出焦油坑一樣的架構(gòu),坑自己,坑別人,坑項(xiàng)目,也不耽誤他們升職加薪跳槽。但是“世界上只有一種英雄主義,那就是認(rèn)清生活的真相后依然熱愛它”。

SOA開發(fā)所需的知識領(lǐng)域

下面來梳理一下做SOA開發(fā)(智能座艙中SOA開發(fā))需要具備的領(lǐng)域知識體系。

今天要做的梳理,沒有思維導(dǎo)圖,沒有PDF,沒有表格,是結(jié)合了我的實(shí)際經(jīng)歷和體會,總結(jié)得出的一些基礎(chǔ)知識點(diǎn),這是現(xiàn)階段的這個(gè)我所了解的所認(rèn)為的,隨著時(shí)間的流逝,我又會經(jīng)歷更多一些,現(xiàn)在梳理的可能也會跟著改變一些。這種極其個(gè)性化的梳理,對我,是梳理(其實(shí),寫這篇比想象中艱辛,要不是前面給自己埋下了坑,都想放棄了~),對你,看看便好,就當(dāng)是聽我絮叨絮叨,侃侃大山,輕松愉快,真心不能提供什么參考。以下梳理分為四個(gè)維度:編程,架構(gòu),網(wǎng)絡(luò),工具

編程:多看,多寫,多折騰

目前,智能座艙的生態(tài)圈主要包括Android、Linux、QNX等操作系統(tǒng),因此,我認(rèn)為做SOA開發(fā),至少需要熟練掌握C++和Java兩種編程語言。C++是必須要會的,Linux/QNX主要用C++開發(fā),Android其實(shí)也涉及C++開發(fā),尤其是對性能要求較高的模塊,通常會下沉到Native或HAL實(shí)現(xiàn)。

Java也是必須要會的:第一,Android的App和Framework是用Java開發(fā)的,需要設(shè)計(jì)和開發(fā)SOA接口,提供給位于這兩層的應(yīng)用和服務(wù)使用;第二,設(shè)計(jì)SOA架構(gòu),要對系統(tǒng)各層級之間的接口如何設(shè)計(jì)和調(diào)用有足夠的了解,代碼都看不明白,怎么設(shè)計(jì)易用的接口;第三,寫Demo是架構(gòu)設(shè)計(jì)過程中重要的步驟,總不能你設(shè)計(jì)的方案等著別人寫Demo驗(yàn)證吧,更重要的是,通過寫Demo可以發(fā)現(xiàn)很多想法上的不足,設(shè)計(jì)文檔寫得不嚴(yán)謹(jǐn)?shù)牡胤健?/span>

對于C++編程,要掌握的一些基礎(chǔ)知識:

1.語法基礎(chǔ):構(gòu)造,繼承,虛函數(shù),內(nèi)聯(lián),多態(tài),類型轉(zhuǎn)換,STL容器,…;

2.C++11新特性:時(shí)至今日,應(yīng)該學(xué)會使用至少C++11常用的特性,比如:類型推導(dǎo)(auto,decltype),右值引用,智能指針,泛型/模板,type_taits,函數(shù)式編程(lambda),C++11多線程,future,promise,…,用它們使代碼更簡潔,改進(jìn)代碼質(zhì)量,提升程序性能,不是為了炫技,而是用到實(shí)處;

3.應(yīng)用開發(fā):Linux/QNX網(wǎng)絡(luò)編程、多線程編程、進(jìn)程間通信等編程手法,常用實(shí)現(xiàn)如無鎖,消息隊(duì)列、線程池等,常見開源庫的使用,選擇感興趣的如Libevent、Muduo等,深入學(xué)習(xí)其設(shè)計(jì)和實(shí)現(xiàn);

4.項(xiàng)目開發(fā):代碼結(jié)構(gòu),接口封裝方式,常用幾種設(shè)計(jì)模式的實(shí)現(xiàn)(如單例模式、觀察者模式等);

對于Java編程,要掌握的一些基礎(chǔ)知識:

1.語法基礎(chǔ):包,類,接口,反射,泛型,異常,集合,注解,常用類…;

2.并發(fā)編程:原子操作,Exexutor,線程池,阻塞隊(duì)列,synchronized,鎖,volatile,CompletableFuture…,常見模型如Thread-Per-Message,CopyOnWrite,生產(chǎn)者-消費(fèi)者…;

3.應(yīng)用開發(fā):Java中的網(wǎng)絡(luò)編程(JDK API),Android應(yīng)用開發(fā)基礎(chǔ)(四大組件,不研究UI,只要能整出個(gè)正常點(diǎn)兒的DemoApp就行~),Android進(jìn)程間通信機(jī)制,AIDL、JNI和HIDL接口的設(shè)計(jì)和開發(fā);

4.項(xiàng)目開發(fā):常用代碼結(jié)構(gòu),常用幾種設(shè)計(jì)模式的實(shí)現(xiàn)(如工廠模式、代理模式、門面模式、觀察者模式、策略模式等),注意,這里和前面C++說的都是實(shí)現(xiàn),期望達(dá)到的水平:做到真正的理解,談到某種設(shè)計(jì)模式,腦子里能夠想到其適用的應(yīng)用場景是什么,落實(shí)到代碼上,一個(gè)大致思路是怎樣的,反之亦然;在閱讀一些開源項(xiàng)目時(shí),能夠看出用了什么設(shè)計(jì)模式,這樣用的好處什么,不用可能會產(chǎn)生什么問題。

架構(gòu):保持好奇心,平常心

架構(gòu)和編程的不同之處在于,編程是容易看見結(jié)果和成效的,你寫的代碼有沒有Bug很快能被證明,你寫的模塊擴(kuò)展性和穩(wěn)定性怎么樣,經(jīng)過一些時(shí)日,也能看出個(gè)一二。架構(gòu)不是,有多少人能在短時(shí)間內(nèi)落地幾種架構(gòu)方案的,更不用說評價(jià)架構(gòu)設(shè)計(jì)得好不好了,就拿通信框架來說,很少聽?wèi)?yīng)用說滿意當(dāng)前的通信框架的,為什么擴(kuò)展個(gè)接口這么麻煩,為什么不支持同步調(diào)用,為什么沒有消息緩存,…,能被吐槽的點(diǎn)太多了。即使如此,我們還是要致力于做出好的架構(gòu),也許無法得到所有人的滿意,但設(shè)計(jì)和開發(fā)出好的SOA架構(gòu),可以讓系統(tǒng)中每一個(gè)應(yīng)用和模塊在交互通信與數(shù)據(jù)共享的問題上獲得不錯(cuò)收益,反之,糟糕的SOA架構(gòu)可能就是所有人必須面對的一場災(zāi)難。

在架構(gòu)設(shè)計(jì)這件事上,我也是剛開始有一點(diǎn)點(diǎn)經(jīng)歷,以下所想完全沒有參考價(jià)值。

1.設(shè)備:跳出單個(gè)模塊的視野范圍,嘗試去了解這個(gè)通信系統(tǒng)里的每一個(gè)設(shè)備(可以是車機(jī),儀表,T-Box,網(wǎng)關(guān)等等),他們的軟件系統(tǒng),他們的硬件,硬件之間的連接,他們的功能業(yè)務(wù),他們的開發(fā)模式,他們的數(shù)據(jù)需求,他們以往采用過的通信方案;

2.車載以太網(wǎng):了解相關(guān)知識,如:CAN,LIN,診斷,標(biāo)定,CP,AP,…,重點(diǎn)關(guān)注整車以太網(wǎng)與智能座艙的對接,或者說智能座艙未來如何接入中央計(jì)算單元。至于最近很火的AP,沒有計(jì)劃作深入研究,從編程角度來說,基礎(chǔ)是相通的,CP用的C,AP用的C++,很多東西并不是本身難度有多大,而是學(xué)習(xí)的資源和工具難以獲得,人為形成了所謂的技術(shù)壁壘,個(gè)人開發(fā)者想要學(xué)習(xí)研究,幾乎不可能搭建環(huán)境。我覺得開源是時(shí)代的進(jìn)步,一定會是大勢所趨,1202了,我們都要擁抱開源呀~;

3.系統(tǒng):Linux/QNX系統(tǒng)調(diào)用(如輸入/輸出,存儲,文件,網(wǎng)絡(luò),線程,進(jìn)程間),Android系統(tǒng)架構(gòu),座艙的整體架構(gòu),模塊的架構(gòu),比如,車機(jī)中Android原生模塊(如BT,WiFi,Audio,Location,…)的數(shù)據(jù)源有什么不同,車機(jī)中這些基礎(chǔ)模塊都是怎么適配的,車機(jī)中較復(fù)雜的APP如導(dǎo)航、語音等的架構(gòu)是什么樣的。不要覺得別人負(fù)責(zé)的模塊我了解了干嘛,說白了,SOA就是模塊與模塊之間的交互,對每個(gè)模塊了解一下一定是有益的;

4.中間件:基于幾種通信模型(可參考DDS 介紹)的中間件框架,RPC技術(shù)的原理和實(shí)現(xiàn),各種開源RPC框架:grpc,brpc,srpc,…,各種中間件架構(gòu)方案:GENIVI,ROS2,…,如何技術(shù)選型,如何驗(yàn)證可行性,如何做性能評估;

5.設(shè)計(jì)原則:SOLID,KISS,迪米特,…,結(jié)合具體業(yè)務(wù)的前提下追求原則,知易行難,沒有定式,如何做出正確的決策,需要在實(shí)踐中不斷思考和總結(jié);

6.溝通表達(dá):面向不同受眾的架構(gòu)視圖,SOA是需要傳播的,“咱們用TCP通信”和“咱們用SOMEIP通信”,對于不熟悉SOMEIP的小伙伴來說,是兩碼事。正確地傳達(dá)架構(gòu)的設(shè)計(jì),高效地溝通和解決過程中的沖突,清晰地表述技術(shù)實(shí)現(xiàn)的細(xì)節(jié),畫的UML要能指導(dǎo)開發(fā),盡可能說經(jīng)過驗(yàn)證的結(jié)論,即便是預(yù)估的,也要有一些數(shù)據(jù)作為依據(jù),不要說出諸如“應(yīng)該沒問題”這樣的結(jié)論;

7.項(xiàng)目+產(chǎn)品:做架構(gòu)設(shè)計(jì),可以是一個(gè)人的事,但架構(gòu)的落地,是需要一群人一起完成的,能否保質(zhì)保量完成不是項(xiàng)目經(jīng)理該去操心的事嗎?我覺得并不是,能否落地也是架構(gòu)設(shè)計(jì)中可以考慮的一個(gè)視角,適當(dāng)了解一些項(xiàng)目管理和產(chǎn)品思維的知識,會使你能更好地理解這個(gè)世界,理解一個(gè)項(xiàng)目的運(yùn)作,理解一個(gè)產(chǎn)品從無到有所要經(jīng)歷的過程,理解架構(gòu)不止是一個(gè)技術(shù)問題,這些都會幫助你設(shè)計(jì)一個(gè)好的架構(gòu)。

網(wǎng)絡(luò):實(shí)踐出真知,重視細(xì)節(jié)

如果說架構(gòu)是宏觀,那么網(wǎng)絡(luò)通信的設(shè)計(jì)和開發(fā),是件要扣細(xì)節(jié)的事兒。不要想當(dāng)然,不要把網(wǎng)絡(luò)狀況想得過于理想,不要把服務(wù)端想得過于強(qiáng)大,不要對任何錯(cuò)誤掉以輕心,試圖找到每個(gè)錯(cuò)誤背后的根源,解決的過程就是一次收獲。

1.網(wǎng)絡(luò)基礎(chǔ):OSI,TCP/IP,五層協(xié)議,各層作用和常見協(xié)議;

2.開發(fā)基礎(chǔ):TCP和UDP建立連接的流程,阻塞與非阻塞Socket API,同步與異步,IO多路復(fù)用,epoll的水平觸發(fā)與邊緣觸發(fā);

3.通信協(xié)議:SOME/IP,DDS,HTTP/RESTful,SSL/TLS,MQTT,對于SOME/IP和DDS,準(zhǔn)備死磕:協(xié)議標(biāo)準(zhǔn),開源項(xiàng)目的應(yīng)用,源碼剖析,二次開發(fā),封裝接口;多媒體傳輸:AVB,RTP/RTCP/RTSP/RTMP;

4.序列化:JSON,Protobuf,F(xiàn)ranca IDL,MsgPack,…,各自優(yōu)缺點(diǎn)、性能效率、適用場景、開源庫選型;

5.細(xì)節(jié):私有通信協(xié)議如何設(shè)計(jì),如何解決粘包和分片;心跳機(jī)制如何設(shè)計(jì);收發(fā)緩沖區(qū)如何設(shè)計(jì);如何優(yōu)雅地關(guān)閉連接;斷線重連機(jī)制如何設(shè)計(jì);流量控制如何設(shè)計(jì);…;

6.實(shí)踐:分析當(dāng)前網(wǎng)絡(luò)連接狀態(tài);定位通信鏈路中出錯(cuò)位置,分析其出錯(cuò)原因;抓包,分析數(shù)據(jù)包;如何設(shè)計(jì)Benchmark,測試和分析通信架構(gòu)的各項(xiàng)指標(biāo)如傳輸時(shí)延、CPU占用、內(nèi)存消耗、負(fù)載壓力等;

工具:發(fā)現(xiàn),嘗試,積累

寫工具,會讓人覺得很Low吧,實(shí)際上,很多人低估了學(xué)會使用工具的重要性。為什么別人花一小時(shí)搭建實(shí)驗(yàn)環(huán)境,而你要一天?為什么別人花半小時(shí)定位問題改好代碼,而你要一周?為什么別人花半天完成了某個(gè)第三方庫的平臺移植,而你要花幾天,甚至搞不定?…?其實(shí)不是別人有多厲害,而是你不善于運(yùn)用各種工具去解決問題,也沒有注重積累,舉個(gè)栗子:一次重裝Ubuntu系統(tǒng)時(shí)遇到某個(gè)問題,查了好幾篇CSDN文章,總算給搞定了,可什么都沒記下,下次再重裝時(shí),又遇到同樣的問題,這個(gè)問題我好像碰到過!然后,就沒有然后了,如果那篇之前幫到你的文章還找不到了,…,總在這樣又那樣的事情上,浪費(fèi)了太多的精力和時(shí)間,這些時(shí)間原本可以用來做更多有價(jià)值的事情啊~

1.開發(fā):VSCode,IDEA,Android Studio;
2.構(gòu)建:Shell,CMake,Gradle,Maven;
3.調(diào)試(測試):GDB,UT框架,靜態(tài)代碼檢測,內(nèi)存泄漏檢測,tcpdump,Wireshark,MQTT X,JMeter,Docker;
4.文檔:Markdown,PPT,Excel,筆記,Visio,EA,draw.io,錄屏,…,;
5.自動(dòng)化:一直覺得SOA開發(fā)工具是值得研究的,比如API文檔自動(dòng)生成工具、API代碼自動(dòng)生成工具、回環(huán)測試工具等(在互聯(lián)網(wǎng)領(lǐng)域已經(jīng)有一些類似的工具,看過幾個(gè)開源的,比如ShowDoc,感覺都不太能用到汽車領(lǐng)域,有好用的歡迎推薦啊~);

終于,寫完了,好多沒有寫進(jìn)來,比如算法與數(shù)據(jù)結(jié)構(gòu)、JVM、Linux內(nèi)核、數(shù)據(jù)庫等,當(dāng)然不是說它們不重要。但對現(xiàn)階段的我來說,上面列的這些已經(jīng)很夠我學(xué)的了,能把這些搞透徹,我已經(jīng)非常非常滿足了。術(shù)業(yè)有專攻,先把能做好的事做到最好,不是每個(gè)人都能成為技術(shù)大牛,也不是每個(gè)人的目標(biāo)都是要成為技術(shù)大牛吧,人生的路長著呢,以后的事以后再想好了。有句話不是很扎心么,“以大部分人的努力程度,根本還輪不上拼天賦”,有時(shí)候只是態(tài)度就足夠拉開差距了。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日韩中文字幕有码午夜美女| 精品国产91亚洲一区二区三区| 亚洲淫片一区二区三区| 隔壁的日本人妻中文字幕版 | 男女一进一出午夜视频| 欧美午夜伦理在线观看| 国产av一区二区三区麻豆| 国产一区二区熟女精品免费| 国产一区二区三区色噜噜| 欧美野外在线刺激在线观看| 日本中文字幕在线精品| 国内真实露脸偷拍视频| 久久99午夜福利视频| 日本人妻免费一区二区三区| 午夜精品成年人免费视频| 91一区国产中文字幕| 亚洲国产成人一区二区在线观看| 欧美日韩乱码一区二区三区| 亚洲乱妇熟女爽的高潮片| 大香蕉伊人精品在线观看| 无套内射美女视频免费在线观看| 欧美午夜色视频国产精品| 亚洲精品国产精品日韩| 中文字幕亚洲精品在线播放| 久久精品蜜桃一区二区av| 欧美成人一区二区三区在线| 成人免费视频免费观看| 国产精品亚洲一级av第二区| 国产成人精品视频一二区| 日韩成人动作片在线观看| 欧美午夜性刺激在线观看| 国产精品午夜小视频观看| 国产欧美日韩在线精品一二区| 日本和亚洲的香蕉视频| 日韩欧美一区二区亚洲| 午夜福利在线观看免费| 亚洲欧美日韩在线中文字幕| 不卡一区二区在线视频| 久久精品视频就在久久| 欧美加勒比一区二区三区| 少妇激情在线免费观看|