軟體架構的核心思想

雪山飛豬發表於2020-06-18

前言

welcome to chenqionghe's blog,架構能力其實更像是一種內功,需要我們不斷地去學習,讓我們用一張正能量的圖片開啟美好的學習生活,let's do it~

一、軟體架構的定義


架構是一個系統的基本組織,涵蓋所包含的元件,元件之間的關係、元件與環境的關係,以及指導架構設計和演進的原則等內容

二、軟體架構與設計

軟體架構和軟體設計中都有“設計”的意思,但與後者相比,前者具有更高的抽象性和更廣的範圍

  • 軟體架構關注如何對系統中的結構和互動進行較高階別的描述,它關注的是那些與系統骨架相關的決策問題,例如:功能、組織 、技術、業務和質量標準等。
  • 軟體設計關注構成系統的部件或元件,以及子系統是如何組織的,關注的問題通常更接近程式碼或模組本身,例如:
    • 將程式碼分成哪些模組?如何組織?
    • 給不同的功能分配哪些類(或模組)?
    • 對於類“C”應該使用哪種設計模式?
    • 在執行時物件之間是如何互動的?傳遞什麼訊息?如何實施互動?

三、軟體架構的幾個方面

系統

系統是以特定方式組織的元件集合,以實現特定的功能。
軟體系統是其軟體元件的集合。一個系統通常可以劃分為若干個子系統。

結構

結構是根據某個指導規則或原則來組成或組織在一起的一組元素的集合,可以是軟體或硬體系統。
軟體架構可以根據觀察者的上下文展示各個層次的結構

環境

軟體系統所在的上下文或環境對其軟體架構有直接的影響。
這樣的上下因素可以是技術、商業、專業、操作等

利益相關者

任何對某個系統及其成功與否感興趣或關心的個體或團體,都是利益相關者。
例如:架構師、開發團隊、客戶、專案經理和營銷團隊等

四、軟體架構的結構特徵

執行時結構

在執行時建立的物件及其之間的互動方式經常決定部署架構。
部署架構與可擴充套件性、效能、安全性和互動操作性等質量屬性密切相關

模組結構

為了分解任務,如何拆分程式碼並把程式碼組織到模組和包中,這與系統的可維護性和可修改性密切相關,因為

  • 在程式碼組織過程中考慮到可擴充套件性的話,通常會將父類放在單獨定義好的具有恰當文件和配置的包中,這樣就可以輕易地通過增加外部模組進行擴充套件,而不需要處理太多的依賴關係
  • 對於那些依賴於外部或第三方開發者(庫、框架等)的程式碼,通過會根據提供的安裝或部署步驟,從外部源手動或自動地獲取並補丁全部各種依賴。此類程式碼還提供多種文件(例如README、INSTALL)等,它們清楚地記錄了這些步驟

五、軟體架構的質量屬性

質量屬性是系統的可度量和可測試的特性,可用於評估系統在其指定環境中的非功能性需求方面的達成情況

可修改性

定義為對系統進行修改的容易程度,以及系統對理髮進行調整的靈活性。
這是討論的修改不光是程式碼的修改、部署的修改,而是任何層次上的修改。
一般架構師對可修改性的興趣點如下:

  • 難點:對系統進行修改的難易程度
  • 成本:進行修改需要的時間和資源
  • 風險:任何與系統修改相關的風險

程式碼可讀性越強,其可修改性就越強,程式碼的可修改性與可讀性成正比

可測試性

指一個軟體系統支援通過測試來檢測故障的程度。
可測試性也可以認為是一個軟體系統向終端使用者和整合測試隱藏了多少bug
一個系統的可測試性越好,它能隱藏的bug就越少。

可擴充套件性

指系統能夠適應不斷增長的負載需求,但同時要保證可接受的處理效能,一般分為兩大類:

  • 橫向(水平)擴充套件性。意味著通過向其中新增更多多的計算節點。
  • 縱向(垂直)擴充套件性。涉及系統單個節點中資源的新增或移除

效能

指系統在給定的計算資源內完成的工作量,完成的工作量和計算資源的比例(work/unit)越高,效能越高。

計算資源的單位有以下幾種

  • 響應時間。一個函式或執行單元執行所需要的時間。
  • 延遲。某個系統被啟用並提供響應所需的時間。
  • 吞吐量。系統處理資訊的某種比率。

可用性

指系統處於完全可操作狀態的程度,以便在任何時候獲得呼叫請求時可以執行的能力

  • 可靠性
    系統的可用性和可靠性密切相關,系統越可靠,可用性就越高。
  • 故障恢復能力
    影響可用性的另一個因素是從故障中恢復的能力,包括了故障檢測、故障恢復、故障預防
  • 資料一致性
    CAP定理指出,系統的可用性與其資料一致性有密切聯絡。一致性和可用性一般膛會同時成立,因為可能通訊失敗,系統可以在一致性或可用性之間進行選擇

安全性

避免被未經過身份驗證的訪問損害資料和邏輯,同時繼續向通過誰的其他系統和角色提供服務的一種能力。

可部署性

指軟體從開發環境到產品執行環境移交的難易程度。
有以下相關因素:

  • 模組結構。
    將系統劃分為易於部署的一個個子單元,則部署會容易
  • 產品執行環境與開發環境。與
    開發環境結構非常相似的產品執行環境會使部署
  • 開發生態系統支援。
    為系統提供成熟的工具鏈支援,允許各種依賴關係自動建立和驗證等配置項內容,從而提高可部署性。
  • 標準配置。
    一個好的方式是開發者保持開發環境的配置結構和產品執行環境一致。
  • 標準化基礎設施。
    將部署保持在一個標準化的基礎設施上,提高可部署性
  • 容器使用
    隨著Docker容器技術的普及,可以規範軟體,減少啟動/停止的開銷,從而使部署更容易。

六、其他常見概念

內聚

一個模組內相關聯程度的度量,描述的是模組內的功能聯絡
若一個模組之間各元素聯絡緊密,則內聚性就高(高內聚)
如果能做到將模組做成一個功能類聚、獨立性強、內部緊密結合才是一個理想的類聚模組,這對初學都來說,非常不容易,不光是個人技術能力的挑戰,更是對某個領域業務水平的挑戰。

耦合

各模組間相互聯絡緊密程度的一種度量。
模組之間聯絡少,耦合性就越低,模組之間的相對獨立性就越強。

企業架構

企業架構是一個定義企業結構和行為的概念藍圖。它確定了企業結構、流程、人員和資訊流動如何與其核心目標相一致,以便有效地實現當前和未來的目標

系統架構

系統架構是系統的基本組織形式,由其結構和行為檢視表示。該結構由兩部分確定:構成系統的元件和元件的行為。元件的行為是指元件之間的互動,以及元件與外部系統之間的互動blo

以上內容由chenqionghe,參考《軟體架構-Python語言實現》,light weight baby~

相關文章