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