400-821-6015
行(xíng)業(yè)資訊
您當前的(de)位置:首頁 » 行(xíng)業(yè)資訊 » 行(xíng)業✘'(yè)資訊
內(nèi)部資訊行(xíng)業(yè)資訊

SOA設計(jì)難點及開(kāi)發梳理(lǐ)(二)

發布日(rì)期:2021-05-21


從(cóng)去(qù)年(nián)開(kāi)始(可(kě)能(®←néng)更早),SOA的(de)概念在汽車(chē)軟件(j♠←•¥iàn)行(xíng)業(yè)逐漸蔓延開(kāi)來(lái),很(hěn)多(duō↓'δ$)公衆号都(dōu)發過講汽車(chē)SOA的(de)文(wén)章(zhāng),很(hα δ∞ěn)多(duō)車(chē)廠(chǎng)都‍≤&(dōu)要(yào)開(kāi)始(或者已經在)搞SOA。但(dàn)我覺得π←(de)吧(ba),在開(kāi)搞新技(jì)術(shù)之前,是(shì)不↓"¶(bù)是(shì)先花(huā)點時(÷®<shí)間(jiān)弄明(míng)白(bái)這(zhΩ§★è)個(gè)技(jì)術(shù)到(dào)底是(shì)什™δ(shén)麽,它解決的(de)是(shì)什(shén∑γ♥)麽樣的(de)問(wèn)題,然後再談架構,再談開(kāi)發,很(hěn)多(duō)時(shδ$í)候我們連問(wèn)題是(shì)什(shén)麽都(dōu)沒整明(míng)白(b‍≈₹γái),就(jiù)急著(zhe)去(qù)做♦&←(zuò)解決方案,最後的(de)結果隻能(néng)是≈∏(shì)一(yī)地(dì)雞毛。對(duì)個(★$ gè)人(rén)來(lái)說(shuō),要(yào)搞S♥≤OA開(kāi)發,需要(yào)夯實哪些(xiē)基礎知♠™γ(zhī)識,看(kàn)了(le)很(hěn)多(duō)SOA文(wén)章™​(zhāng),卻很(hěn)少(shǎo)有(yǒu)人(¥γπrén)梳理(lǐ)這(zhè)些(xiē),這(zh&÷è)段時(shí)間(jiān)我陸續思考了(le)一(yī)些≥÷(xiē),盡管可(kě)能(néng)不♥≥(bù)全面(更偏向SOC開(kāi)發涉及的(de)技(jì)術(sβ∞hù)點),但(dàn)仍然試圖寫出來(lái),以期逐步構建出自(zì)己的(de)領域知(zλε•✔hī)識體(tǐ)系。

 ① 

SOA設計(jì)難點


個(gè)人(rén)覺得(de),汽車(chē)SOA÷<✔✘的(de)設計(jì)難點,主要(yào)在于以下(x↓↓ ià)幾點:

服務的(de)定義和(hé)劃分(fēn),要(yào)把業(yè)務需求分(fēn)析透♠♥Ω×徹,從(cóng)中提煉出服務的(de)功能(néng),數(shù)據流向理(lǐ) ¶清,定義服務的(de)邊界,把握服務的(β₩Ωde)粒度,怎麽做(zuò)到(dào)“低(dī)耦合,高(gāo)內(→₩$<nèi)聚”,我以前很(hěn)討(tǎo)厭(yàn)研究需求,覺得(de)那(nà®')些(xiē)不(bù)過就(jiù)是(shì)些(xiē)業(​γyè)務,沒啥技(jì)術(shù)含量,₽≤£>後來(lái)才慢(màn)慢(màn)認λ$₽&識到(dào),這(zhè)種想法很(hěn)危險啊,脫離(lí)需求的(de)軟件(j¶✘"iàn)設計(jì)不(bù)可(kě)能(néng)很(<↔≤hěn)好(hǎo)地(dì)滿足需求,✘•如(rú)果不(bù)能(néng)很(hěnφ★±)好(hǎo)地(dì)服務于産品功能(néng),那±¶‍(nà)麽再牛逼的(de)技(jì)術(shù)都(dōu)沒有(yǒu)機¥¥σγ(jī)會(huì)實現(xiàn)它應有(yǒu♥‌)的(de)價值,事(shì)實上(shàng),♠ 能(néng)夠把需求文(wén)檔轉化α (huà)為(wèi)可(kě)實施的(deφ§→)軟件(jiàn)設計(jì),也(yě)是(sh×♦✔✘ì)一(yī)種能(néng)力;

不(bù)同系統中,要(yào)實現(xiàn)中間(jiān)件€✔‍(jiàn)框架或者底層通(tōng)信基礎設施,™ ♠€Adaptive AutoSAR有(yǒu)ARA::COM組件(jiàn),An←♥droid有(yǒu)Framework,但(dàn)不(bù)能(néng)跨域,QNX↑★‌/Linux就(jiù)不(bù)用(yòng)說(shuō)了(le)£→。要(yào)實現(xiàn)一(yī)個(gè)中間(jiān)​¶±件(jiàn)框架,本身(shēn)并不(bù)是(shì)件$₩ππ(jiàn)容易的(de)事(shì),需要(yào)比較強的(de)技(jì)術(s'☆σ¶hù)實力,一(yī)旦出了(le)問(wèn)題一(yī)般都(dōu)™ 是(shì)重大(dà)問(wèn)題;

服務接口标準化(huà),接口描述語言化(huà)(IDL),能(néng)夠通(tōn ©g)過工(gōng)具自(zì)動生(shēng)成RPC樁的(de)代碼(最好(hǎ♥∏←o)能(néng)夠關聯整車(chē)通(tōng)α±信矩陣,e.g. ARXML->C++ API),能(néng)夠跨平台,支持多(λαφ duō)語言,畢竟UI層可(kě)能(n≠λéng)不(bù)是(shì)C++寫的(de),∏⩧時(shí)至今日(rì),沒幾個(gè)應用(yòng)願意去(qù)解析原始消息,遠(yuǎn ₽)程調用(yòng)接口不(bù)香嘛~;

如(rú)何兼容一(yī)些(xiē)沒有(yǒu)與時(shí)俱進的(♣€de)設備和(hé)模塊,如(rú)何兼容舊(jiù)的(de)傳輸通(t€π ōng)道(dào),如(rú)何盡可(kě)能(néng)複用(yòng​↓®★)以前的(de)業(yè)務邏輯,理(lǐ)論上(shàng ☆ λ)任何兼容都(dōu)是(shì)可(kě)以實現(xiàn)& 的(de),抽象一(yī)層不(bù)夠,那(nà✔×↑)就(jiù)再來(lái)一(yī)層,但(dàn)兼容得(de)越多(duō),系統就(ji‍© ↔ù)越複雜(zá),出問(wèn)題的(de)概率就(jiù)越大(dà),維護起來(l φ↕ái)就(jiù)越費(fèi)勁,這(zhè)意味著(zhe)成本的 ×(de)升高(gāo),質量卻不(bù)見(jiàn)得(de)變好(hǎo←•λ©);

評估性能(néng)影(yǐng)響,怎麽保證安全性,…∞ …,如(rú)果是(shì)基于開(kā®₩β÷i)源項目,可(kě)能(néng)還(hái)要(yào)↑♠♥做(zuò)二次開(kāi)發,來(lái)滿足這(zhè)些(xiē) ≥≤♣非功能(néng)性質的(de)需求~;

所以,汽車(chē)SOA真不(bù)是(shì)SOME/IP,也©<(yě)不(bù)是(shì)DDS,更不(bù)是(shì)Adapti​>↕ve AutoSAR,這(zhè)些(xiē)都(dōu)是(shì)汽車(c☆≈"hē)SOA技(jì)術(shù)棧中的(de)一(yī)環,并不(bù↓✘ φ)是(shì)全部。

很(hěn)多(duō)時(shí)候,純技(jìα∑)術(shù)的(de)部分(fēn)并不(bù)是(shì)最難的(₹↕♠de),新的(de)架構方案要(yào)達成共識,要(' βyào)真正落地(dì),需要(yào)博弈和(hé)取&₹舍,需要(yào)天時(shí)地(dì)利人(rén)和(hé)。作↕ε(zuò)為(wèi)一(yī)名工(gōng)程師(shī),心态是(shì)極α±為(wèi)重要(yào)的(de),要(yào)分(fēn)清理(lǐ)想與現(xiàn)實♣∏,技(jì)術(shù)與工(gōng)作(zuò),所以在這(zhè)裡(l™♦ǐ)我隻想談技(jì)術(shù),本來(lái)打算(₹×suàn)梳理(lǐ)一(yī)下(xià)✔¥γ₽做(zuò)汽車(chē)SOA開(kāi)發的(de)基礎知(zhī)識體(tǐ)系,以後公衆号‌€​σ的(de)內(nèi)容大(dà)緻也(yě)會(huì)圍繞著(zhe)這(γα₽zhè)個(gè)體(tǐ)系去(qù)寫,沒想到(dào)寫著(↕Ω'zhe)寫著(zhe)這(zhè)麽長(cháng)了(le),于是(shì)分(γ£←fēn)成上(shàng)下(xià)篇了(le),下( וδxià)面先開(kāi)個(gè)頭吧(ba)。

SOA是(shì)架構,做(zuò)SOA的(de)設計‍¥<(jì)和(hé)開(kāi)發,其實也(yě)是(sh✔§ì)做(zuò)架構的(de)設計(jì)和(hé)開(kāi)發,在這(™♣§≥zhè)裡(lǐ)我想引用(yòng)陳皓老(lǎo)師(shīσ↓α)為(wèi)《架構整潔之道(dào)》作(zuò)的(de)推薦序裡(l‍≠←₹ǐ)的(de)一(yī)段話(huà),我常想起這(zhè)段話(huà),挺有(yǒu✘'✘')鞭策的(de)功效,分(fēn)享給每個  (gè)不(bù)想成為(wèi)PPT架構師(shī)的(de±¶)工(gōng)程師(shī),以共勉:

問(wèn)題:如(rú)果你(nǐ)要(yào)成為(wèi)一(yī)名架構師(shī),你®↓←₩(nǐ)需要(yào)明(míng)确地(dì)區(qū)分(fē≥↓↑≤n)幾組詞語,否則你(nǐ)不(bù)可($ λγkě)能(néng)成為(wèi)一(yī)名合格的(de)工(gōng)程師¥♥"(shī)或架構師(shī)。這(zhè)幾組詞語是(shì)簡單vs.簡陋、平衡'Ω♣vs.妥協、叠代vs.半成品。如(rú)果你(nǐ)不(b≈₹ù)能(néng)很(hěn)清楚地(dì)定義出其中的(de)區(q∏'ū)别,那(nà)麽你(nǐ)将很(hěn)難做♦♥£☆(zuò)出正确的(de)決定,也(yě)就(jiù)不(b ∞&ù)可(kě)能(néng)成為(wèi)一(♥↑€πyī)名優秀的(de)工(gōng)程師(shī)或架構師(shī)。

陳皓,《架構整潔之道(dào)》推薦序一(yī)

之前很(hěn)長(cháng)一(y₽♦≥∞ī)段時(shí)間(jiān),我經常感到(dào)焦慮,一(yī)≥¶ 方面不(bù)想成為(wèi)PPT黨,₹ 開(kāi)會(huì)黨,另一(yī)方面δ↓™₽,除了(le)工(gōng)作(zuò)還(hái)要(yào)生(shēn×®"g)(帶)活(娃),留給學習(xí)的(de)時(shí)間(jiān)并不(bù)€£多(duō),而想學的(de)知(zhī)識又(σβ∑yòu)如(rú)同汪洋大(dà)海(hǎi),今φ×±Ω天想好(hǎo)好(hǎo)梳理(lǐ)一(yī)下(xià)某個(​&≥♦gè)技(jì)術(shù)點,明(míng)天搜到(dào)某個(gè)開(kāi★↔∏)源項目蠻感興趣想寫個(gè)Demo跑跑看(k★₩ àn),年(nián)輕的(de)時(shí)候覺得(de)日(rì)子(zǐ)一(yī)天天刷≠π±™刷地(dì)過去(qù),也(yě)不(bù)是↓ (shì)什(shén)麽事(shì)兒(ér),現(xi>€™‌àn)在愈發有(yǒu)種緊迫感。在做(zuò)了(♠λle)一(yī)些(xiē)架構方面的(de)設計(jì)和(∑'♦hé)開(kāi)發工(gōng)作(zuò)以後,更是(shìα∑×)深刻體(tǐ)會(huì)到(dào)構建個(gè)人•♥λ♣(rén)的(de)領域知(zhī)識體(tǐ)系,尤其是(shì)一(yī)些(xiē)基礎技(₽¥↔jì)術(shù),真的(de)非常重要(yào)。

今年(nián)伊始,聽(tīng)了(le)李運華老(l↕♠ǎo)師(shī)關于“如(rú)何打好(hǎo)基礎”的(de)講座,核心∞‌☆觀點是(shì):“基礎≠底層,基礎≠源碼,基礎≠不(b←Ω≤$ù)變”,很(hěn)是(shì)醍醐灌頂~結合個(gè)人(r<α÷×én)實際情況,我覺得(de)可(kě)以這(zhè≈→'∞)麽去(qù)構建我的(de)領域知(zhī)識體←φ(tǐ)系:首先,定義出哪些(xiē)是(shì)與我工(gōng)作(z™©uò)相(xiàng)關的(de)領域知(zhī)識(>πφ比如(rú)現(xiàn)階段是(shì)SOA≥♥);其次,進一(yī)步細化(huà)要(yào)學習(xí)的(de)知(zhī)識範圍™​↑,也(yě)就(jiù)是(shì)下(xià)篇要(yào)梳理(lǐ)₩↓ σ的(de)SOA相(xiàng)關知(zhī)•€≥識;最後,分(fēn)别從(cóng)廣度♥€×和(hé)深度(根據工(gōng)作(zuò)內(nèi)容去β±'(qù)判别學習(xí)的(de)深度) Ω$•,有(yǒu)針對(duì)性地(dì)學習(xí),并在實際工(gōng)作(↓>♠‍zuò)和(hé)項目中把知(zhī)識和(hé)技(jì)術(shùλ±♠✘)串起來(lái),從(cóng)而系統性地(dì)提升技φ β‍(jì)術(shù)能(néng)力。

就(jiù)像前面說(shuō)的(de),要(yào)分(fēn)清理(lǐ)想與 ≤現(xiàn)實,因為(wèi)這(zhè)個(gè)世界從(có₩φng)來(lái)都(dōu)不(bù)是(shì)我所能(néng)想象< λ的(de),很(hěn)多(duō)PPT黨開(kāi)會(huì)黨,基礎不(bù)紮實甚至××≤很(hěn)水(shuǐ),設計(jì)出焦油坑一(yī)樣的(de)架構,坑自(zìΩ ≥<)己,坑别人(rén),坑項目,也(yě)不(bù)耽誤他(tā)₽÷ 們升職加薪跳(tiào)槽。但(dàn)是(shì)“世界上(shàng)隻有(yǒu)☆"一(yī)種英雄主義,那(nà)就(jiù)是(shì)認清生(shēn≠± ♥g)活的(de)真相(xiàng)後依然熱(rè)愛(ài)它”,不(bù)是(sh•ε ¶ì)麽,于是(shì)才有(yǒu)了(le)寫公衆号的(de)初心和(hé)決心。

          ②&nbs₩↕±p;

      "↔≈< SOA開(kāi)發梳理(lǐ)

今天要(yào)做(zuò)的(de)梳理(lǐ),沒有(yǒu)思維導圖,沒有(yǒu)PDF¥δ♣,沒有(yǒu)表格,是(shì)結合了(le)我的(£δ♣&de)實際經曆和(hé)體(tǐ)會(huì),總結得(d>‌e)出的(de)一(yī)些(xiē)基礎知(zhī)識點,這(zhè)是(shì)現(xiàδεn)階段的(de)這(zhè)個(gè)我所了(le)解δ♣φ的(de)所認為(wèi)的(de),随著(z &→he)時(shí)間(jiān)的(de)流逝,我又(yòu)會(huì)經曆更多(du♠¶≤∑ō)一(yī)些(xiē),現(xiàn)在±σ♥梳理(lǐ)的(de)可(kě)能(néng)也(yě)會(hu★∞₹ì)跟著(zhe)改變一(yī)些(xiē)。這(zhè)種↑δ極其個(gè)性化(huà)的(de)梳☆β理(lǐ),對(duì)我,是(shì)梳理(lǐ)(其實,寫這(zhè)篇比想象中 ₽≤↑艱辛,要(yào)不(bù)是(shì)前面給自(zì)己γγ埋下(xià)了(le)坑,都(dōu)想放(fàng)棄了(le)~),對(duì)你(nǐ)'¶,看(kàn)看(kàn)便好(hǎo),就(jiù)當是(shì)聽(tīng)我絮 ‌→叨絮叨,侃侃大(dà)山(shān),輕松愉快(kuài),真心不(bù)能(néng)提供什(Ω♦φ₩shén)麽參考。以下(xià)梳理(lǐ)分(fēn)為(wèi≈← ←)四個(gè)維度:編程,架構,網絡,工(gōng)具。


1、編程:多(duō)看(kàn),多(duō)寫,多(duō)折騰

目前,智能(néng)座艙的(de)生(shēng↕€↕)态圈主要(yào)包括Android、Li≈♣↕✘nux、QNX等操作(zuò)系統,因此,我認為(wèi)做(zuò)SOA開(kāi)發,至少(‌ £shǎo)需要(yào)熟練掌握C++和(hé)β₩♥Java兩種編程語言。C++是(shì)必須要(yào)會(huì)的(de),Linux/Qφ₹&"NX主要(yào)用(yòng)C++開(kāi)發,Android其實也(yě)涉及C+±≠™™+開(kāi)發,尤其是(shì)對(duì)性能(n䩧≥éng)要(yào)求較高(gāo)的(de)模塊±Ω¶®,通(tōng)常會(huì)下(xià)沉到(dào)Native或HAL實現(xiàn)¶∏™±。Java也(yě)是(shì)必須要(yào)會(huì)的(de):第一(yī₽★‍≤),Android的(de)App和(hé)Framework是(shì)用(yòng)J↔>♠↕ava開(kāi)發的(de),需要(yào)設計(jì)和(hé)開δΩ(kāi)發SOA接口,提供給位于這(zhè)兩×‍<層的(de)應用(yòng)和(hé)服∏∞'務使用(yòng);第二,設計(jì)SOA架構,要(yào)對(duì)系統各層≤&✘‍級之間(jiān)的(de)接口如(rú)何設計(jì)和(hé)調用(yòngδ β¥)有(yǒu)足夠的(de)了(le)解,代碼都(dōu)看(kàn)不(  bù)明(míng)白(bái),怎麽設計(jì)易用(yòng)的(de)接口;第三,寫✔δDemo是(shì)架構設計(jì)過程中重要(yào)的£<Ωγ(de)步驟,總不(bù)能(néng)你(nǐ₩α£φ)設計(jì)的(de)方案等著(zhe)别人(rén)寫Dπ™emo驗證吧(ba),更重要(yào)的(de)是(shì),通¶↓♦(tōng)過寫Demo可(kě)以發現(xiàn)很(hěn)多(d≤™λuō)想法上(shàng)的(de)不(bù)足,設計(jì)文(wén)檔寫得(de)不<φ(bù)嚴謹的(de)地(dì)方。

對(duì)于C++編程,要(yào)掌握的(de)一(yīπγε£)些(xiē)基礎知(zhī)識:

語法基礎:構造,繼承,虛函數(shù),內(n§φèi)聯,多(duō)态,類型轉換,STL容器(qì),…;

C++11新特性:時(shí)至今日(r✘&£±ì),應該學會(huì)使用(yòng)至少( ♦ δshǎo)C++11常用(yòng)的(de)特性,比如(rú):類型推導(auto,dφ✘'ecltype),右值引用(yòng),智能(néng)指針,泛型/模闆,type_taitsσ∑∑♦,函數(shù)式編程(lambda),C++≠<δ11多(duō)線程,future,promise,…,用(yòng)它們使代碼更簡潔,改進代&≤§碼質量,提升程序性能(néng),不(bù)是(shì)為(wèi)了(le)炫技(jì),而↑ λ是(shì)用(yòng)到(dào)實處;

應用(yòng)開(kāi)發:Linux/QNX網絡編程、多(duō)線程編程、進"♠£≠程間(jiān)通(tōng)信等編程手法‍≤→",常用(yòng)實現(xiàn)如(rú)無鎖,消息&<隊列、線程池等,常見(jiàn)開(kāi)源庫的(de)使用(yòδ×✘₩ng),選擇感興趣的(de)如(rú)Libevent、Mu↕♦α→duo等,深入學習(xí)其設計(jì)和(hé)實現(xiàn);

項目開(kāi)發:代碼結構,接口封裝方式↑‌,常用(yòng)幾種設計(jì)模式的(de)實現(xiàn)(☆≤如(rú)單例模式、觀察者模式等);

對(duì)于Java編程,要(yào)掌握的(de)一(yī)些(xiē≤≥δ)基礎知(zhī)識:

語法基礎:包,類,接口,反射,泛型,異常,集合,注解,常ε‌§用(yòng)類,…;

并發編程:原子(zǐ)操作(zuò),Exexutor,線程池,阻塞隊列,synchroni≈€∑₩zed,鎖,volatile,CompletableFuture,…,常 ₹見(jiàn)模型如(rú)Thread-Per-Message,CopyOnWrit"•‌e,生(shēng)産者-消費(fèi)者,…;


應用(yòng)開(kāi)發:Java中的(de)網絡編程(JDK API),A©©≈Ωndroid應用(yòng)開(kāi)發基礎(四大(d♠£à)組件(jiàn),不(bù)研究UI,隻要(yào)能(néng)整出個(≥ gè)正常點兒(ér)的(de)DemoApp就(j≠♣•iù)行(xíng)~),Android進程間(jiān)通(tōn♥✔g)信機(jī)制(zhì),AIDL、JNI和(hé)HIDL接口的(de)設計‌₹ (jì)和(hé)開(kāi)發;

項目開(kāi)發:常用(yòng)代碼結∑♠€構,常用(yòng)幾種設計(jì)模式的(de)實現(xiàn)(如(rú)工 >₽"(gōng)廠(chǎng)模式、代理(lǐ)模式、門(mén)面₩ γ模式、觀察者模式、策略模式等),注意,這(zhè)裡(lǐ)和(♦•¥♣hé)前面C++說(shuō)的(de)都(dσΩπ★ōu)是(shì)實現(xiàn),期望達到(dào)的(de ÷> )水(shuǐ)平:做(zuò)到(dào)真正的(de)理(lǐ)解,談到(dào)某種'• ∑設計(jì)模式,腦(nǎo)子(zǐ)裡(lǐ)能±∞(néng)夠想到(dào)其适用(yòng)β∑的(de)應用(yòng)場(chǎng)景是(shì)什(shén)麽,落實♣←₩"到(dào)代碼上(shàng),一(yī)個(gè)大(dà)緻思路£∑(lù)是(shì)怎樣的(de),反之亦然;✔'σ在閱讀(dú)一(yī)些(xiē)開(kāi)源項目時(s←₽hí),能(néng)夠看(kàn)出用(yòng€↓ )了(le)什(shén)麽設計(jì)模式,這(zhè)樣用(yò♣™≥ng)的(de)好(hǎo)處什(shén)麽,不(bù)用(yòng)λ™  可(kě)能(néng)會(huì)産生(shēng)什(sh→'♥↕én)麽問(wèn)題。


2、架構:保持好(hǎo)奇心,平常心

架構和(hé)編程的(de)不(bù)同之處在于,編程是(shì)容γ↕易看(kàn)見(jiàn)結果和(hé)成效的©¥≤(de),你(nǐ)寫的(de)代碼有(yǒu)沒有(yǒu)Bug很(hě>€€n)快(kuài)能(néng)被證明(míng),你(nǐ)寫的(de)模塊擴展♣®性和(hé)穩定性怎麽樣,經過一(yī)些(xiē)時(shí)πα€日(rì),也(yě)能(néng)看(kàn)出個(gè)σ×∏一(yī)二。架構不(bù)是(shì),有(yǒu)多(duō)少(sh±≈λǎo)人(rén)能(néng)在短(duǎn)時(shí)間(jiān)內(nèi)落 γ地(dì)幾種架構方案的(de),更不(bù)用(yòng)說(shuō)評價架構設β± £計(jì)得(de)好(hǎo)不(bù)好(hǎ ☆>o)了(le),就(jiù)拿(ná)通®✔‍(tōng)信框架來(lái)說(shuō),很πα₩>(hěn)少(shǎo)聽(tīng)應用(yòng)說(≤λ♦•shuō)滿意當前的(de)通(tōng)≤ 信框架的(de),為(wèi)什(shén)麽擴展個(gè)接口這(z $↔hè)麽麻煩,為(wèi)什(shén)麽不(b€¶δù)支持同步調用(yòng),為(wèi)什(shén)麽沒有(y₩∞'₽ǒu)消息緩存,…,能(néng)被吐槽的(de)點太多(duō)了(l↓'e)。即使如(rú)此,我們還(hái)是(shì)要(yà¥α≠o)緻力于做(zuò)出好(hǎo)的(de)架構,也(yě)許無法得(de)到(dà±₹♦∞o)所有(yǒu)人(rén)的(de)滿意,但(dàn)設計(jì)和(hé)開(kāi)發出φ≤®好(hǎo)的(de)SOA架構,可(kě)以讓系統中每一(yī)個(gè)應用(yòng)←♦™和(hé)模塊在交互通(tōng)信與數(shù)據共享的(de)問↓∑₽(wèn)題上(shàng)獲得(de)不(bù)錯(cuò)收益,反之α∑→σ,糟糕的(de)SOA架構可(kě)能(néng)就(jiù)是(shì)Ω>>所有(yǒu)人(rén)必須面對(duì)的(de)一(yī)場(c★ ¶♣hǎng)災難。

在架構設計(jì)這(zhè)件(jiàn)事(s≤∑>hì)上(shàng),我也(yě)是(shì)剛開(kāi)始有(yǒu)一(yī)點點經曆,♦→↓以下(xià)所想完全沒有(yǒu)參考價值。


設備:跳(tiào)出單個(gè)模塊的(de)視(shì)野範圍,嘗試去(qù)了(l↕™' e)解這(zhè)個(gè)通(tōng)信系統裡(lǐ)的(de)每一(yī)個(gè)設備(π₹γ¥可(kě)以是(shì)車(chē)機(jī),儀表,T-Box,網關等等),他(tā)們的(d÷'£γe)軟件(jiàn)系統,他(tā)們的(de)硬件(jiàn),硬件(jiàn♥≤₹×)之間(jiān)的(de)連接,他(tā♦☆δ<)們的(de)功能(néng)業(yè)務,他(tā)們的(de)開(kāi♠≈)發模式,他(tā)們的(de)數(shù)據需求,他(tā)們以往采用(yòng)過的(de)通¥₹(tōng)信方案,…;


車(chē)載以太網:了(le)解相(xiàng)關知(zhī)識,如(rú)׶:CAN,LIN,診斷,标定,CP,AP,…,重點關注整車(chē)以太網與智能(né•∑∑ng)座艙的(de)對(duì)接,或者說(shuō)智能(néng)座艙• ☆★未來(lái)如(rú)何接入中央計(jì)算(suàn)單元。至于最近(jìn)很(hěn)火(∞ ©huǒ)的(de)AP,沒有(yǒu)計(jì)劃>♣作(zuò)深入研究,從(cóng)編程角度來(lái)說(shuō),基礎是(shì≥₩÷♦)相(xiàng)通(tōng)的(de),CP用(yòng)♥♦&÷的(de)C,AP用(yòng)的(de)C++,很(hěn)多(du←♥✔ō)東(dōng)西(xī)并不(bù)是(shì)本身(s¥✔Ωhēn)難度有(yǒu)多(duō)大(dà),而是(shì)<≤學習(xí)的(de)資源和(hé)工(gōng)具難以獲得(de),人(ré©‌∏n)為(wèi)形成了(le)所謂的(de)技(jì)術(shù)壁≠₹壘,個(gè)人(rén)開(kāi)發ε©∏ 者想要(yào)學習(xí)研究,幾乎不(bù)​☆可(kě)能(néng)搭建環境。我覺得(de)開(kāi)源是(♦♠‍shì)時(shí)代的(de)進步,一(yī)定會πα©★(huì)是(shì)大(dà)勢所趨,1202了(le),我₹♠們都(dōu)要(yào)擁抱開(kāi)源呀~;

系統:Linux/QNX系統調用(yòng)(如(rú)輸入/輸出,存儲,文(wén)↔₽≥件(jiàn),網絡,線程,進程間(jiān)),An♥∏droid系統架構,座艙的(de)整體(t σǐ)架構,模塊的(de)架構,比如(rú),車(↔®£∏chē)機(jī)中Android原生(sh→σ©ēng)模塊(如(rú)BT,WiFi,Audio,Location,…)的(de)≤₹÷數(shù)據源有(yǒu)什(shén)麽不(bù)同,車(chē)機(jī₩¶ ₹)中這(zhè)些(xiē)基礎模塊都(dōu)是(shì)怎麽适配的Ω₩ (de),車(chē)機(jī)中較複雜(zá)的(de)AP¥ P如(rú)導航、語音(yīn)等的(de)架♥∑£構是(shì)什(shén)麽樣的(de)。不(bù)✘π要(yào)覺得(de)别人(rén)負責的(de)模塊我了(le)解了(le)幹嘛,說(s σ∏↓huō)白(bái)了(le),SOA就(jiù)是(shì)模塊與模塊之間(jiān)的(↔≈♠¥de)交互,對(duì)每個(gè)模塊了(le)解一(yī)下(xià)一(y∏δī)定是(shì)有(yǒu)益的(de);

中間(jiān)件(jiàn):基于幾種通(t♥₹ōng)信模型(可(kě)參考DDS 介紹)的(de)中間(jiān)件(jià​∑♣n)框架,RPC技(jì)術(shù)的(de)原♣< £理(lǐ)和(hé)實現(xiàn),各種開(kāi)源RPC框架:grpc,brpc‍∑ ,srpc,…,各種中間(jiān)件(jiàn)架構方案:GENIVI,ROS ≤≠γ2,…,如(rú)何技(jì)術(shù)選型,如(rú)何驗證可(k✘±≈ě)行(xíng)性,如(rú)何做(zuò)性能(néng)™®&☆評估;

設計(jì)原則:SOLID,KISS,迪米特,☆ …,結合具體(tǐ)業(yè)務的(de)前提下(xià)追求原則,知(zh δ↑ī)易行(xíng)難,沒有(yǒu)定式,如(rú)何∞©λ做(zuò)出正确的(de)決策,需要(∞ "yào)在實踐中不(bù)斷思考和(hé)總結;

溝通(tōng)表達:面向不(bù)同受衆的(de)架構視(shì)圖,SOA是(shì)™✔↔≥需要(yào)傳播的(de),“咱們用(yòng)TCP通(tōng)信”和(¶★hé)“咱們用(yòng)SOMEIP通(tō✔•©ng)信”,對(duì)于不(bù)熟悉SOMEIP的(de)小(xi±$ǎo)夥伴來(lái)說(shuō),是(shì)兩碼事(shì)。正确地(dì)β©傳達架構的(de)設計(jì),高(gāo)效地(d쥀α₹)溝通(tōng)和(hé)解決過程中的(de)沖突,★♣≠清晰地(dì)表述技(jì)術(shù)實現(xiàn)的(de)細節☆",畫(huà)的(de)UML要(yào)能(néng)指導開(kāi)發σ★,盡可(kě)能(néng)說(shuō)經過驗證的(de)結論,即便是(¶ ↕★shì)預估的(de),也(yě)要(yào)有(yǒu)一(yī)些(xiē)‌™✘數(shù)據作(zuò)為(wèi)依據,不(bù)要(y¶Ωào)說(shuō)出諸如(rú)“應該沒問(wèn)題”這(zhè)樣的(de)結論;

項目+産品:做(zuò)架構設計(jì) ♣,可(kě)以是(shì)一(yī)個(gè)人(rén)的(de)事(shì),但(dàn)€ ₩₹架構的(de)落地(dì),是(shì)需要(yào)一(yī)群人(rén)∏ φ 一(yī)起完成的(de),能(néng)否保質保量完成不(bù)是(shì)項目經理(lǐ™£©)該去(qù)操心的(de)事(shì)嗎(ma)?我覺得(de)并不(b±&Ωù)是(shì),能(néng)否落地(dì)也(yě)是(shì)架構設計(jì)中可(kě)&←¥以考慮的(de)一(yī)個(gè)視(shì)角,适當了("& le)解一(yī)些(xiē)項目管理(lǐ)和(hé)産品思維的(de)知(zhī)識,會(&↕₩☆huì)使你(nǐ)能(néng)更好(hǎo)地(dì)理(lǐ)解這(zhè)個(gè φ)世界,理(lǐ)解一(yī)個(gè)項目的(de)運作(zuò),理(lǐ)解一(yī)個(‍↔gè)産品從(cóng)無到(dào)有(yǒu)所要(yào)經曆>≠λ÷的(de)過程,理(lǐ)解架構不(bù)止是(shì)一(yī)個(gè)技(♠>♥✔jì)術(shù)問(wèn)題,這(zhè)些(x>$÷≤iē)都(dōu)會(huì)幫助你(nǐ)設計($&₽jì)一(yī)個(gè)好(hǎo)的(de)架構。


3、網絡:實踐出真知(zhī),重視(shì)細節

如(rú)果說(shuō)架構是(shì)宏觀£•¶☆,那(nà)麽網絡通(tōng)信的(de)設計(jì)和(hé)開(kāi)發,是(sh¥™ì)件(jiàn)要(yào)扣細節的(de)事(shì)兒(ér)。不(bù★​)要(yào)想當然,不(bù)要(yào)把網絡狀況想得(de)過于理§☆♣(lǐ)想,不(bù)要(yào)把服務端想得(de)過于強大(dà),不(bù)β<​要(yào)對(duì)任何錯(cuò)誤掉以輕心,試圖找到(dào)每個(gè)錯(cuò)₽★↕誤背後的(de)根源,解決的(de)過程就(jiù)是(sh‌∏≥ì)一(yī)次收獲。

網絡基礎:OSI,TCP/IP,五層協議(yì),各層作(zuò)用(yòng)∏λ和(hé)常見(jiàn)協議(yì);

開(kāi)發基礎:TCP和(hé)UDP建Ω↔₹♦立連接的(de)流程,阻塞與非阻塞Socket API,同步與異步,IO↑&多(duō)路(lù)複用(yòng),epoll×γ的(de)水(shuǐ)平觸發與邊緣觸發;

通(tōng)信協議(yì):SOME/IP,DDS,HTTP© ε≤/RESTful,SSL/TLS,MQTT,對(duì)于SOME/IP和(hé)DDS,準備死&↔¥磕:協議(yì)标準,開(kāi)源項目的(de)應用(yòng),源碼剖析,二次→φ​開(kāi)發,封裝接口;多(duō)媒體(tǐ)傳輸:AVB,RTP/φ←RTCP/RTSP/RTMP;

序列化(huà):JSON,Protobuf,Franca IDL,MsgPack,…,✔♠σ各自(zì)優缺點、性能(néng)效率、适用(↕¶yòng)場(chǎng)景、開(kāi)源庫選型;

細節:私有(yǒu)通(tōng)信協議(yì)如(rú)何設計(jì),如(rú)何解® ♦ 決粘包和(hé)分(fēn)片;心跳(tiào)機(jī)←§制(zhì)如(rú)何設計(jì);收發緩沖區(q&>‍ ū)如(rú)何設計(jì);如(rú)何優雅地(dì)關閉連接;斷線重連機(γ→♣←jī)制(zhì)如(rú)何設計(jì);流∑£ 量控制(zhì)如(rú)何設計(jì);…;

實踐:分(fēn)析當前網絡連接狀态;定位通(tōng)信鏈路(lù)中出錯(cuò)位置,分↕πφ(fēn)析其出錯(cuò)原因;抓包,分(fēn)析數(✔​₽shù)據包;如(rú)何設計(jì)Benchmark,測試和(hé)分(fēn)析通( ™tōng)信架構的(de)各項指标如(rú)傳輸時(s∏&¥hí)延、CPU占用(yòng)、內(nèi)存消耗、負載壓力等;


4、工(gōng)具:發現(xiàn),嘗試,積累

寫工(gōng)具,會(huì)讓人(rén)覺得(de)很(hěn)Lo≠♠∞w吧(ba),實際上(shàng),很(hěn)多(duō)人(γ≈rén)低(dī)估了(le)學會(huì)使用(yòng)工(gōng)具的♦&>(de)重要(yào)性。為(wèi)什(shén)麽±<α别人(rén)花(huā)一(yī)小(xiǎo)時(shí)搭建實驗環♠ ♠境,而你(nǐ)要(yào)一(yī)天?為(wèi)什(shén)麽别人(réφ£↔n)花(huā)半小(xiǎo)時(sh&₹↓í)定位問(wèn)題改好(hǎo)代碼,而你(nǐ)要(y Ω‍★ào)一(yī)周?為(wèi)什(shén)麽别人(δεrén)花(huā)半天完成了(le)某個(gè)第 '三方庫的(de)平台移植,而你(nǐ)要¶♦(yào)花(huā)幾天,甚至搞不(bù)定?…?其實不(bù)是(shì) ↕别人(rén)有(yǒu)多(duō)厲害,而是(sh •∑ì)你(nǐ)不(bù)善于運用(yòng)各種工(gōng)具去(qù)解決問(wèn)題≠©,也(yě)沒有(yǒu)注重積累,舉個(gè)栗子(zǐ):一(yī)次重¥β£裝Ubuntu系統時(shí)遇到(dào)某個(gèγλ‍)問(wèn)題,查了(le)好(hǎo)幾篇CSDN文÷α(wén)章(zhāng),總算(suàn)給搞定了(le),可(kě)什(sδ£hén)麽都(dōu)沒記下(xià),下(xià)次再重裝時(shí),又(∑¥'₩yòu)遇到(dào)同樣的(de)問(wèn)題,這(zhè)個(gè)問(↔←®wèn)題我好(hǎo)像碰到(dào)過!然後,就(jiù"​↕)沒有(yǒu)然後了(le),如(rú)果那(nà)篇之前幫到(dào)你✔£↑(nǐ)的(de)文(wén)章(zhāng)還(hái)找不(bù)到(dào)了( ✔&le),…,總在這(zhè)樣又(yòu)那(nà)樣的(de)事(shì)情上(shàng),浪λφ←費(fèi)了(le)太多(duō)的(≤₽↑≤de)精力和(hé)時(shí)間(jiān),這(zh♣"δè)些(xiē)時(shí)間(jiān)原本可(kě)以用(yòng)↑×★ 來(lái)做(zuò)更多(duō)有(yǒu)價值的(de)事(shì)情啊~

開(kāi)發:VSCode,IDEA,Android Studio

構建:Shell,CMake,Gradle,‌₹Maven;

調試(測試):GDB,UT框架,靜(jìng)态代碼檢測,內(nèi)存洩漏檢測,tcpd$≠ump,Wireshark,MQTT X,J§σφMeter,Docker;

文(wén)檔:Markdown,PPT,E✔↓↑xcel,筆(bǐ)記,Visio,EA,dra★☆‌w.io,錄屏,…,;


自(zì)動化(huà):一(yī)直覺得(de)→±®SOA開(kāi)發工(gōng)具是(shì)值得(de)研究的(de),比如(rú&β₩)API文(wén)檔自(zì)動生(shēng)成工(gōng)具、API代碼自λ≤£(zì)動生(shēng)成工(gōng)具、回環測÷≤☆♠試工(gōng)具等(在互聯網領域已經有(yǒu)一(yī)些(xiē)類似的(d≤★<∞e)工(gōng)具,看(kàn)過幾個(gè)開(kāε$₹i)源的(de),比如(rú)ShowDoc↕↓α",感覺都(dōu)不(bù)太能(néng)用(yòng)到(dào)汽車(chē)領域,有(y≥π™ǒu)好(hǎo)用(yòng)的(de)歡迎推薦啊~);

終于,寫完了(le),好(hǎo)多(duō)沒有(yǒu)©§寫進來(lái),比如(rú)算(suàn)法與數(s∞±₩₹hù)據結構、JVM、Linux內(nèi)核、數(shù)據庫等,當然不(bù)是(shì)說↓©≤(shuō)它們不(bù)重要(yào)。但€₹(dàn)對(duì)現(xiàn)階段的(de)我來(lái)說(shuō),上(shàng)€¥面列的(de)這(zhè)些(xiē)已經很(hěn)夠我學的(de)了(le),能(néngβ≈γ≤)把這(zhè)些(xiē)搞透徹,我已經非常非常滿足了(le)。術(shù)業(yè)有™←£(yǒu)專攻,先把能(néng)做(zuò)♠₽&↔好(hǎo)的(de)事(shì)做(zuò)到(d♥α★ ào)最好(hǎo),不(bù)是(sh≥✔×ì)每個(gè)人(rén)都(dōu)能(néng•≈")成為(wèi)技(jì)術(shù)大(dà)牛,也(yě)不(bù)是(shì)$≥每個(gè)人(rén)的(de)目标都(dōu)是(shì)要(☆≥♦πyào)成為(wèi)技(jì)術(shù)大(dà)牛吧(ba),人(rén)生(shēn♣αg)的(de)路(lù)長(cháng)著(zh$ββ e)呢(ne),以後的(de)事(shì)以後再想好(hǎo<→β)了(le)。有(yǒu)句話(huà)不(bù)是(shì)很(hěn)紮心麽,“以大(dà↓₽)部分(fēn)人(rén)的(de)努力程度,根±✔'"本還(hái)輪不(bù)上(shàng)拼天賦”,有(yǒu)時(shí)候隻是(s÷ hì)态度就(jiù)足夠拉開(kāi)差距了(le)。


轉載汽車(chē)電(diàn)子(zǐ)相(xiàng)關文(wén)章(zhāng)

轉自(zì)汽車(chē)電(diàn)子(zǐ)與軟件(ji஀γ↑n)



北京德智尚車聯科技有限公司版權所有(yǒu) 京ICP證000000号   技(jì)術(s€γ•£hù)支持:網站(zhàn)建設