
?智能汽車網(wǎng)絡(luò)與數(shù)據(jù)安全新媒體?
在軟件行業(yè),對(duì)于什么是架構(gòu),都有很多的爭(zhēng)論,每個(gè)人都有自己的理解。此君說(shuō)的架構(gòu)和彼君理解的架構(gòu)未必是一回事。因此我們?cè)谟懻摷軜?gòu)之前,我們先討論架構(gòu)的概念定義,概念是人認(rèn)識(shí)這個(gè)世界的基礎(chǔ),并用來(lái)溝通的手段,如果對(duì)架構(gòu)概念理解不一樣,那溝通起來(lái)自然不順暢。
Linux有架構(gòu),MySQL有架構(gòu),JVM也有架構(gòu),使用Java開發(fā)、MySQL存儲(chǔ)、跑在Linux上的業(yè)務(wù)系統(tǒng)也有架構(gòu),應(yīng)該關(guān)注哪一個(gè)?想要清楚以上問(wèn)題需要梳理幾個(gè)有關(guān)系又相似的概念:系統(tǒng)與子系統(tǒng)、模塊與組建、框架與架構(gòu):
1.1. 系統(tǒng)與子系統(tǒng)
系統(tǒng):泛指由一群有關(guān)聯(lián)的個(gè)體組成,根據(jù)某種規(guī)則運(yùn)作,能完成個(gè)別元件不能獨(dú)立完成的工作能力的群體。
子系統(tǒng):也是由一群關(guān)聯(lián)的個(gè)體組成的系統(tǒng),多半是在更大的系統(tǒng)中的一部分。
1.2. 模塊與組件
都是系統(tǒng)的組成部分,從不同角度拆分系統(tǒng)而已。模塊是邏輯單元,組件是物理單元。
模塊就是從邏輯上將系統(tǒng)分解, 即分而治之, 將復(fù)雜問(wèn)題簡(jiǎn)單化。模塊的粒度可大可小, 可以是系統(tǒng),幾個(gè)子系統(tǒng)、某個(gè)服務(wù),函數(shù), 類,方法、 功能塊等等。
組件可以包括應(yīng)用服務(wù)、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)、物理機(jī)、還可以包括MQ、容器、Nginx等技術(shù)組件。
1.3. 框架與架構(gòu)
框架是組件實(shí)現(xiàn)的規(guī)范,例如:MVC、MVP、MVVM等,是提供基礎(chǔ)功能的產(chǎn)品,例如開源框架:Ruby on Rails、Spring、Laravel、Django等,這是可以拿來(lái)直接使用或者在此基礎(chǔ)上二次開發(fā)。
框架是規(guī)范,架構(gòu)是結(jié)構(gòu)。
我在這重新定義架構(gòu):軟件架構(gòu)指軟件系統(tǒng)的頂層結(jié)構(gòu)。
架構(gòu)是經(jīng)過(guò)系統(tǒng)性地思考, 權(quán)衡利弊之后在現(xiàn)有資源約束下的最合理決策, 最終明確的系統(tǒng)骨架: 包括子系統(tǒng), 模塊, 組件. 以及他們之間協(xié)作關(guān)系, 約束規(guī)范, 指導(dǎo)原則.并由它來(lái)指導(dǎo)團(tuán)隊(duì)中的每個(gè)人思想層面上的一致。涉及四方面:
系統(tǒng)性思考的合理決策:比如技術(shù)選型、解決方案等。
明確的系統(tǒng)骨架:明確系統(tǒng)有哪些部分組成。
系統(tǒng)協(xié)作關(guān)系:各個(gè)組成部分如何協(xié)作來(lái)實(shí)現(xiàn)業(yè)務(wù)請(qǐng)求。
約束規(guī)范和指導(dǎo)原則:保證系統(tǒng)有序,高效、穩(wěn)定運(yùn)行。
因此架構(gòu)師具備能力:理解業(yè)務(wù),全局把控,選擇合適技術(shù),解決關(guān)鍵問(wèn)題、指導(dǎo)研發(fā)落地實(shí)施。
架構(gòu)的本質(zhì)就是對(duì)系統(tǒng)進(jìn)行有序化地重構(gòu)以致符合當(dāng)前業(yè)務(wù)的發(fā)展,并可以快速擴(kuò)展。
那什么樣的系統(tǒng)要考慮做架構(gòu)設(shè)計(jì) 技術(shù)不會(huì)平白無(wú)故的出和自驅(qū)動(dòng)發(fā)展起來(lái),而架構(gòu)的發(fā)展和需求是基于業(yè)務(wù)的驅(qū)動(dòng)。
架構(gòu)設(shè)計(jì)完全是為了業(yè)務(wù),
需求相對(duì)復(fù)雜.
非功能性需求在整個(gè)系統(tǒng)占據(jù)重要位置.
系統(tǒng)生命周期長(zhǎng),有擴(kuò)展性需求.
系統(tǒng)基于組件或者集成的需要.
業(yè)務(wù)流程再造的需要.
架構(gòu)分類可細(xì)分為業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、技術(shù)架構(gòu), 代碼架構(gòu), 部署架構(gòu)

