1. 程式人生 > >架構設計與架構思維

架構設計與架構思維

[toc] # 前言 會打狗棒法的不一定是丐幫幫主,比如楊過。 不會打狗棒法的不一定就不能當丐幫幫主,比如喬峰。 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200323103051009-1909228926.png) 架構設計不一定要有一個架構師的頭銜,有架構師頭銜的人不一定就懂架構,或者有機會真正參與架構設計。 對於程式設計師來說,即使沒有架構師的title,我們也可以練好架構的功夫,只要武功高強,一樣瀟灑地行走江湖。 接下來,聊一聊架構的一些東西 # 一、好的架構師有什麼特點 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200323103202826-470846438.png) 1. 技術好。至少程式碼容易讀,容易擴充套件,重用性好,這不僅需要學習面向物件和設計模式,還要通過大量的編碼實踐,不單單是停在紙上談兵的階段 2. 懂得業務。不瞭解業務,就不能設計出貼合業務的架構,而行業的相關知識也不是短時間能積累起來的。 3. 良好的溝通能力。架構師需要溝通確認需求,需要讓團隊理解架構設計。 4. 有架構思維。懂得用抽象、分治、複用、 迭代等思維降低軟體複雜性 # 二、什麼是架構思維 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200323103358321-2064969956.png) 降低軟體複雜性,有幾種有效的方式:抽象、分治、複用和迭代,架構思維就是這幾個的集合 1. 抽象思維 架構是為了滿足業務需求而存在,需要通常是一些文字性的描述、原型、UI設計圖,這些最終都會變成程式碼讓機器執行。 我們必須先進行抽象,把需求變成計算機能識別的模型。 例如,抽象出各個使用者、訂單、內容等模型,劃清各個角色的責任以及物件互動的方式,隱藏很多無關緊要的細節。 2. 分治思維 對複雜的系統分而治之,分解為小的、簡單的部分。 例如針對高併發場景,可以通過設計將流量分到不同的伺服器,避免單臺伺服器過載。 又例如,將一個1000行的函式,封裝為N個獨立的不超過50行的函式的呼叫 3. 複用思維 複用是提升開發效率的最簡單有效的方法,通過對相同內容的抽象,讓其能複用於不同的場景。 很多新手程式喜歡複製貼上程式碼,如果需求變化,需要修改所有貼上過的地方,開發效率低且難以維護,同時還浪費很多測試的精力。 4. 迭代思維 好的架構都是演進過來,很少有架構是一步到位,我們需要保證不影響業務正常進度的基礎上,逐步迭代成最終合理的架構 # 三、什麼是架構設計 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200323103808099-1949185504.png) 架構設計就是用最小的人力成本滿足需求開發和需求變更,用最小的執行成本來保障軟體的執行。 常用的方法例如: 1. 使用微服務架構,把複雜系統拆分成一系列小的服務,再拆成功能模組,讓人員更好地分工協作 2. 前後端分離,讓程式設計師專注某個知識領域,降低開發難度 3. 分層設計,隔離業務邏輯,減少需求變更帶來的影響 # 四、為什需要架構設計 每種武功都有相應的使用場景,比如擒拿手、凌波微步,乾坤大挪移,那架構設計是為什麼存在呢? ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200323105355085-1926542336.png) 1. 需求讓技術變複雜。做一個部落格和做一個谷歌,技術複雜度不是一個等級 2. 人員讓技術複雜。軟體開發通過是一個團隊,成員水平不一樣,擅長的技術方向也不一樣,如何有效地協作是一個很大的考驗。 3. 技術本身複雜。軟體專案使用的程式語言、框架、元件、資料庫、人工智慧、大資料等技術,都有學習成本 4. 要讓軟體穩定執行也複雜。軟體開發完成上線後,充滿了各種不確定性,比如雲服務商可能宕機,比如明星發個微博可能造成系統癱瘓,又比如有人刪庫跑路了 正因為存在以上這幾個原因,我們需要架構設計去降低這些複雜性 1. 降低開發成本。複雜系統拆分成多個相對簡單的服務,使得普通程式設計師都可以完成,降低了人力成本。 2. 幫助組織人員高效協作。通過抽象和拆分,讓開發人員可以獨立完成功能模組。 3. 組織好各種技術。選擇合適的程式語言、協議、框架、元件等,最高效地實現需求目標 4. 保障服務穩定執行。利用成熟的架構方案,例如負載均衡、限流、降級、熔斷等,保障服務的高可用。 # 五、如何做好架構設計 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200323104143739-111641001.png) 架構設計要做好,需要大量的經驗積累,不過我們可以站在巨人的肩膀上,基於成熟的架構設計方案 改造,變成適合自己業務需求的架構 1. 分析需求。對產品的需求進行抽象,分析用例,瞭解各種使用者角色和其使用的場景 2. 選擇相似的成熟架構設計方案。例如微服務架構、前後端分離,還要根據團隊選擇合適的開發語言和框架。 3. 自頂向下層層細化。好的實踐是自頂向下的,不過早陷入技術細節中,從整體到區域性規劃,設計好部署架構、分層和分模組、API設計、資料庫設計等。 4. 驗證和優化架構設計方案。完整的架構設計方案,需要有多次的評審,充分收集各方面的反饋,反覆修改後確定,另外,還要考慮架構預期能滿足多長時間的業務增長,比如半年還是一年還是三年。 架構設計需要有高屋建瓴的眼光,不僅要有架構思想,還要有不同場景的架構實踐,更要學習前人實踐經驗的總結。架構設計是更像是一種內功,需要自我不斷地修煉,以便應對各種場景下的挑戰。