什么是架構?架構是一個系統的基本組織結構,涵蓋所包含的組件、組件之間的關系、組件與環境的關系、以及指導架構設計和演進的原則等內容。經常有人問架構重點需要關注多少屬性,我們粗略的可以概括一下九點:可修改性、可測試性、可擴展性、性能、可用性、可擴展性、安全性、可部署性、共享性。
一、可修改性
什么是可修改性?可修改性是指一個系統進行修改的容易程度,以及系統適應這些修改的靈活性。
與可修改性相關的幾個方面:可讀性(readability)、模塊化(modularity)、可重用性(reusability)、可維護性(maintainability)
可讀性涉及要素:1)寫得好。方法、函數、變量、類、模塊是否簡單明了。2)文檔齊全。代碼中注釋是否齊全。3)結構規整。結構清晰明了、注釋簡介規范。
提高可讀性策略:1.提供顯示接口;2.減少雙向依賴;3.抽象公共服務;4.使用繼承技術;5.使用延遲綁定技術。
二、可測試性
什么是可測試性?可測試性是指軟件系統通過執行基本的測試來暴露其錯誤的難易程度。
軟件測試包括:功能測試(白盒測試、黑盒測試)、性能測試(負載測試、壓力測試、可擴展性測試)、安全性測試、可用性測試、安裝測試、可訪問性測試。
增強可測試性策略:1)降低系統復雜度(子系統)、2)高內聚低耦合、3)提供定義良好的接口、4)降低類的復雜性、5)正確的異常處理、6)無限循環和/或阻塞等待、7)依賴於時間的邏輯、8)並發性、9)內存管理。
三、可擴展性
什么是可擴展性?可擴展性重點關注的是代碼和應用程序是否能符合將來未知的編碼而進行的提前設計。比如:代碼設計中我們盡可能要求功能的最小化原則,接口設計的高內聚低耦合原則,應用程序設計子系統等,都和可擴展性相關。
四、性能
什么是性能?性能是指系統能夠滿足吞吐量或時延要求程度的指標,用每秒執行事務的數量或單個事務耗費的時間來表示。
性能復雜度一般用大寫的O符合表示,定義為輸入變化的響應情況,通常用執行代碼所耗費的時間來表示。
度量性能方法:1.使用上下文管理器度量時間 2.使用時間模塊開計時代碼 3.使用時間模塊來度量代碼性能 4.使用時間模塊度量CPU時間
五、可用性
程序設計的可用性主要包括以下幾點:是否符合使用者的操作心里,是否滿足性能要求,是否開發者能在系統真實運行的環境下進行相應的修改,是否程序可以進行友好的擴展而不是僵化設計。
六、可擴展性
可擴展性包括兩種:水平擴展和垂直擴展。
水平擴展包括:1)活躍冗余 2)熱備份 3)故障檢測或重啟 4)緩存它 5)去偶 6)優雅降級 7)數據接近代碼 8)按照SLA設計
垂直擴展包括:1)向現有系統添加更多資源 2)更好地利用系統中的現有資源
七、安全性
安全性是軟件重要的方面。信息系統安全架構需要包含以下幾個方面:保密性、完整性、可用性、認證、授權、不可否認性。
常見的安全漏洞:溢出錯誤(緩存溢出、算術溢出、整型溢出)、未經驗證或驗證不當的輸入、不當的訪問控制、加密問題、使用HTTP而沒有使用HTTPS、不安全的認證、弱密碼的使用、安全散列或秘鑰的重用、弱加密技術、無效或過期的證書/秘鑰、信息泄露、服務器的元信息、開放的索引頁、開發的端口、靜態條件、系統時鍾漂移、不安全的文件(文件夾)操作等
Python中常見的四種安全問題:讀取輸入、表達式求值、溢出錯誤、序列化問題。
Web應用中的安全問題:服務器端模板注入、服務器端模板注入-回避、服務拒絕、跨站腳本攻擊等
安全編碼的策略:輸入驗證、最簡原則、最小特權原則、清理數據、授權訪問、進行有效的測試、多層防御實踐、定義安全需求、模型威脅、安全策略的架構和設計
八、可部署性
與可部署性相關的因素:模塊結構、產品運行環境和開發環境、開發生態系統支持、標准化配置、標准化基礎設施、容器的使用
九、共享性
面對現今互聯網蓬勃發展,出現了很多大數據雲計算的新理念,比如:BaaS、IaaS、PaaS、SaaS、DaaS、低代碼等,我們可以理解為共享技術。比如雲計算里的多租戶、為什么要上雲,都是為了最大化節約社會資源,增強系統的可共享性,而進行的創新。
共享性涉及的要素:可分為軟件共享性和硬件共享性。
軟件共享性的策略:虛擬機技術、雲計算技術、大數據技術等;硬件共享性的策略:共享數據庫、共享硬件系統等
總綱
系統架構需要關注的屬性客觀因素不外乎以上九大專題內容,不過真實的系統架構設計我們又不僅僅需要關注以上內容,還包括系統的主觀因素,環境、相關利益者等都能制約系統的架構。我們需要靈活運用以上的知識,比如有的架構更關注安全性可能會舍棄部分的可用性,又比如我們為了增強系統的可修改性,可能系統的可部署性又需要折中處理。我們需要融匯貫通的理解主客觀因素,平衡制約系統的主客觀矛盾,所以我在總結篇介紹
系統架構的核心理念:他強由他強,清風拂山崗;他橫由他橫,明月照大江;他自狠來他自惡,我自一口真氣足。最終達到《無招》境界!