一文搞懂企業(yè)架構(gòu)(業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu))_第1頁(yè)
一文搞懂企業(yè)架構(gòu)(業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu))_第2頁(yè)
一文搞懂企業(yè)架構(gòu)(業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu))_第3頁(yè)
一文搞懂企業(yè)架構(gòu)(業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu))_第4頁(yè)
一文搞懂企業(yè)架構(gòu)(業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu))_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

一文搞懂企業(yè)架構(gòu)(業(yè)務(wù)架構(gòu)、應(yīng)用架構(gòu)、數(shù)據(jù)架構(gòu)...)01什么是架構(gòu)和架構(gòu)本質(zhì)02架構(gòu)分層和分類03架構(gòu)的級(jí)別04

應(yīng)用架構(gòu)的演進(jìn)05

衡量架構(gòu)的合理性06常見架構(gòu)誤區(qū)

07架構(gòu)知識(shí)體系01什么是架構(gòu)和架構(gòu)本質(zhì)在軟件行業(yè),對(duì)于什么是架構(gòu),都有很多的爭(zhēng)論,每個(gè)人都有自己的理解。此君說的架構(gòu)和彼君理解的架構(gòu)未必是一回事。因此我們?cè)谟懻摷軜?gòu)之前,我們先討論架構(gòu)的概念定義,概念是人認(rèn)識(shí)這個(gè)世界的基礎(chǔ),并用來溝通的手段,如果對(duì)架構(gòu)概念理解不一樣,那溝通起來自然不順暢。企業(yè)架構(gòu)轉(zhuǎn)型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è)?想要清楚以上問題需要梳理幾個(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ù)雜問題簡(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)品,例如開源框架:RubyonRails、Spring、Laravel、Django等,這是可以拿來直接使用或者在此基礎(chǔ)上二次開發(fā)。框架是規(guī)范,架構(gòu)是結(jié)構(gòu)。我在這重新定義架構(gòu):軟件架構(gòu)指軟件系統(tǒng)的頂層結(jié)構(gòu)。架構(gòu)是經(jīng)過系統(tǒng)性地思考,權(quán)衡利弊之后在現(xiàn)有資源約束下的最合理決策,最終明確的系統(tǒng)骨架:包括子系統(tǒng)、模塊、

