
架構(gòu),如果讓你給它一個定義,恐怕一時不好表達(dá)。正如,問你,山,是什么;水,是什么一樣。對于程序員來講猶如游山玩水的俠客,暢游在程序-代碼-架構(gòu)之中。為架構(gòu),下一個定義,和為山水,下一個定義,一樣可能會略作沉思之后,方能概述。
微服務(wù)是一種架構(gòu)風(fēng)格。曾經(jīng)也思考,微服務(wù),到底是先有了微服務(wù)這個動作,還是先有微服務(wù)這個名詞。想到此,想起我們的祖先,拿來一個木棍,在另外一根木棍上,使勁旋轉(zhuǎn),生出火來。后來,我們?yōu)槠淙×艘粋€名詞:鉆木取火。因此,微服務(wù)也恐怕是這樣,我們實(shí)踐了分布式架構(gòu)的動作,后又繼續(xù)嘗試精進(jìn)更能符合業(yè)務(wù)和組織的方法。后來有技術(shù)達(dá)人總結(jié)為:微服務(wù)。
我們再說回架構(gòu),架構(gòu)一定是為應(yīng)用程序服務(wù)的,那么應(yīng)用程序的需求是什么,有兩個,一個是功能性需求,實(shí)現(xiàn)一些什么樣的功能,這些功能的實(shí)現(xiàn)是通過代碼編寫最終完成;另外一個是非功能性需求,包括這套應(yīng)用程序的可維護(hù)性、可測試性、可擴(kuò)展性和可部署性。這個非功能性需求便是架構(gòu)要解決的問題。
對于功能性需求你完全可以用一個"大肚子"應(yīng)用程序去實(shí)現(xiàn),只有對我們說的非功能性需求有要求的時候,也一定會對這樣的非功能性需求有要求的,因?yàn)槟憧隙ú幌M约旱某绦虿豢删S護(hù)、不可測試、不可擴(kuò)展和不可部署。非功能性需求更是一種能力,是應(yīng)用程序健壯與否的能力,是程序的"肌肉"。
那架構(gòu)是什么,你可以清晰的為之定義了嗎?
程序的架構(gòu),有時候我們往往與建筑架構(gòu)類比,更有意思的一點(diǎn)是,在英語中 建筑師 和 架構(gòu)師 是同一個詞architect。建筑架構(gòu),一般有結(jié)構(gòu)、管線、電氣等多個構(gòu)成。那么程序架構(gòu)呢,早在不少年之前,國外就有這方面的專家,提出了4+1的視圖模型來描述架構(gòu)。
4+1視圖中的4,有邏輯視圖、實(shí)現(xiàn)視圖、進(jìn)程視圖、部署視圖。其中的1,是場景。場景來負(fù)責(zé)把視圖串聯(lián)在一起。這種視圖模型表示法是對現(xiàn)代化應(yīng)用程序架構(gòu)一個準(zhǔn)確的描述,放在我們?nèi)缃駨V泛使用的微服務(wù)架構(gòu)中能很清晰的給出精準(zhǔn)的定位。無論如何架構(gòu),都會涉及邏輯、實(shí)現(xiàn)、進(jìn)程和部署。
架構(gòu)有它的風(fēng)格,在類比到建筑上。建筑架構(gòu)的風(fēng)格可以有 "大褲衩"的豪放之風(fēng),也可以有細(xì)膩的江南水鄉(xiāng)之風(fēng)。程序的架構(gòu)也有它的風(fēng)格,分層式的架構(gòu)是一種風(fēng)格,為其代表的是MVC;六邊形的架構(gòu)是一種風(fēng)格,定義了端口和適配器,解耦了業(yè)務(wù)邏輯和依賴;微服務(wù)是一種架構(gòu)風(fēng)格,將應(yīng)用程序構(gòu)建為松耦合、可獨(dú)立部署的一組服務(wù)。
計算機(jī)軟件已經(jīng)發(fā)展了那么多年,開發(fā)程序仍然是一個需要認(rèn)真對待的復(fù)雜過程。無論今天你如何敏捷,定義問題、需求分析、軟件架構(gòu)、詳細(xì)設(shè)計、編碼與調(diào)試、單元測試、集成測試、保障維護(hù),這些動作都少不了。你承認(rèn)不承認(rèn)都會在大腦中和行動上經(jīng)歷這些動作,而架構(gòu)活動是軟件開發(fā)中的核心活動。
那么架構(gòu)師呢?
架構(gòu),對于架構(gòu)師,是解決問題的工具,如果架構(gòu)不能解決問題,架構(gòu)對于架構(gòu)師就是一個玩具。