更新時(shí)間:2019-11-29 09:31:07 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2569次
所謂一千個(gè)架構(gòu)師中有一千種“最好的架構(gòu)”模式。
“架構(gòu)”是我們這行業(yè)種一個(gè)很常見的詞,表明其必然也是經(jīng)歷了很長(zhǎng)的歲月打磨所形成的一個(gè)詞。架構(gòu)的這個(gè)詞出現(xiàn)的意義是什么?為了解決什么問題?只有把這2個(gè)問題想明白了,才能設(shè)計(jì)出一個(gè)良好的項(xiàng)目架構(gòu)。
我認(rèn)為架構(gòu)類似于畫房屋設(shè)計(jì)圖,在剛開始我們蓋一層樓的小房子的時(shí)候,拍拍腦門想一下,腦子里有個(gè)大概的樣子就開始動(dòng)工了,想怎么蓋就怎么蓋,大部分情況下也都不會(huì)出現(xiàn)。但是當(dāng)你要蓋一個(gè)大樓,這時(shí)候拍拍腦門的方式雖然有可能還能管用,但是由于沒有經(jīng)過深思熟慮的多方考量,建造出來的必然是問題重重。另外建造大樓和蓋個(gè)一層樓的小屋所需的團(tuán)隊(duì)規(guī)??隙ㄊ遣煌模總€(gè)人心中的標(biāo)準(zhǔn)不同,如果沒有一個(gè)統(tǒng)一的規(guī)范,最后的結(jié)果可想而知。所以架構(gòu)就是定規(guī)則做限制,是在權(quán)衡各方得與失之后的一個(gè)“最合理決策”,由它來指導(dǎo)團(tuán)隊(duì)中的每個(gè)人思想層面上的一致,使得最終的產(chǎn)品達(dá)到像由一個(gè)人做出來的一樣。另外還有控制復(fù)雜度、提高團(tuán)隊(duì)協(xié)作力、降低成本等等作用。
在軟件開發(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ù)見業(yè)務(wù)發(fā)展1~2年為宜。這樣可以付出較為合理的代價(jià)換來真正達(dá)到技術(shù)引領(lǐng)業(yè)務(wù)成長(zhǎng)的效果。我相信大部分在中小型公司呆過的人應(yīng)該都經(jīng)歷過被業(yè)務(wù)推著走的時(shí)代,每天焦頭爛額的這里卡了,這里掛了,這里報(bào)錯(cuò)等等問題。當(dāng)我們遇到這些問題的時(shí)候是時(shí)候花成本來考量當(dāng)前的架構(gòu)是否存在問題?