業(yè)務(wù)架構(gòu)是戰(zhàn)略,應(yīng)用架構(gòu)是戰(zhàn)術(shù),技術(shù)架構(gòu)是裝備。其中應(yīng)用架構(gòu)承上啟下,一方面承接業(yè)務(wù)架構(gòu)的落地,另一方面影響技術(shù)選型。
熟悉業(yè)務(wù),形成業(yè)務(wù)架構(gòu),根據(jù)業(yè)務(wù)架構(gòu),做出相應(yīng)的應(yīng)用架構(gòu),最后技術(shù)架構(gòu)落地實(shí)施。
如何針對(duì)當(dāng)前需求,選擇合適的應(yīng)用架構(gòu),如何面向未來(lái),保證架構(gòu)平滑過(guò)渡,這個(gè)是軟件開發(fā)者,特別是架構(gòu)師,都需要深入思考的問(wèn)題。
2.1. 業(yè)務(wù)架構(gòu)(俯視架構(gòu)):
包括業(yè)務(wù)規(guī)劃,業(yè)務(wù)模塊、業(yè)務(wù)流程,對(duì)整個(gè)系統(tǒng)的業(yè)務(wù)進(jìn)行拆分,對(duì)領(lǐng)域模型進(jìn)行設(shè)計(jì),把現(xiàn)實(shí)的業(yè)務(wù)轉(zhuǎn)化成抽象對(duì)象。
沒(méi)有最優(yōu)的架構(gòu),只有最合適的架構(gòu),一切系統(tǒng)設(shè)計(jì)原則都要以解決業(yè)務(wù)問(wèn)題為最終目標(biāo),脫離實(shí)際業(yè)務(wù)的技術(shù)情懷架構(gòu)往往會(huì)給系統(tǒng)帶入大坑,任何不基于業(yè)務(wù)做異想天開的架構(gòu)都是耍流氓。
所有問(wèn)題的前提要搞清楚我們今天面臨的業(yè)務(wù)量有多大,增長(zhǎng)走勢(shì)是什么樣,而且解決高并發(fā)的過(guò)程,一定是一個(gè)循序漸進(jìn)逐步的過(guò)程。合理的架構(gòu)能夠提前預(yù)見業(yè)務(wù)發(fā)展1~2年為宜。這樣可以付出較為合理的代價(jià)換來(lái)真正達(dá)到技術(shù)引領(lǐng)業(yè)務(wù)成長(zhǎng)的效果。
看看京東業(yè)務(wù)架構(gòu)(網(wǎng)上分享圖):

2.2. 應(yīng)用架構(gòu)(剖面架構(gòu),也叫邏輯架構(gòu)圖):
硬件到應(yīng)用的抽象,包括抽象層和編程接口。應(yīng)用架構(gòu)和業(yè)務(wù)架構(gòu)是相輔相成的關(guān)系。業(yè)務(wù)架構(gòu)的每一部分都有應(yīng)用架構(gòu)。
類似:

應(yīng)用架構(gòu):應(yīng)用作為獨(dú)立可部署的單元,為系統(tǒng)劃分了明確的邊界,深刻影響系統(tǒng)功能組織、代碼開發(fā)、部署和運(yùn)維等各方面. 應(yīng)用架構(gòu)定義系統(tǒng)有哪些應(yīng)用、以及應(yīng)用之間如何分工和合作。這里所謂應(yīng)用就是各個(gè)邏輯模塊或者子系統(tǒng)。
應(yīng)用架構(gòu)圖關(guān)鍵有2點(diǎn):
①. 職責(zé)劃分: 明確應(yīng)用(各個(gè)邏輯模塊或者子系統(tǒng))邊界
邏輯分層
子系統(tǒng)、模塊定義。
關(guān)鍵類。
②. 職責(zé)之間的協(xié)作:
接口協(xié)議:應(yīng)用對(duì)外輸出的接口。
協(xié)作關(guān)系:應(yīng)用之間的調(diào)用關(guān)系。
應(yīng)用分層有兩種方式:
一種是水平分(橫向),按照功能處理順序劃分應(yīng)用,比如把系統(tǒng)分為web前端/中間服務(wù)/后臺(tái)任務(wù),這是面向業(yè)務(wù)深度的劃分。
另一種是垂直分(縱向),按照不同的業(yè)務(wù)類型劃分應(yīng)用,比如進(jìn)銷存系統(tǒng)可以劃分為三個(gè)獨(dú)立的應(yīng)用,這是面向業(yè)務(wù)廣度的劃分。
應(yīng)用的合反映應(yīng)用之間如何協(xié)作,共同完成復(fù)雜的業(yè)務(wù)case,主要體現(xiàn)在應(yīng)用之間的通訊機(jī)制和數(shù)據(jù)格式,通訊機(jī)制可以是同步調(diào)用/異步消息/共享DB訪問(wèn)等,數(shù)據(jù)格式可以是文本/XML/JSON/二進(jìn)制等。
應(yīng)用的分偏向于業(yè)務(wù),反映業(yè)務(wù)架構(gòu),應(yīng)用的合偏向于技術(shù),影響技術(shù)架構(gòu)。分降低了業(yè)務(wù)復(fù)雜度,系統(tǒng)更有序,合增加了技術(shù)復(fù)雜度,系統(tǒng)更無(wú)序。
應(yīng)用架構(gòu)的本質(zhì)是通過(guò)系統(tǒng)拆分,平衡業(yè)務(wù)和技術(shù)復(fù)雜性,保證系統(tǒng)形散神不散。
系統(tǒng)采用什么樣的應(yīng)用架構(gòu),受業(yè)務(wù)復(fù)雜性影響,包括企業(yè)發(fā)展階段和業(yè)務(wù)特點(diǎn);同時(shí)受技術(shù)復(fù)雜性影響,包括IT技術(shù)發(fā)展階段和內(nèi)部技術(shù)人員水平。業(yè)務(wù)復(fù)雜性(包括業(yè)務(wù)量大)必然帶來(lái)技術(shù)復(fù)雜性,應(yīng)用架構(gòu)目標(biāo)是解決業(yè)務(wù)復(fù)雜性的同時(shí),避免技術(shù)太復(fù)雜,確保業(yè)務(wù)架構(gòu)落地。
2.3. 數(shù)據(jù)架構(gòu)
數(shù)據(jù)架構(gòu)指導(dǎo)數(shù)據(jù)庫(kù)的設(shè)計(jì). 不僅僅要考慮開發(fā)中涉及到的數(shù)據(jù)庫(kù),實(shí)體模型,也要考慮物理架構(gòu)中數(shù)據(jù)存儲(chǔ)的設(shè)計(jì)。

2.4. 代碼架構(gòu)(也叫開發(fā)架構(gòu)):
子系統(tǒng)代碼架構(gòu)主要為開發(fā)人員提供切實(shí)可行的指導(dǎo),如果代碼架構(gòu)設(shè)計(jì)不足,就會(huì)造成影響全局的架構(gòu)設(shè)計(jì)。比如公司內(nèi)不同的開發(fā)團(tuán)隊(duì)使用不同的技術(shù)棧或者組件,結(jié)果公司整體架構(gòu)設(shè)計(jì)就會(huì)失控。
代碼架構(gòu)主要定義:
①. 代碼單元:
配置設(shè)計(jì)
框架、類庫(kù)。
②. 代碼單元組織:
編碼規(guī)范,編碼的慣例。
項(xiàng)目模塊劃分
頂層文件結(jié)構(gòu)設(shè)計(jì),比如mvc設(shè)計(jì)。
依賴關(guān)系