組件以及他們之間協(xié)作關(guān)系,約束規(guī)范,指導(dǎo)原則.并由它來指導(dǎo)團(tuán)隊(duì)中的每個(gè)人思想層面上的一致。涉及四方面:系統(tǒng)性思考的合理決策:比如技術(shù)選型、解決方案等。明確的系統(tǒng)骨架:明確系統(tǒng)有哪些部分組成。系統(tǒng)協(xié)作關(guān)系:各個(gè)組成部分如何協(xié)作來實(shí)現(xiàn)業(yè)務(wù)請(qǐng)求。約束規(guī)范和指導(dǎo)原則:保證系統(tǒng)有序,高效、穩(wěn)定運(yùn)行。因此架構(gòu)師具備能力:理解業(yè)務(wù),全局把控,選擇合適技術(shù),解決關(guān)鍵問題、指導(dǎo)研發(fā)落地實(shí)施。架構(gòu)的本質(zhì)就是對(duì)系統(tǒng)進(jìn)行有序化地重構(gòu)以致符合當(dāng)前業(yè)務(wù)的發(fā)展,并可以快速擴(kuò)展。12張架構(gòu)圖讀懂企業(yè)數(shù)據(jù)中臺(tái)那什么樣的系統(tǒng)要考慮做架構(gòu)設(shè)計(jì)技術(shù)不會(huì)平白無故的出和自驅(qū)動(dòng)發(fā)展起來,而架構(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ù)流程再造的需要02架構(gòu)分層和分類企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案架構(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),如何面向未來,保證架構(gòu)平滑過渡,這個(gè)是軟件開發(fā)者,特別是架構(gòu)師,都需要深入思考的問題。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ì)象。沒有最優(yōu)的架構(gòu),只有最合適的架構(gòu),一切系統(tǒng)設(shè)計(jì)原則都要以解決業(yè)務(wù)問題為最終目標(biāo),脫離實(shí)際業(yè)務(wù)的技術(shù)情懷架構(gòu)往往會(huì)給系統(tǒng)帶入大坑,任何不基于業(yè)務(wù)做異想天開的架構(gòu)都是耍流氓。所有問題的前提要搞清楚我們今天面臨的業(yè)務(wù)量有多大,增長(zhǎng)走勢(shì)是什么樣,而且解決高并發(fā)的過程,一定是一個(gè)循序漸進(jìn)逐步的過程。合理的架構(gòu)能夠提前預(yù)見業(yè)務(wù)發(fā)展1~2年為宜。這樣可以付出較為合理的代價(jià)換來真正達(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訪問等,數(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)更無序。應(yīng)用架構(gòu)的本質(zhì)是通過系統(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ù)量大)必然帶來技術(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ù)?;蛘呓M件,結(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)師具備軟件和硬件的功能和性能的過硬知識(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),軟件到硬件的映射,軟硬件的相互影響。03架構(gòu)的級(jí)別我們使用金字塔的架構(gòu)級(jí)別來說明,上層級(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ì)。另外,搜索公眾號(hào)Linux就該這樣學(xué)后臺(tái)回復(fù)“電子書”,獲取一份驚喜禮包。戰(zhàn)術(shù)設(shè)計(jì):應(yīng)用架構(gòu)要根據(jù)業(yè)務(wù)架構(gòu)來設(shè)計(jì)。戰(zhàn)術(shù)實(shí)施:應(yīng)用架構(gòu)確定以后,就是技術(shù)選型。04應(yīng)用架構(gòu)的演進(jìn)業(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ù)層。這是一種典型的JavaSpringMVC或者PythonDjango框架的應(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)行。然而,隨著需求的不斷增加,越來越多的人加入開發(fā)團(tuán)隊(duì),代碼庫(kù)也在飛速地膨脹。慢慢地,單體應(yīng)用變得越來越臃腫,可維護(hù)性、靈活性逐漸降低,維護(hù)成本越來越高。下面是單體架構(gòu)應(yīng)用的一些缺點(diǎn):復(fù)雜性高:以一個(gè)百萬行級(jí)別的單體應(yīng)用為例,整個(gè)項(xiàng)目包含的模塊非常多、模塊的邊界模糊、依賴關(guān)系不清晰、代碼質(zhì)量參差不齊、混亂地堆砌在一起。可想而知整個(gè)項(xiàng)目非常復(fù)雜。每次修改代碼都心驚膽戰(zhàn),甚至添加一個(gè)簡(jiǎn)單的功能,或者修改一個(gè)Bug都會(huì)帶來隱含的缺陷。技術(shù)債務(wù):隨著時(shí)間推移、需求變更和人員更迭,會(huì)逐漸形成應(yīng)用程序的技術(shù)債務(wù),并且越積越多?!安粔牟恍蕖?,這在軟件開發(fā)中非常常見,在單體應(yīng)用中這種思想更甚。已使用的系統(tǒng)設(shè)計(jì)或代碼難以被修改,因?yàn)閼?yīng)用程序中的其他模塊可能會(huì)以意料之外的方式使用它。部署頻率低:隨著代碼的增多,構(gòu)建和部署的時(shí)間也會(huì)增加。而在單體應(yīng)用中,每次功能的變更或缺陷的修復(fù)都會(huì)導(dǎo)致需要重新部署整個(gè)應(yīng)用。全量部署的方式耗時(shí)長(zhǎng)、影響范圍大、風(fēng)險(xiǎn)高,這使得單體應(yīng)用項(xiàng)目上線部署的頻率較低。而部署頻率低又導(dǎo)致兩次發(fā)布之間會(huì)有大量的功能變更和缺陷修復(fù),出錯(cuò)率比較高。可靠性差:某個(gè)應(yīng)用Bug,例如死循環(huán)、內(nèi)存溢出等,可能會(huì)導(dǎo)致整個(gè)應(yīng)用的崩潰。擴(kuò)展能力受限:?jiǎn)误w應(yīng)用只能作為一個(gè)整體進(jìn)行擴(kuò)展,無法根據(jù)業(yè)務(wù)模塊的需要進(jìn)行伸縮。例如,應(yīng)用中有的模塊是計(jì)算密集型的,它需要強(qiáng)勁的CPU;有的模塊則是IO密集型的,需要更大的內(nèi)存。由于這些模塊部署在一起,不得不在硬件的選擇上做出妥協(xié)。阻礙技術(shù)創(chuàng)新:?jiǎn)误w應(yīng)用往往使用統(tǒng)一的技術(shù)平臺(tái)或方案解決所有的問題,團(tuán)隊(duì)中的每個(gè)成員都必須使用相同的開發(fā)語言和框架,要想引入新框架或新技術(shù)平臺(tái)會(huì)非常困難。4.2.分布式隨著業(yè)務(wù)深入,業(yè)務(wù)要求的產(chǎn)品功能越來越多,每個(gè)業(yè)務(wù)模塊邏輯也都變得更加復(fù)雜,業(yè)務(wù)的深度和廣度都增加,使得單體應(yīng)用變得越來越臃腫,可維護(hù)性、靈活性逐漸降低,增加新功能開發(fā)周期越來越長(zhǎng),維護(hù)成本越來越高。這時(shí)需要對(duì)系統(tǒng)按照業(yè)務(wù)功能模塊拆分,將各個(gè)模塊服務(wù)化,變成一個(gè)分布式系統(tǒng)。業(yè)務(wù)模塊分別部署在不同的服務(wù)器上,各個(gè)業(yè)務(wù)模塊之間通過接口進(jìn)行數(shù)據(jù)交互。該架構(gòu)相對(duì)于單體架構(gòu)來說,這種架構(gòu)提供了負(fù)載均衡的能力,大大提高了系統(tǒng)負(fù)載能力,解決了網(wǎng)站高并發(fā)的需求。另外還有以下特點(diǎn):降低了耦合度:把模塊拆分,使用接口通信,降低模塊之間的耦合度。責(zé)任清晰:把項(xiàng)目拆分成若干個(gè)子項(xiàng)目,不同的團(tuán)隊(duì)負(fù)責(zé)不同的子項(xiàng)目。擴(kuò)展方便:增加功能時(shí)只需要再增加一個(gè)子項(xiàng)目,調(diào)用其他系統(tǒng)的接口就可以。部署方便:可以靈活的進(jìn)行分布式部署。提高代碼的復(fù)用性:比如Service層,如果不采用分布式rest服務(wù)方式架構(gòu)就會(huì)在手機(jī)Wap商城,微信商城,PC,Android,iOS每個(gè)端都要寫一個(gè)Service層邏輯,開發(fā)量大,難以維護(hù)一起升級(jí),這時(shí)候就可以采用分布式rest服務(wù)方式,公用一個(gè)service層。缺點(diǎn):系統(tǒng)之間的交互要使用遠(yuǎn)程通信,接口開發(fā)增大工作量,但是利大于弊。4.3.微服務(wù)緊接著業(yè)務(wù)模式越來越復(fù)雜,訂單、商品、庫(kù)存、價(jià)格等各個(gè)模塊都很深入,比如價(jià)格區(qū)分會(huì)員等級(jí),訪問渠道(app還是PC),銷售方式(團(tuán)購(gòu)還是普通)等,還有大量的價(jià)格促銷,這些規(guī)則很復(fù)雜,容易相互沖突,需要把分散到各個(gè)業(yè)務(wù)的價(jià)格邏輯進(jìn)行統(tǒng)一管理,以基礎(chǔ)價(jià)格服務(wù)的方式透明地提供給上層應(yīng)用,變成一個(gè)微內(nèi)核的服務(wù)化架構(gòu),即微服務(wù)。微服務(wù)的特點(diǎn):易于開發(fā)和維護(hù):一個(gè)微服務(wù)只會(huì)關(guān)注一個(gè)特定的業(yè)務(wù)功能,所以它業(yè)務(wù)清晰、代碼量較少。開發(fā)和維護(hù)單個(gè)微服務(wù)相對(duì)簡(jiǎn)單。而整個(gè)應(yīng)用是由若干個(gè)微服務(wù)構(gòu)建而成的,所以整個(gè)應(yīng)用也會(huì)被維持在一個(gè)可控狀態(tài)。單個(gè)微服務(wù)啟動(dòng)較快:?jiǎn)蝹€(gè)微服務(wù)代碼量較少,所以啟動(dòng)會(huì)比較快。局部修改容易部署:?jiǎn)误w應(yīng)用只要有修改,就得重新部署整個(gè)應(yīng)用,微服務(wù)解決了這樣的問題。一般來說,對(duì)某個(gè)微服務(wù)進(jìn)行修改,只需要重新部署這個(gè)服務(wù)即可。技術(shù)棧不受限:在微服務(wù)架構(gòu)中,可以結(jié)合項(xiàng)目業(yè)務(wù)及團(tuán)隊(duì)的特點(diǎn),合理地選擇技術(shù)棧。例如某些服務(wù)可使用關(guān)系型數(shù)據(jù)庫(kù)MySQL;某些微服務(wù)有圖形計(jì)算的需求,可以使用Neo4j;甚至可根據(jù)需要,部分微服務(wù)使用Java開發(fā),部分微服務(wù)使用Node.js開發(fā)。微服務(wù)雖然有很多吸引人的地方,但它并不是免費(fèi)的午餐,使用它是有代價(jià)的。使用微服務(wù)架構(gòu)面臨的挑戰(zhàn)。運(yùn)維要求較高:更多的服務(wù)意味著更多的運(yùn)維投入。在單體架構(gòu)中,只需要保證一個(gè)應(yīng)用的正常運(yùn)行。而在微服務(wù)中,需要保證幾十甚至幾百個(gè)服務(wù)服務(wù)的正常運(yùn)行與協(xié)作,這給運(yùn)維帶來了很大的挑戰(zhàn)。分布式固有的復(fù)雜性:使用微服務(wù)構(gòu)建的是分布式系統(tǒng)。對(duì)于一個(gè)分布式系統(tǒng),系統(tǒng)容錯(cuò)、網(wǎng)絡(luò)延遲、分布式事務(wù)等都會(huì)帶來巨大的挑戰(zhàn)。接口調(diào)整成本高:微服務(wù)之間通過接口進(jìn)行通信。如果修改某一個(gè)微服務(wù)的API,可能所有使用了該接口的微服務(wù)都需要做調(diào)整。重復(fù)勞動(dòng):很多服務(wù)可能都會(huì)使用到相同的功能,而這個(gè)功能并沒有達(dá)到分解為一個(gè)微服務(wù)的程度,這個(gè)時(shí)候,可能各個(gè)服務(wù)都會(huì)開發(fā)這一功能,從而導(dǎo)致代碼重復(fù)。盡管可以使用共享庫(kù)來解決這個(gè)問題(例如可以將這個(gè)功能封裝成公共組件,需要該功能的微服務(wù)引用該組件),但共享庫(kù)在多語言環(huán)境下就不一定行得通了。05衡量架構(gòu)的合理性架構(gòu)為業(yè)務(wù)服務(wù),沒有最優(yōu)的架構(gòu),只有最合適的架構(gòu),架構(gòu)始終以高效,穩(wěn)定,安全為目標(biāo)來衡量其合理性。合理的架構(gòu)設(shè)計(jì):5.1.業(yè)務(wù)需求角度能解決當(dāng)下業(yè)務(wù)需求和問題高效完成業(yè)務(wù)需求:能以優(yōu)雅且可復(fù)用的方式解決當(dāng)下所有業(yè)務(wù)問題前瞻性設(shè)計(jì):能在未來一段時(shí)間都能以第2種方式滿足業(yè)務(wù),從而不會(huì)每次當(dāng)業(yè)務(wù)進(jìn)行演變時(shí),導(dǎo)致架構(gòu)翻天覆地的變化。5.2.非業(yè)務(wù)需求角度①.穩(wěn)定性指標(biāo)高可用:要盡可能的提高軟件的可用性,我想每個(gè)操作人都不愿意看到自己的工作無法正常進(jìn)行。黑盒白盒測(cè)試、單元測(cè)試、自動(dòng)化測(cè)試、故障注入測(cè)試、提高測(cè)試覆蓋率等方式來一步一步推進(jìn)。②.高效指標(biāo)文檔化:不管是整體還是部分的整個(gè)生命周期內(nèi)都必須做好文檔化,變動(dòng)的來源包括但不限于BUG,需求。可擴(kuò)展:軟件的設(shè)計(jì)秉承著低耦合的理念去做,注意在合理的地方抽象。方便功能更改、新增和運(yùn)用技術(shù)的迭代,并且支持在適時(shí)對(duì)架構(gòu)做出重構(gòu)。高復(fù)用:為了避免重復(fù)勞動(dòng),為了降低成本,我們希望能夠重用之前的代碼、之前的設(shè)計(jì)。這點(diǎn)對(duì)于架構(gòu)環(huán)境的依賴是最大的。③.安全指標(biāo)安全:組織的運(yùn)作過程中產(chǎn)生的數(shù)據(jù)都是具有商業(yè)價(jià)值的,保證數(shù)據(jù)的安全也是刻不容緩的一部分。以免出現(xiàn)XX門之類丑聞。加密、https等為普遍手段。06常見架構(gòu)誤區(qū)開高走落不到實(shí)處:遺漏關(guān)鍵性約束與非功能需求為虛無的未來埋單而過度設(shè)計(jì)過早做出關(guān)鍵性決策客戶說啥就是啥成為傳話筒埋頭干活兒缺乏前瞻性架構(gòu)設(shè)計(jì)還要考慮系統(tǒng)可測(cè)性架構(gòu)設(shè)計(jì)不要企圖一步到位常見誤區(qū):誤區(qū)1——架構(gòu)專門由架構(gòu)師來做,業(yè)務(wù)開發(fā)人員無需關(guān)注:架構(gòu)的再好,最終還是需要代碼來落地,并且組織越大這個(gè)落地的難度越大。不單單是系統(tǒng)架構(gòu),每個(gè)解決方案每個(gè)項(xiàng)目也由自己的架構(gòu),如分層、設(shè)計(jì)模式等。如果每一塊磚瓦不夠堅(jiān)固,那么整個(gè)系統(tǒng)還是會(huì)由崩塌的風(fēng)險(xiǎn)。所謂“千里之堤,潰于蟻穴”。誤區(qū)2——架構(gòu)師確定了架構(gòu)藍(lán)圖之后任務(wù)就結(jié)束了:架構(gòu)不是“空中樓閣”,最終還是要落地的,但是架構(gòu)師完全不去深入到第一線怎么知道“地”在哪?怎么才能落的穩(wěn)穩(wěn)當(dāng)當(dāng)。誤區(qū)3——不做出完美的架構(gòu)設(shè)計(jì)不開工:世上沒有最好架構(gòu),只有最合適的架構(gòu),不要企圖一步到位。我們需要的不是一下子造出一輛汽車,而是從單輪車→自行車→摩托車,最后再到汽車。想象一下2年后才能造出的產(chǎn)品,當(dāng)初市場(chǎng)還存在嗎?誤區(qū)4——為虛無的未來埋單而過度設(shè)計(jì):在創(chuàng)業(yè)公司初期,業(yè)務(wù)場(chǎng)景和需求邊界很難把握,產(chǎn)品需要快速迭代和變現(xiàn),需求頻繁更新,這個(gè)時(shí)候需要的是快速實(shí)現(xiàn)。不要過多考慮未來的擴(kuò)展,說不定功能做完,效果不好就無用了。如果業(yè)務(wù)模式和應(yīng)用場(chǎng)景邊界都已經(jīng)比較清晰,是應(yīng)該適當(dāng)?shù)目紤]未來的擴(kuò)展性設(shè)計(jì)。誤區(qū)5—

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論