如何開始設(shè)計(jì)一個(gè)架構(gòu)
做架構(gòu)的最重要的一點(diǎn)就是上面說的貼合業(yè)務(wù),任何不基于業(yè)務(wù)做異想天開的架構(gòu)都是耍流氓~
架構(gòu)不是像平常寫代碼一樣,對(duì)就是對(duì),錯(cuò)就是錯(cuò),它并無對(duì)錯(cuò)之分,是一個(gè)取舍的過程。當(dāng)我們從0開始做架構(gòu)的時(shí)候,的確是比較困難。雖然萬事開頭難,但是一個(gè)好的開始相當(dāng)于成功了一半,會(huì)給我們接下去的工作打下結(jié)實(shí)的基礎(chǔ)。
下面來闡述一下筆者個(gè)人是如何從頭開始做一個(gè)架構(gòu)的,供大家參考學(xué)習(xí):
1.架構(gòu)是一個(gè)整體-->部分的過程,先得明確整個(gè)公司/組織對(duì)外提供的服務(wù)是什么?這是最上層的戰(zhàn)略架構(gòu),這個(gè)基本是一旦確定就很難甚至無法更改了。
2.給每個(gè)部分(比如SOA的某個(gè)服務(wù))劃分解決方案。比如根據(jù)公司的組織架構(gòu)或者產(chǎn)品等。
3.找到每個(gè)解決方案的核心功能和支撐功能。并形成一個(gè)業(yè)務(wù)總覽圖。
4.分久必合,合久必分,結(jié)合當(dāng)前的實(shí)際資源情況做出最終的決策,這是整個(gè)過程中最耗時(shí)的點(diǎn),它決定著架構(gòu)的復(fù)雜度和開發(fā)成本。方式上包括但不限于抽出可重用的功能、功能的組合、拆分粒度更細(xì)的功能提高可重用性等等。這一切的決策都要以“恰到好處”為宜。千萬不要盲目的跟從微服務(wù)之風(fēng)!千萬不要盲目的跟從微服務(wù)之風(fēng)!千萬不要盲目的跟從微服務(wù)之風(fēng)!重要的事情說3遍。服務(wù)粒度越細(xì),調(diào)用鏈路越復(fù)雜,帶來的開發(fā)成本是否適合團(tuán)隊(duì),是作為一個(gè)架構(gòu)師需要著重考量的點(diǎn)。
5.確立每個(gè)功能塊之間的協(xié)作方式,包括但不限于通訊方式,通訊協(xié)議,依賴關(guān)系等。
6.最后要把這些形成最終的架構(gòu)總覽圖,這樣能夠幫助站在一個(gè)更高的角度去考慮架構(gòu)的演變問題。如果是針對(duì)現(xiàn)存項(xiàng)目重新做架構(gòu),那么需要把現(xiàn)有項(xiàng)目架構(gòu)梳理出來,作為我們上面思考過程中的一部分參考信息。
一個(gè)好架構(gòu)的特點(diǎn)
首先從心態(tài)上必須要有工匠精神,因?yàn)檐浖軜?gòu)和造房子還是有不同的,它不是一開始就一步到位的,好的設(shè)計(jì)肯定需要經(jīng)過反復(fù)的修改,從簡(jiǎn)單到復(fù)雜的循環(huán)驗(yàn)證,不斷的打磨。
方向上我認(rèn)為分以下幾個(gè)點(diǎn):
1.文檔化:不管是整體還是部分的整個(gè)生命周期內(nèi)都必須做好文檔化,變動(dòng)的來源包括但不限于BUG,需求。
2.高可用:要盡可能的提高軟件的可用性,我想每個(gè)操作人都不愿意看到自己的工作無法正常進(jìn)行。黑盒白盒測(cè)試、單元測(cè)試、自動(dòng)化測(cè)試、故障注入測(cè)試、提高測(cè)試覆蓋率等方式來一步一步推進(jìn)。
3.安全:組織的運(yùn)作過程中產(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è)功能能夠高度自治帶來的好處是可以快速迭代,并且不管是功能迭代還是技術(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)中的誤區(qū)
做任何事的時(shí)候需要不斷的跳出原來的思維角度重新審視,這樣才能避免陷入泥潭。列出幾個(gè)我能想到的誤區(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)還存在嗎?
結(jié)語
架構(gòu)之路任重而道遠(yuǎn)。程序設(shè)計(jì)和架構(gòu)設(shè)計(jì)是互通的,每個(gè)人都可以從設(shè)計(jì)好一個(gè)程序往設(shè)計(jì)好一個(gè)系統(tǒng)架構(gòu)前進(jìn)。
以上就是動(dòng)力節(jié)點(diǎn)Java培訓(xùn)機(jī)構(gòu)小編介紹的“如何成為有才能的Java架構(gòu)師”的內(nèi)容,希望對(duì)大家有幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
視頻相關(guān)
全網(wǎng)最新全套Java視頻教程下載:http://www.soulsinkind.com/video.html
Java學(xué)習(xí)資料下載:http://www.soulsinkind.com/tutorial_java_se/
相關(guān)內(nèi)容
做一名高級(jí)Java架構(gòu)師,學(xué)Java架構(gòu)師開發(fā)難嗎
【java架構(gòu)師培訓(xùn)】合格java架構(gòu)師標(biāo)準(zhǔn)是什么
2019最新Java架構(gòu)師學(xué)習(xí)路線
相關(guān)閱讀
Java實(shí)驗(yàn)班
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
Java就業(yè)班
有基礎(chǔ) 直達(dá)就業(yè)
Java夜校直播班
業(yè)余時(shí)間 高薪轉(zhuǎn)行
Java在職加薪班
工作1~3年,加薪神器
Java架構(gòu)師班
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)