2.5. 技術(shù)架構(gòu)
技術(shù)架構(gòu):確定組成應(yīng)用系統(tǒng)的實(shí)際運(yùn)行組件(lvs,nginx,tomcat,php-fpm等),這些運(yùn)行組件之間的關(guān)系,以及部署到硬件的策略。
技術(shù)架構(gòu)主要考慮系統(tǒng)的非功能性特征,對(duì)系統(tǒng)的高可用、高性能、擴(kuò)展、安全、伸縮性、簡(jiǎn)潔等做系統(tǒng)級(jí)的把握。
系統(tǒng)架構(gòu)的設(shè)計(jì)要求架構(gòu)師具備軟件和硬件的功能和性能的過(guò)硬知識(shí),這也是架構(gòu)設(shè)計(jì)工作中最為困難的工作。
2.6. 部署拓?fù)浼軜?gòu)圖(實(shí)際物理架構(gòu)圖):
拓?fù)浼軜?gòu),包括架構(gòu)部署了幾個(gè)節(jié)點(diǎn),節(jié)點(diǎn)之間的關(guān)系,服務(wù)器的高可用,網(wǎng)路接口和協(xié)議等,決定了應(yīng)用如何運(yùn)行,運(yùn)行的性能,可維護(hù)性,可擴(kuò)展性,是所有架構(gòu)的基礎(chǔ)。這個(gè)圖主要是運(yùn)維工程師主要關(guān)注的對(duì)象。

物理架構(gòu)主要考慮硬件選擇和拓?fù)浣Y(jié)構(gòu),軟件到硬件的映射,軟硬件的相互影響。

我們使用金字塔的架構(gòu)級(jí)別來(lái)說(shuō)明,上層級(jí)別包含下層:

系統(tǒng)級(jí):即整個(gè)系統(tǒng)內(nèi)各部分的關(guān)系以及如何治理:分層
應(yīng)用級(jí):即單個(gè)應(yīng)用的整體架構(gòu),及其與系統(tǒng)內(nèi)單個(gè)應(yīng)用的關(guān)系等。
模塊級(jí):即應(yīng)用內(nèi)部的模塊架構(gòu),如代碼的模塊化、數(shù)據(jù)和狀態(tài)的管理等。
代碼級(jí):即從代碼級(jí)別保障架構(gòu)實(shí)施。
戰(zhàn)略設(shè)計(jì)與戰(zhàn)術(shù)設(shè)計(jì)
基于架構(gòu)金字塔,我們有了系統(tǒng)架構(gòu)的戰(zhàn)略設(shè)計(jì)與戰(zhàn)術(shù)設(shè)計(jì)的完美結(jié)合:
戰(zhàn)略設(shè)計(jì):業(yè)務(wù)架構(gòu)用于指導(dǎo)架構(gòu)師如何進(jìn)行系統(tǒng)架構(gòu)設(shè)計(jì)。
戰(zhàn)術(shù)設(shè)計(jì):應(yīng)用架構(gòu)要根據(jù)業(yè)務(wù)架構(gòu)來(lái)設(shè)計(jì)。
戰(zhàn)術(shù)實(shí)施:應(yīng)用架構(gòu)確定以后,就是技術(shù)選型。

業(yè)務(wù)架構(gòu)是生產(chǎn)力,應(yīng)用架構(gòu)是生產(chǎn)關(guān)系,技術(shù)架構(gòu)是生產(chǎn)工具。業(yè)務(wù)架構(gòu)決定應(yīng)用架構(gòu),應(yīng)用架構(gòu)需要適配業(yè)務(wù)架構(gòu),并隨著業(yè)務(wù)架構(gòu)不斷進(jìn)化,同時(shí)應(yīng)用架構(gòu)依托技術(shù)架構(gòu)最終落地。

