軟件架構(gòu)師之基礎(chǔ)理論

架構(gòu)基礎(chǔ):

  1. 介紹架構(gòu)設(shè)計的本質(zhì)、歷史背景和目的,然后從復(fù)雜度來源以及架構(gòu)設(shè)計的原則和流程來詳細介紹架構(gòu)基礎(chǔ)。

  2. 架構(gòu)定義:三大易混淆核心概念

    • 系統(tǒng)與子系統(tǒng):

      系統(tǒng)泛指由一群有關(guān)聯(lián)的個體組成,根據(jù)某種規(guī)則運作,能完成個別元件不能單獨完成的工作的群體。

      它的意思是“總體”“整體”或“聯(lián)盟”。

    • 模塊與組件:

      • 模塊:業(yè)務(wù)邏輯角度拆分

      • 組件:物理部署角度拆分

    • 框架與架構(gòu):

      • 框架(Framework):軟件框架(Software framework)通常指的是為了實現(xiàn)某個業(yè)界標準或完成特定基本任務(wù)的軟件組件規(guī)范,也指為了實現(xiàn)某個軟件組件規(guī)范時,提供規(guī)范所要求之基礎(chǔ)功能的軟件產(chǎn)品。例如mvc, mvvm,

      • 架構(gòu)(Architecture):軟件架構(gòu)指軟件系統(tǒng)的“基礎(chǔ)結(jié)構(gòu)”,創(chuàng)造這些基礎(chǔ)結(jié)構(gòu)的準則,以及對這些結(jié)構(gòu)的描述。

        4+1視圖:場景視圖(用例圖,需求)、邏輯視圖(類圖)、物理視圖(物理架構(gòu)圖)、處理流程視圖(流程圖,時序圖)和開發(fā)視圖(e.g. MVC, MVVM, MVP) https://zhuanlan.zhihu.com/p/352590602

        4R定義架構(gòu):軟件架構(gòu)指軟件系統(tǒng)的頂層(Rank)結(jié)構(gòu),它定義了系統(tǒng)由哪些角色(Role)組成,角色之間的關(guān)系(Relation)和運作規(guī)則(Rule)

        Rank、Role 和 Relation 是通過系統(tǒng)架構(gòu)圖來展示的。

        Rule 是通過系統(tǒng)序列圖(System Sequence Diagram)來展示的。

  3. 架構(gòu)設(shè)計的歷史背景

    機器語言 -> 匯編語言 -> 高級語言 -> 第一次軟件危機與結(jié)構(gòu)化程序設(shè)計 -> 第二次軟件危機與面向?qū)ο?/p>

  4. 架構(gòu)設(shè)計目的

    • 遵循這條準則能夠讓“新手”架構(gòu)師心中有數(shù),而不是一頭霧水。

      架構(gòu)也是為了應(yīng)對軟件系統(tǒng)復(fù)雜度而提出的一個解決方案,通過回顧架構(gòu)產(chǎn)生的歷史背景和原因,我們可以基本推導(dǎo)出答案:架構(gòu)設(shè)計的主要目的是為了解決軟件系統(tǒng)復(fù)雜度帶來的問題

    • 從哪里開始下手進行架構(gòu)設(shè)計呢?

      通過熟悉和理解需求,識別系統(tǒng)復(fù)雜性所在的地方,然后針對這些復(fù)雜點進行架構(gòu)設(shè)計。

    • 識別核心特點不需要面面俱到

      而是要識別出復(fù)雜點然后有針對性地解決問題。

    • A & B該選哪一個?

      理解每個架構(gòu)方案背后所需要解決的復(fù)雜點,然后才能對比自己的業(yè)務(wù)復(fù)雜點,參考復(fù)雜點相似的方案。

    • 實例:學(xué)生管理系統(tǒng),復(fù)雜性分析

      從性能, 可擴展性, 高可用,安全性,成本幾方面分析

  5. 復(fù)雜度來源----高性能

    多臺計算機集群為了高性能帶來的復(fù)雜度, 而計算機內(nèi)部復(fù)雜度最關(guān)鍵的地方就是操作系統(tǒng)。

    實現(xiàn)高性能方式:

    • 任務(wù)分配,增加機器,實際性能為理論性能8折,首先增加硬件數(shù)量,未達到預(yù)期的性能提升。

      常用任務(wù)分配器有DNS 輪詢、智能 DNS、CDN(Content Delivery Network,內(nèi)容分發(fā)網(wǎng)絡(luò)),GSLB 設(shè)備(全局負載均衡)

    • 任務(wù)分解, 提升性能的幾大因素:

      • 簡單的系統(tǒng)更加容易做到高性能。

      • 可以針對單個任務(wù)進行擴展。

      • 要把握粒度,適當拆分,否則增加系統(tǒng)調(diào)用復(fù)雜度

  6. 復(fù)雜度來源----高可用

    本質(zhì)通過“冗余”實現(xiàn), 數(shù)據(jù) + 邏輯 = 業(yè)務(wù)

    • 計算高可用,任務(wù)分配器有主備,主主。

    • 存儲高可用,難點不在于如何備份數(shù)據(jù),而在于如何減少或者規(guī)避數(shù)據(jù)不一致對業(yè)務(wù)造成的影響。

    • 高可用狀態(tài)決策

      常見決策方式:獨裁式, 協(xié)商式主備決策(通訊中斷,主備無法知道對方狀態(tài),可增加2,3連接),民主式(有腦裂問題)

    • 復(fù)雜度來源----可擴展性

      可擴展性的系統(tǒng),有兩個基本條件:正確預(yù)測變化和完美應(yīng)對變化

      • 預(yù)測變化:

        復(fù)雜性:不能每個都可擴展,不能不擴展,預(yù)測有錯誤

        心法:只預(yù)測 2 年內(nèi)的可能變化,不要試圖預(yù)測 5 年甚至 10 年后的變化。

      • 應(yīng)對變化:

        方案一:提煉出“變化層”和“穩(wěn)定層”,核心思想是通過變化層來隔離變化。

        方案二:提煉出“抽象層”和“實現(xiàn)層”,核心思想是通過實現(xiàn)層來封裝變化。典型的實踐就是設(shè)計模式和規(guī)則引擎

        方法論:Rule of three,Three Strikes And You Refactor,事不過三,過三重構(gòu),1 寫 2 抄 3 重構(gòu)。即相同的業(yè)務(wù)需求出現(xiàn)三次及以上則考慮重構(gòu)。

  7. 復(fù)雜度來源----低成本、安全、規(guī)模

    • 低成本:架構(gòu)設(shè)計的附加約束。復(fù)雜度體現(xiàn)在,往往只有“創(chuàng)新”才能達到低成本目標。

    • 安全:分兩類,功能上的安全 和 架構(gòu)上的安全。

      • 功能安全:XSS 攻擊、CSRF 攻擊、SQL 注入、Windows 漏洞、密碼破解等

      • 架構(gòu)安全:防火墻

    • 規(guī)模:主要原因就是“量變引起質(zhì)變”

      • 功能增加:復(fù)雜度計算公式:系統(tǒng)的復(fù)雜度 = 功能數(shù)量 + 功能之間的連接數(shù)量<V (G)=e-n+2>
      • 數(shù)據(jù)增加:mysql 推薦5000W行
  8. 架構(gòu)設(shè)計三原則:合適原則、簡單原則、演化原則

    • 合適原則:合適優(yōu)于業(yè)界領(lǐng)先。

      • 失敗1:沒那么多人,卻想干那么多活,是失敗的第一個主要原因。

      • 失敗2:沒有那么多積累,卻想一步登天,是失敗的第二個主要原因。

      • 失敗3:沒有那么卓越的業(yè)務(wù)場景,卻幻想靈光一閃成為天才,是失敗的第三個主要原因。

        總結(jié):真正優(yōu)秀的架構(gòu)都是在企業(yè)當前人力、條件、業(yè)務(wù)等各種約束下設(shè)計出來的,能夠合理地將資源整合在一起并發(fā)揮出最大功效,并且能夠快速落地

    • 簡單原則:簡單優(yōu)于復(fù)雜?!禪NIX編程》KISS原則(Keep It Simple, Stupid!)

      軟件領(lǐng)域復(fù)雜性:結(jié)構(gòu)的復(fù)雜性、邏輯的復(fù)雜性,需求的變更是復(fù)雜性的根本原因

    • 演化原則:

      根據(jù)業(yè)務(wù)發(fā)展不斷變化這個本質(zhì)特點,軟件架構(gòu)設(shè)計其實更加類似于大自然“設(shè)計”一個生物,通過演化讓生物適應(yīng)環(huán)境,逐步變得更加強大。

      軟件架構(gòu)設(shè)計同樣是類似的過程:

      • 首先,設(shè)計出來的架構(gòu)要滿足當時的業(yè)務(wù)需要。
      • 其次,架構(gòu)要不斷地在實際應(yīng)用過程中迭代,保留優(yōu)秀的設(shè)計,修復(fù)有缺陷的設(shè)計,改正錯誤的設(shè)計,去掉無用的設(shè)計,使得架構(gòu)逐漸完善。
      • 第三,當業(yè)務(wù)發(fā)生變化時,架構(gòu)要擴展、重構(gòu),甚至重寫;代碼也許會重寫,但有價值的經(jīng)驗、教訓(xùn)、邏輯、設(shè)計等(類似生物體內(nèi)的基因)卻可以在新架構(gòu)中延續(xù)。
  9. 架構(gòu)設(shè)計原則案例:

  1. 架構(gòu)設(shè)計流程:第一步,識別復(fù)雜度

    • 場景:實際上大部分場景下,復(fù)雜度只是其中的某一個,少數(shù)情況下包含其中兩個,如果真的出現(xiàn)同時需要解決三個或者三個以上的復(fù)雜度,要么說明這個系統(tǒng)之前設(shè)計的有問題,要么可能就是架構(gòu)師的判斷出現(xiàn)了失誤,即使真的認為要同時滿足這三方面的要求,也必須要進行優(yōu)先級排序。

    • 正確的做法是將主要的復(fù)雜度問題列出來,然后根據(jù)業(yè)務(wù)、技術(shù)、團隊等綜合情況進行排序,優(yōu)先解決當前面臨的最主要的復(fù)雜度問題

    • TPS、QPS,指標峰值2~8倍

  2. 架構(gòu)設(shè)計流程:第二步,設(shè)計備選方案

    成熟的架構(gòu)師需要對已經(jīng)存在的技術(shù)非常熟悉,

    對已經(jīng)經(jīng)過驗證的架構(gòu)模式爛熟于心,

    然后根據(jù)自己對業(yè)務(wù)的理解,

    挑選合適的架構(gòu)模式進行組合,

    再對組合后的方案進行修改和調(diào)整。

    • 第一種常見的錯誤:設(shè)計最優(yōu)秀的方案。

    • 第二種常見的錯誤:只做一個方案。

      • 備選方案的數(shù)量以 3 ~ 5 個為最佳。

      • 備選方案的差異要比較明顯。

      • 備選方案的技術(shù)不要只局限于已經(jīng)熟悉的技術(shù)。

    • 第三種常見的錯誤:備選方案過于詳細。

      做法是備選階段關(guān)注的是技術(shù)選型,而不是技術(shù)細節(jié),技術(shù)選型的差異要比較明顯。

  3. 架構(gòu)設(shè)計流程:第三步,評估和選擇備選方案

    • 幾種指導(dǎo)思想:最簡派、最牛派、最熟派、領(lǐng)導(dǎo)派

    • 方法論:“360 度環(huán)評表”!具體的操作方式為:列出我們需要關(guān)注的質(zhì)量屬性點,然后分別從這些質(zhì)量屬性的維度去評估每個方案,再綜合挑選適合當時情況的最優(yōu)方案。選擇方式為按優(yōu)先級選擇

    • 常見的方案質(zhì)量屬性點有:性能、可用性、硬件成本、項目投入、復(fù)雜度、安全性、可擴展性等。

    • 質(zhì)量屬性資源評估和未來業(yè)務(wù)發(fā)展關(guān)系 = 當前的業(yè)務(wù)規(guī)模 * (2 or 4)

  4. 架構(gòu)設(shè)計流程: 第四步,詳細方案設(shè)計

    • 方法論:

      • 架構(gòu)師不但要進行備選方案設(shè)計和選型,還需要對備選方案的關(guān)鍵細節(jié)有較深入的理解。
      • 通過分步驟、分階段、分系統(tǒng)等方式,盡量降低方案復(fù)雜度
    • 可能產(chǎn)生的問題:

      詳細設(shè)計方案階段可能遇到的一種極端情況就是在詳細設(shè)計階段發(fā)現(xiàn)備選方案不可行,一般情況下主要的原因是備選方案設(shè)計時遺漏了某個關(guān)鍵技術(shù)點或者關(guān)鍵的質(zhì)量屬性。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容