架構師是整個軟件工程和軟件生命周期里面相當重要的一個角色,介于軟件需求和開發之間的一個承上啟下的關鍵角色,即能夠實現業務需求和場景到最終軟件實現的第一次高度抽象建模。在更早的階段一般會談系統分析員角色,那么這個角色往往會同時兼顧軟件需求和軟件架構的工作。
軟件架構簡單來說就是將業務或軟件需求進行高度抽象,形成靜態和動態的模型,通過形式化的模型來表達和闡述真實的業務需求。同時這個抽象化的模型又能夠很好的指導后續的開發實現。
軟件架構要做三個方面的工作:
第一:針對軟件需求中的業務場景和流程,功能性需求進行功能性架構設計,其中包括了核心的功能架構設計,子系統和模塊的劃分,接口和集成模式的設計,數據架構和數據模型的設計等。即通過概念模型,類圖或數據庫設計等靜態模型+用例,序列圖等動態模型共同來抽象表達出完整的業務需求。
第二:通過軟件需求中的非功能性需求,來考慮整個系統的技術架構設計,技術架構本身又包括了類似消息,緩存,安全,日志等關鍵技術的實現,也包括了IT基礎設施和部署架構的設計,同時還包括了類似高可用,高可靠,高性能,高擴展等非功能性需求滿足的架構設計。
第三:對于軟件生命周期和軟件工程域標準內容的設計,其中包括了開發框架,技術選型,軟件生命周期,持續集成模式,架構標準規范,開發規范,測試規范,以及各種架構規約和約束等方面的內容設計。同時還需要基于上面內容進行相應的架構原型搭建和驗證工作,確保架構設計內容能夠真正落地。
要能夠做好上面三方面的內容,一個真正架構師必須既懂技術又懂業務,而對于當前很多互聯網應用,由于本身工作相對細分,可以看到很多架構師往往僅僅只需要專研深核心技術領域的技術和某一垂直業務場景即可。在這點上企業內部信息化架構師和互聯網本身還是存在區別,企業內部架構師更加強調業務+技術綜合能力。
架構設計的核心目的是全面的理解業務需求后給出整體的技術方案,避免后續在開發實現中遺漏。架構設計內容不僅僅是指導后續的詳細設計和開發,同時更加重要的是通過組件和劃分和接口的設計,讓后續的開發工作真正能夠并行起來,最終再進行集成,以降低軟件研發的復雜度,同時又縮短軟件開發周期提升效率。
能夠把一個復雜的大系統真正想清楚和透徹,同時還能夠把大系統拆散為松耦合的多個模塊,最終又在各個模塊獨立并行完成開發后,能夠通過預先定義的接口將這些模塊又組裝和集成起來,這就是一個真正架構師應該做的事情。我們也可以看到,一個好的建筑工程師往往就具備如上能力。
技術最終是解決業務問題和為業務服務,也正是整個原因,一個好的架構師不應該陷入到技術驅動,而是業務驅動;不是選擇最新,最熱的技術或框架,而是應該選擇當前最合適的技術和框架。架構師應該避免過度設計和技術狂熱,而是真正做好業務和技術的適配,成本和收益的分析工作。
胸有成竹,那么一定是自己已經畫過無數次的竹子,也正是這個原因架構師往往都是從一線技術開發多年的實踐積累后組建鍛煉出來的,好的架構師一定來源于實踐而非理論,只有這樣既保證了架構設計的高屋建瓴,又確保了最終的架構設計能夠真正落地。長期脫離實踐的架構師往往很容易犯經驗主義錯誤,設計出空中樓閣式的架構,看起來完美,實質上卻虛于表面。
架構師應該具備的架構思維
對于架構思維本身仍然是類似系統思維,結構化思維,編程思維等諸多思維模式的一個合集。由于架構的核心作用是在業務現實世界和抽象的IT實現之間建立起一道橋梁,因此架構思維最核心的就是要理解到業務驅動技術,技術為最終的業務服務。
因此要真正通過架構設計來完成業務和技術,需求和實現,軟件和硬件,靜態和動態,成本和收益等多方面的平衡。
分解是最基礎的,架構的重點就是要對復雜問題進行分而治之,同時保證分解后的各個部分還能夠高內聚,松耦合,最終又集成為一個完整的整體。分解核心是定義問題,因此架構首先仍然需要理解清楚需求。
集成是配合分解完成的動作,最終分解完成的各個組件或子系統,通過合適的接口設計,最終還能夠集成為一個完整的整體,分解僅僅是加速開發和降低問題復雜度,如果分解后的內容無法集成在一起,那么分解就沒有任何意義。分解+集成可以理解為架構最核心的思考方式和方法。
動態+靜態:一直是我強調的重要思維模式,架構思考里面一定要注意這兩者的結合,即涉及到流程,用例等動態分析內容,又涉及到數據,類等靜態建模內容,而是兩者要高度協作起來完成整個架構思考。
復用是另外一個重要的思維,也可以理解為SOA參考架構的核心思考模式,包括最近談的最多的業務能力組件化,組件能力服務化,平臺+應用,共享中心建設,共性能力下沉等都是談的復用的概念。及時你架構設計一個小系統,你也需要將各個模塊需要用的共性功能抽取為可復用的共性組件。
分層相對重要,架構在設計中要考慮分層,而核心仍然是資源+服務+應用的三大層,分為這三層仍然是SOA參考架構的核心思想。對于平臺+應用更多只是上面分層模式的一個變形。分層的目的是通過分層既理清了整個應用的構建過程,又保證了各層之間的獨立設計和松耦合。
模式匹配:可以講是所有思維模式里面的一個重點,而架構設計中的模式匹配就是要將最終的業務域問題匹配到對應的技術實現上面。即根據業務需求來挑選最適合的技術,而不是用主流和最先進的技術去反推業務。
抽象是架構思維里面的一個重點,這里面包括了兩個層面的內容,一個是常說的歸納方法,即各種類似場景的實現見的太多了,自然就歸納了一個規則或方法出來供以后的設計用。但是抽象更加重要,即將非類似場景中的共性內容也總結出來,進一步抽象為類似的東西,以更加方便的適應變更和各種變化。
結構化思維是架構思維必須具備的,最常用的兩種結構就是二維的表格和樹模型,通過結構化思維引入了維度和XY概念后,可以幫助我們更好的分析和比對,結構化決策等。對于多維模型,我們也要有意識的將其轉換為多個平面二維模型,方便我們進行分析。
迭代思維是架構思考中需要考慮的另外一個內容,沒有最優的架構,只有不斷進化的架構,只有最適合的架構。因此架構本身也在隨著業務需求的變化不算的迭代和演化,而不是追求用最新的技術一步到位。
最后即我們常說的系統思維,系統思維是架構思維中最重要的思維模式,一個架構師必須要有充分的全局思考的能力,做好前面談到各種平衡,追求整體的最優化而不是單個目標的最優。