架構(gòu)演進(jìn)路程:?jiǎn)误w應(yīng)用→分布式應(yīng)用服務(wù)化→微服務(wù)
4.1. 單體應(yīng)用
企業(yè)一開始業(yè)務(wù)比較簡(jiǎn)單,只應(yīng)用某個(gè)簡(jiǎn)單場(chǎng)景,應(yīng)用服務(wù)支持?jǐn)?shù)據(jù)增刪改查和簡(jiǎn)單的邏輯即可,單體應(yīng)用可以滿足要求。
典型的三級(jí)架構(gòu),前端(Web/手機(jī)端)+中間業(yè)務(wù)邏輯層+數(shù)據(jù)庫(kù)層。這是一種典型的Java Spring MVC或者Python Django框架的應(yīng)用。其架構(gòu)圖如下所示:

針對(duì)單體應(yīng)用,非功能性需求的做法:
性能需求:使用緩存改善性能
并發(fā)需求:使用集群改善并發(fā)
讀寫分離:數(shù)據(jù)庫(kù)地讀寫分離
使用反向代理和cdn加速
使用分布式文件和分布式數(shù)據(jù)庫(kù)
單體架構(gòu)的應(yīng)用比較容易部署、測(cè)試, 在項(xiàng)目的初期,單體應(yīng)用可以很好地運(yùn)行。然而,隨著需求的不斷增加, 越來(lái)越多的人加入開發(fā)團(tuán)隊(duì),代碼庫(kù)也在飛速地膨脹。慢慢地,單體應(yīng)用變得越來(lái)越臃腫,可維護(hù)性、靈活性逐漸降低,維護(hù)成本越來(lái)越高。下面是單體架構(gòu)應(yīng)用的一些缺點(diǎn):
內(nèi)容來(lái)源:
https://mp.weixin.qq.com/s/aF3TrnLdSnEqFsSf60_E8A
-? THE END? -

?專業(yè)社群?

部分入群專家來(lái)自:
新勢(shì)力車企:
特斯拉、合眾新能源-哪吒、理想、極氪、小米、賓理汽車、極越、零跑汽車、阿維塔汽車、智己汽車、小鵬、嵐圖汽車、蔚來(lái)汽車、吉祥汽車、賽力斯......
外資傳統(tǒng)主流車企代表:
大眾中國(guó)、大眾酷翼、奧迪汽車、寶馬、福特、戴姆勒-奔馳、通用、保時(shí)捷、沃爾沃、現(xiàn)代汽車、日產(chǎn)汽車、捷豹路虎、斯堪尼亞......
內(nèi)資傳統(tǒng)主流車企:
吉利汽車、上汽乘用車、長(zhǎng)城汽車、上汽大眾、長(zhǎng)安汽車、北京汽車、東風(fēng)汽車、廣汽、比亞迪、一汽集團(tuán)、一汽解放、東風(fēng)商用、上汽商用......
全球領(lǐng)先一級(jí)供應(yīng)商:
博世、大陸集團(tuán)、聯(lián)合汽車電子、安波福、采埃孚、科世達(dá)、舍弗勒、霍尼韋爾、大疆、日立、哈曼、華為、百度、聯(lián)想、聯(lián)發(fā)科、普瑞均勝、德賽西威、蜂巢轉(zhuǎn)向、均聯(lián)智行、武漢光庭、星紀(jì)魅族、中車集團(tuán)、贏徹科技、濰柴集團(tuán)、地平線、紫光同芯、字節(jié)跳動(dòng)、......
二級(jí)供應(yīng)商(500+以上):
Upstream、ETAS、Synopsys、NXP、TUV、上海軟件中心、Deloitte、奇安信、為辰信安、云馳未來(lái)、信大捷安、信長(zhǎng)城、澤鹿安全、紐創(chuàng)信安、復(fù)旦微電子、天融信、奇虎360、中汽中心、中國(guó)汽研、上海汽檢、軟安科技、浙江大學(xué)......
人員占比

公司類型占比


因文章部分文字及圖片涉及到引用,如有侵權(quán),請(qǐng)及時(shí)聯(lián)系17316577586,我們將刪除內(nèi)容以保證您的權(quán)益。
