溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何打造“最好的架構(gòu)”?

發(fā)布時(shí)間:2020-08-16 16:34:28 來(lái)源:ITPUB博客 閱讀:159 作者:danny_2018 欄目:軟件技術(shù)

所謂一千個(gè)架構(gòu)師中有一千種“最好的架構(gòu)”模式。

“架構(gòu)”是我們這行業(yè)種一個(gè)很常見(jiàn)的詞,表明其必然也是經(jīng)歷了很長(zhǎng)的歲月打磨所形成的一個(gè)詞。架構(gòu)的這個(gè)詞出現(xiàn)的意義是什么?為了解決什么問(wèn)題?只有把這2個(gè)問(wèn)題想明白了,才能設(shè)計(jì)出一個(gè)良好的項(xiàng)目架構(gòu)。

我認(rèn)為 架構(gòu)類似于畫房屋設(shè)計(jì)圖,在剛開(kāi)始我們蓋一層樓的小房子的時(shí)候,拍拍腦門想一下,腦子里有個(gè)大概的樣子就開(kāi)始動(dòng)工了,想怎么蓋就怎么蓋,大部分情況下也都不會(huì)出現(xiàn)。但是當(dāng)你要蓋一個(gè)大樓,這時(shí)候拍拍腦門的方式雖然有可能還能管用,但是由于沒(méi)有經(jīng)過(guò)深思熟慮的多方考量,建造出來(lái)的必然是問(wèn)題重重。另外建造大樓和蓋個(gè)一層樓的小屋所需的團(tuán)隊(duì)規(guī)??隙ㄊ遣煌?,每個(gè)人心中的標(biāo)準(zhǔn)不同,如果沒(méi)有一個(gè)統(tǒng)一的規(guī)范,最后的結(jié)果可想而知。所以架構(gòu)就是定規(guī)則做限制,是在權(quán)衡各方得與失之后的一個(gè)“最合理決策”,由它來(lái)指導(dǎo)團(tuán)隊(duì)中的每個(gè)人思想層面上的一致,使得最終的產(chǎn)品達(dá)到像由一個(gè)人做出來(lái)的一樣。另外還有控制復(fù)雜度、提高團(tuán)隊(duì)協(xié)作力、降低成本等等作用。

在軟件開(kāi)發(fā)中,架構(gòu)的意義不單單是為了讓團(tuán)隊(duì)達(dá)成一致,因?yàn)槲覀児ぷ鞯谋举|(zhì)是為了做出更好的支撐業(yè)務(wù)發(fā)展需要的軟件產(chǎn)品,所以架構(gòu)也是基于業(yè)務(wù)的架構(gòu)。我認(rèn)為一個(gè)好的架構(gòu)能夠提前預(yù)見(jiàn)業(yè)務(wù)發(fā)展1~2年為宜。這樣可以付出較為合理的代價(jià)換來(lái)真正達(dá)到技術(shù)引領(lǐng)業(yè)務(wù)成長(zhǎng)的效果。我相信大部分在中小型公司呆過(guò)的人應(yīng)該都經(jīng)歷過(guò)被業(yè)務(wù)推著走的時(shí)代,每天焦頭爛額的這里卡了,這里掛了,這里報(bào)錯(cuò)等等問(wèn)題。當(dāng)我們遇到這些問(wèn)題的時(shí)候是時(shí)候花成本來(lái)考量當(dāng)前的架構(gòu)是否存在問(wèn)題?

如何設(shè)計(jì)一個(gè)架構(gòu)?

做架構(gòu)的最重要的一點(diǎn)就是上面說(shuō)的貼合業(yè)務(wù),任何不基于業(yè)務(wù)做異想天開(kāi)的架構(gòu)都是耍流氓~

架構(gòu)不是像平常寫代碼一樣,對(duì)就是對(duì),錯(cuò)就是錯(cuò),它并無(wú)對(duì)錯(cuò)之分,是一個(gè)取舍的過(guò)程。當(dāng)我們從0開(kāi)始做架構(gòu)的時(shí)候,的確是比較困難。雖然萬(wàn)事開(kāi)頭難,但是一個(gè)好的開(kāi)始相當(dāng)于成功了一半,會(huì)給我們接下去的工作打下結(jié)實(shí)的基礎(chǔ)。 

下面來(lái)闡述一下筆者個(gè)人是如何從頭開(kāi)始做一個(gè)架構(gòu)的,供大家參考學(xué)習(xí):

1. 架構(gòu)是一個(gè)整體--> 部分的過(guò)程,先得明確整個(gè)公司/組織對(duì)外提供的服務(wù)是什么?這是最上層的戰(zhàn)略架構(gòu),這個(gè)基本是一旦確定就很難甚至無(wú)法更改了。

2. 給每個(gè)部分(比如SOA的某個(gè)服務(wù))劃分解決方案。比如根據(jù)公司的組織架構(gòu)或者產(chǎn)品等。

3. 找到每個(gè)解決方案的核心功能和支撐功能。并形成一個(gè)業(yè)務(wù)總覽圖

