談?wù)勏到y(tǒng)架構(gòu)這個東西 - 后端技術(shù)雜談 | 颯然Hang
http://www.rowkey.me/blog/2014/06/04/sys-arch/
首當(dāng)其沖的,肯定是需要對整個系統(tǒng)的業(yè)務(wù)進(jìn)行拆分
笆环,進(jìn)行業(yè)務(wù)設(shè)計雇卷,目的就是要捋清楚系統(tǒng)是干什么的畅姊,能提供什么功能,對系統(tǒng)的需求要做到詳盡的分析和考慮。不過這部分护侮,在我參與過的一些項目看來群叶,尤其是對現(xiàn)在普遍使用的敏捷開發(fā)流程來說吃挑,無需考慮的太面面俱到,但至少不能太窄或者偏離正軌街立,后續(xù)的開發(fā)過程會不斷的反饋回來進(jìn)行調(diào)整舶衬。
接下來,系統(tǒng)的業(yè)務(wù)明確
之后赎离,交互設(shè)計和領(lǐng)域建模便可以同時執(zhí)行逛犹。當(dāng)然,這里我是覺得交互設(shè)計和架構(gòu)師是沒啥關(guān)系的,頂多就是兩者要相輔相成虽画。而領(lǐng)域建模這個就顯得很重要了舞蔽。領(lǐng)域建模是業(yè)務(wù)設(shè)計的主要邏輯,把現(xiàn)實中的業(yè)務(wù)轉(zhuǎn)化成抽象的對象
码撰,這個確實是能力的體現(xiàn)了渗柿。我覺得這一部分很多出色的架構(gòu)師相比其他人突出的一個很關(guān)鍵的地方。
技術(shù)模塊設(shè)計則是在理解了系統(tǒng)的業(yè)務(wù)需求之后脖岛,對整體的一個技術(shù)框架上的設(shè)計做祝。這里對于技術(shù)架構(gòu),我一直有一個分不太清楚的東西鸡岗,就是軟件架構(gòu)和系統(tǒng)架構(gòu)混槐。說到底,這兩者都是軟件層面的含義轩性,所不同的是前者到了代碼層面声登,而系統(tǒng)架構(gòu)則是到了軟件層面。軟件架構(gòu)是位于系統(tǒng)架構(gòu)之上的揣苏。一個系統(tǒng)悯嗓,使用了Spring、Hibernater然后用了MVC設(shè)計模式卸察,這就是軟件架構(gòu)脯厨;一個系統(tǒng)分成負(fù)載均衡模塊、Link模塊坑质、隊列模塊合武、數(shù)據(jù)模塊、推送模塊等等則就是系統(tǒng)架構(gòu)
涡扼。再往下就應(yīng)該是部署架構(gòu)了稼跳,比如系統(tǒng)部署了幾個結(jié)點、結(jié)點之間的關(guān)系吃沪、網(wǎng)絡(luò)的規(guī)劃結(jié)構(gòu)汤善、系統(tǒng)的高可用、可擴展等等票彪。當(dāng)然對于一個系統(tǒng)來說红淡,數(shù)據(jù)的設(shè)計是可以拿出來重點進(jìn)行的,畢竟對于互聯(lián)網(wǎng)應(yīng)用來說降铸,數(shù)據(jù) is all在旱,系統(tǒng)的很多性能、效率問題是和數(shù)據(jù)的存儲設(shè)計有密切關(guān)系的垮耳。
談到架構(gòu)颈渊,那么如何才能具有架構(gòu)能力呢?借鑒在知乎上看到一個回答:
視野開闊终佛,知道可以直接用哪個開源項目來滿足這樣那樣的需求俊嗽。多數(shù)時候其實我們并不需要重復(fù)造輪子。視野窄的架構(gòu)師會放著捷徑不走铃彰,不斷讓團(tuán)隊重復(fù)造輪子绍豁,直至把項目拖死。
精通設(shè)計模式牙捉,但又不泛用竹揍。不設(shè)計過度,不在各種細(xì)節(jié)問題上需求蔓延邪铲。所有架構(gòu)設(shè)計都是為了滿足產(chǎn)品需求的芬位,不滿足需求或者過度設(shè)計都是菜鳥行為。
把系統(tǒng)拆分成多個子系統(tǒng)或模塊带到,模塊之間盡量松耦合昧碉,使得原先只能串行的開發(fā)任務(wù),可以并行開展揽惹,也就是說良好的設(shè)計可以通過投入更多人力來縮短工期被饿。反之拙劣的設(shè)計需要一個人維護(hù)一大坨代碼,無法通過加人并行開發(fā)來縮短工期搪搏。
能清楚地知道系統(tǒng)的瓶頸在什么地方,不斷地定位技術(shù)難度、研發(fā)進(jìn)度干茉、性能绞铃、內(nèi)存等各方面的瓶頸,不斷調(diào)整骨干力量解決瓶頸囱嫩,在風(fēng)險爆發(fā)之前就消除隱患嗅辣。
行業(yè)經(jīng)驗帶來的直覺和預(yù)見性,可以預(yù)先需求可能產(chǎn)生怎樣的變化挠说,提前把可擴展性澡谭、后向兼容性設(shè)計好。但仍然不要過度設(shè)計
蔡學(xué)鏞大神之前還分享過一張圖片损俭,對架構(gòu)講的挺透徹的蛙奖。不明白的時候看看這個,會有種茅塞頓開的感覺杆兵。