前言
welcome to chenqionghe's blog,架構能力其實更像是一種內功,需要我們不斷地去學習,讓我們用一張正能量的圖片開啟美好的學習生活,let's do it~
一、軟件架構的定義
架構是一個系統的基本組織,涵蓋所包含的組件,組件之間的關系、組件與環境的關系,以及指導架構設計和演進的原則等內容
二、軟件架構與設計
軟件架構和軟件設計中都有“設計”的意思,但與后者相比,前者具有更高的抽象性和更廣的范圍
- 軟件架構關注如何對系統中的結構和交互進行較高級別的描述,它關注的是那些與系統骨架相關的決策問題,例如:功能、組織 、技術、業務和質量標准等。
- 軟件設計關注構成系統的部件或組件,以及子系統是如何組織的,關注的問題通常更接近代碼或模塊本身,例如:
- 將代碼分成哪些模塊?如何組織?
- 給不同的功能分配哪些類(或模塊)?
- 對於類“C”應該使用哪種設計模式?
- 在運行時對象之間是如何交互的?傳遞什么消息?如何實施交互?
三、軟件架構的幾個方面
系統
系統是以特定方式組織的組件集合,以實現特定的功能。
軟件系統是其軟件組件的集合。一個系統通常可以划分為若干個子系統。
結構
結構是根據某個指導規則或原則來組成或組織在一起的一組元素的集合,可以是軟件或硬件系統。
軟件架構可以根據觀察者的上下文展示各個層次的結構
環境
軟件系統所在的上下文或環境對其軟件架構有直接的影響。
這樣的上下因素可以是技術、商業、專業、操作等
利益相關者
任何對某個系統及其成功與否感興趣或關心的個體或團體,都是利益相關者。
例如:架構師、開發團隊、客戶、項目經理和營銷團隊等
四、軟件架構的結構特征
運行時結構
在運行時創建的對象及其之間的交互方式經常決定部署架構。
部署架構與可擴展性、性能、安全性和交互操作性等質量屬性密切相關
模塊結構
為了分解任務,如何拆分代碼並把代碼組織到模塊和包中,這與系統的可維護性和可修改性密切相關,因為
- 在代碼組織過程中考慮到可擴展性的話,通常會將父類放在單獨定義好的具有恰當文檔和配置的包中,這樣就可以輕易地通過增加外部模塊進行擴展,而不需要處理太多的依賴關系
- 對於那些依賴於外部或第三方開發者(庫、框架等)的代碼,通過會根據提供的安裝或部署步驟,從外部源手動或自動地獲取並補丁全部各種依賴。此類代碼還提供多種文檔(例如README、INSTALL)等,它們清楚地記錄了這些步驟
五、軟件架構的質量屬性
質量屬性是系統的可度量和可測試的特性,可用於評估系統在其指定環境中的非功能性需求方面的達成情況
可修改性
定義為對系統進行修改的容易程度,以及系統對理發進行調整的靈活性。
這是討論的修改不光是代碼的修改、部署的修改,而是任何層次上的修改。
一般架構師對可修改性的興趣點如下:
- 難點:對系統進行修改的難易程度
- 成本:進行修改需要的時間和資源
- 風險:任何與系統修改相關的風險
代碼可讀性越強,其可修改性就越強,代碼的可修改性與可讀性成正比
可測試性
指一個軟件系統支持通過測試來檢測故障的程度。
可測試性也可以認為是一個軟件系統向最終用戶和集成測試隱藏了多少bug
一個系統的可測試性越好,它能隱藏的bug就越少。
可擴展性
指系統能夠適應不斷增長的負載需求,但同時要保證可接受的處理性能,一般分為兩大類:
- 橫向(水平)擴展性。意味着通過向其中添加更多多的計算節點。
- 縱向(垂直)擴展性。涉及系統單個節點中資源的添加或移除
性能
指系統在給定的計算資源內完成的工作量,完成的工作量和計算資源的比例(work/unit)越高,性能越高。
計算資源的單位有以下幾種
- 響應時間。一個函數或執行單元運行所需要的時間。
- 延遲。某個系統被激活並提供響應所需的時間。
- 吞吐量。系統處理信息的某種比率。
可用性
指系統處於完全可操作狀態的程度,以便在任何時候獲得調用請求時可以執行的能力
- 可靠性
系統的可用性和可靠性密切相關,系統越可靠,可用性就越高。 - 故障恢復能力
影響可用性的另一個因素是從故障中恢復的能力,包括了故障檢測、故障恢復、故障預防 - 數據一致性
CAP定理指出,系統的可用性與其數據一致性有密切聯系。一致性和可用性一般膛會同時成立,因為可能通信失敗,系統可以在一致性或可用性之間進行選擇
安全性
避免被未經過身份驗證的訪問損害數據和邏輯,同時繼續向通過誰的其他系統和角色提供服務的一種能力。
可部署性
指軟件從開發環境到產品運行環境移交的難易程度。
有以下相關因素:
- 模塊結構。
將系統划分為易於部署的一個個子單元,則部署會容易 - 產品運行環境與開發環境。與
開發環境結構非常相似的產品運行環境會使部署 - 開發生態系統支持。
為系統提供成熟的工具鏈支持,允許各種依賴關系自動建立和驗證等配置項內容,從而提高可部署性。 - 標准配置。
一個好的方式是開發者保持開發環境的配置結構和產品運行環境一致。 - 標准化基礎設施。
將部署保持在一個標准化的基礎設施上,提高可部署性 - 容器使用
隨着Docker容器技術的普及,可以規范軟件,減少啟動/停止的開銷,從而使部署更容易。
六、其他常見概念
內聚
一個模塊內相關聯程度的度量,描述的是模塊內的功能聯系
若一個模塊之間各元素聯系緊密,則內聚性就高(高內聚)
如果能做到將模塊做成一個功能類聚、獨立性強、內部緊密結合才是一個理想的類聚模塊,這對初學都來說,非常不容易,不光是個人技術能力的挑戰,更是對某個領域業務水平的挑戰。
耦合
各模塊間相互聯系緊密程度的一種度量。
模塊之間聯系少,耦合性就越低,模塊之間的相對獨立性就越強。
企業架構
企業架構是一個定義企業結構和行為的概念藍圖。它確定了企業結構、流程、人員和信息流動如何與其核心目標相一致,以便有效地實現當前和未來的目標
系統架構
系統架構是系統的基本組織形式,由其結構和行為視圖表示。該結構由兩部分確定:構成系統的組件和組件的行為。組件的行為是指組件之間的交互,以及組件與外部系統之間的交互
以上內容由chenqionghe整理,參考《軟件架構-Python語言實現》,light weight baby~