4. 分久必合,合久必分,結(jié)合當(dāng)前的實(shí)際資源情況做出最終的決策,這是整個(gè)過(guò)程中最耗時(shí)的點(diǎn),它決定著架構(gòu)的復(fù)雜度和開(kāi)發(fā)成本。方式上包括但不限于抽出可重用的功能、功能的組合、拆分粒度更細(xì)的功能提高可重用性等等。這一切的決策都要以“恰到好處”為宜。千萬(wàn)不要盲目的跟從微服務(wù)之風(fēng)!千萬(wàn)不要盲目的跟從微服務(wù)之風(fēng)!千萬(wàn)不要盲目的跟從微服務(wù)之風(fēng)!重要的事情說(shuō)3遍。服務(wù)粒度越細(xì),調(diào)用鏈路越復(fù)雜,帶來(lái)的開(kāi)發(fā)成本是否適合團(tuán)隊(duì),是作為一個(gè)架構(gòu)師需要著重考量的點(diǎn)。

5. 確立每個(gè)功能塊之間的協(xié)作方式,包括但不限于通訊方式,通訊協(xié)議,依賴關(guān)系等。

6. 最后要把這些形成最終的架構(gòu)總覽圖,這樣能夠幫助站在一個(gè)更高的角度去考慮架構(gòu)的演變問(wèn)題。如果是針對(duì)現(xiàn)存項(xiàng)目重新做架構(gòu),那么需要把現(xiàn)有項(xiàng)目架構(gòu)梳理出來(lái),作為我們上面思考過(guò)程中的一部分參考信息。

一個(gè)好架構(gòu)有哪些特點(diǎn)?

首先從心態(tài)上必須要有工匠精神,因?yàn)檐浖軜?gòu)和造房子還是有不同的,它不是一開(kāi)始就一步到位的,好的設(shè)計(jì)肯定需要經(jīng)過(guò)反復(fù)的修改,從簡(jiǎn)單到復(fù)雜的循環(huán)驗(yàn)證,不斷的打磨。

方向上我認(rèn)為分以下幾個(gè)點(diǎn):

1. 文檔化:不管是整體還是部分的整個(gè)生命周期內(nèi)都必須做好文檔化,變動(dòng)的來(lái)源包括但不限于BUG,需求。

2. 高可用:要盡可能的提高軟件的可用性,我想每個(gè)操作人都不愿意看到自己的工作無(wú)法正常進(jìn)行。黑盒白盒測(cè)試、單元測(cè)試、自動(dòng)化測(cè)試、故障注入測(cè)試、提高測(cè)試覆蓋率等方式來(lái)一步一步推進(jìn)。

3. 安全:組織的運(yùn)作過(guò)程中產(chǎn)生的數(shù)據(jù)都是具有商業(yè)價(jià)值的,保證數(shù)據(jù)的安全也是刻不容緩的一部分。以免出現(xiàn)XX門之類丑聞。加密、https等為普遍手段

4. 可擴(kuò)展:軟件的設(shè)計(jì)秉承著低耦合的理念去做,注意在合理的地方抽象。方便功能更改、新增和運(yùn)用技術(shù)的迭代,并且支持在適時(shí)對(duì)架構(gòu)做出重構(gòu)。

5. 快速迭代:擁抱變化,占領(lǐng)戰(zhàn)略先機(jī)。

6. 高度自治:為了更好支撐第4點(diǎn)和第5點(diǎn)的,每個(gè)功能能夠高度自治帶來(lái)的好處是可以快速迭代,并且不管是功能迭代還是技術(shù)迭代所對(duì)整個(gè)系統(tǒng)的影響降到最小。

7. 高復(fù)用:為了避免重復(fù)勞動(dòng),為了降低成本,我們希望能夠重用之前的代碼、之前的設(shè)計(jì)。這點(diǎn)對(duì)于架構(gòu)環(huán)境的依賴是最大的。

8. 可驗(yàn)證:一個(gè)好的框架需要考慮到各種特殊情況,并且是可以進(jìn)行專項(xiàng)驗(yàn)證的。

做架構(gòu)過(guò)程中避免哪些誤區(qū)?

做任何事的時(shí)候需要不斷的跳出原來(lái)的思維角度重新審視,這樣才能避免陷入泥潭。列出幾個(gè)我能想到的誤區(qū):

誤區(qū)1——架構(gòu)專門由架構(gòu)師來(lái)做,業(yè)務(wù)開(kāi)發(fā)人員無(wú)需關(guān)注:架構(gòu)的再好,最終還是需要代碼來(lái)落地,并且組織越大這個(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ì)不開(kāi)工:世上沒(méi)有最好架構(gòu),只有最合適的架構(gòu)。我們需要的不是一下子造出一輛汽車,而是從單輪車 --> 自行車 --> 摩托車,最后再到汽車。想象一下2年后才能造出的產(chǎn)品,當(dāng)初市場(chǎng)還存在嗎?

結(jié)語(yǔ)

架構(gòu)之路任重而道遠(yuǎn)。程序設(shè)計(jì)和架構(gòu)設(shè)計(jì)是互通的,每個(gè)人都可以從設(shè)計(jì)好一個(gè)程序往設(shè)計(jì)好一個(gè)系統(tǒng)架構(gòu)前進(jìn)。如果現(xiàn)在還無(wú)從下手的,我推薦大家可以從領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)這個(gè)概念入手,這是由業(yè)務(wù)為導(dǎo)向的設(shè)計(jì)方式,可以對(duì)培養(yǎng)設(shè)計(jì)出落地的架構(gòu)有很大的幫助。最后引用“俞軍”一句名言,我們作為架構(gòu)師要有“懷疑精神:自我迭代”的心。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI