常見分類
一般來說,質量屬性可以分為以下幾類:
類別 | 常見質量屬性 |
---|---|
性能相關 | 響應時間、吞吐量、資源利用率、實時性、可擴展性 |
可用性相關 | 可用性、高可用性(HA)、可靠性、容錯性、恢復性 |
可維護性相關 | 可維護性、可測試性、可擴展性、可配置性 |
安全性相關 | 認證、授權、加密、完整性、審計 |
可用性體驗相關 | 易用性、國際化、多語言支持、可訪問性 |
可部署性相關 | 可部署性、可升級性、可回滾性 |
其他 | 可移植性、互操作性、合規性、節能性 |
性能(Performance)
定義
系統響應請求的速度,處理數據的能力,系統在壓力下的表現。
影響
- 用戶體驗(卡頓、延遲)
- 系統容量(能接多少并發)
- 成本控制(性能差就要加機器)
設計策略
- 負載均衡(如 Nginx)
- 緩存設計(本地緩存、分布式緩存)
- 異步處理(消息隊列MQ)
- 數據庫優化(索引、分庫分表、讀寫分離)
- 限流、降級、熔斷
常見模式
- CQRS(Command Query Responsibility Segregation)
- 數據預計算(如排行榜)
- 寫緩沖(Write-back cache)
可用性(Availability)
定義
系統能持續正常對外提供服務的能力,通常用「99.9%」、「五個9」來衡量。
影響
- 業務連續性
- 用戶信任度
設計策略
- 高可用架構(雙機熱備、主備切換)
- 容災設計(跨機房部署、跨云部署)
- 自動故障轉移(Auto Failover)
- 心跳檢測+健康檢查
- 灰度發布、滾動升級
常見模式
- 冗余(Redundancy)
- 集群(Cluster)
- 冗錯處理(Fault Tolerance)
可靠性(Reliability)
定義
系統能在特定時間段內,持續正確運行,無故障出錯。
影響
- 數據一致性
- 服務穩定性
設計策略
- 冪等性設計(重復請求不會出錯)
- 重試機制(帶指數退避)
- 服務超時+超時重試
- 分布式事務控制(TCC、SAGA)
常見模式
- 三權分立架構(隔離控制、數據、業務)
- 最終一致性(如BASE理論)
可維護性(Maintainability)
定義
系統容易修改、擴展、排查、修復的能力。
影響
- 研發效率
- 上線速度
- Bug修復時間
設計策略
- 良好的模塊化(高內聚,低耦合)
- 代碼規范、架構規范
- 日志可追蹤、統一監控
- 統一異常處理機制
- 自動化測試
常見模式
- 微服務(Microservices)
- 分層架構(Layered Architecture)
- 插件式架構(Plugin Architecture)
安全性(Security)
定義
保護系統資源免受未授權訪問或破壞的能力。
影響
- 法規合規(GDPR、等保)
- 公司信譽
設計策略
- 身份認證(OAuth2.0、JWT)
- 權限控制(RBAC、ABAC)
- HTTPS加密
- 防護策略(防SQL注入、防XSS、防CSRF)
- 審計日志記錄
常見模式
- 零信任架構(Zero Trust Architecture)
- 最小權限原則(Principle of Least Privilege)
可擴展性(Scalability)
定義
系統在業務增長、用戶量增加時,能夠順利擴展的能力。
影響
- 系統生命周期
- 成本控制
設計策略
- 水平擴展(scale-out)優先
- 無狀態設計(Stateless)
- 動態伸縮(Auto Scaling)
- 分布式計算(MapReduce、Spark)
常見模式
- 微服務架構
- 分布式緩存(Redis Cluster)
可測試性(Testability)
定義
系統能夠被有效地驗證和驗證改動是否正確的能力。
影響
- 質量保障
- 迭代速度
設計策略
- 單元測試(Unit Test)
- 接口測試(API Test)
- 自動化測試(CI/CD集成測試)
- Mock、Stub測試
- 分層測試(金字塔測試模型)
常見模式
- TDD(Test Driven Development)
- Mocking Pattern
可部署性(Deployability)
定義
系統新版本發布、回滾的便利性和穩定性。
影響
- 發布風險
- 運維成本
設計策略
- 容器化(Docker/K8s)
- 灰度發布、藍綠部署
- 無停機部署(Zero Downtime Deployment)
- 回滾機制
常見模式
- DevOps流程
- GitOps部署模式
其他質量屬性(補充)
質量屬性 | 簡單說明 |
---|---|
可移植性(Portability) | 系統能否輕松運行在不同環境上 |
國際化(Internationalization) | 是否支持多語言、多幣種 |
節能性(Energy Efficiency) | 系統資源利用率,能耗控制 |
合規性(Compliance) | 是否符合行業規范、法律要求 |
互操作性(Interoperability) | 能否與第三方系統集成 |
質量屬性與架構設計映射表
質量屬性 | 對應的架構設計實踐 / 策略 |
---|---|
性能(Performance) | - 負載均衡(Nginx、HAProxy) - 緩存(Redis、本地緩存) - 異步處理(MQ、異步編程) - 數據庫優化(讀寫分離、分庫分表) - 前端性能優化(CDN、懶加載) |
可用性(Availability) | - 雙活部署、主備切換 - 心跳檢測+健康檢查 - 容災設計(跨機房、跨地域) - 負載均衡故障轉移 |
可靠性(Reliability) | - 冪等設計 - 自動重試+超時處理 - 日志追蹤 - 容錯機制(如斷路器模式) |
可維護性(Maintainability) | - 模塊化設計(DDD、清晰邊界) - 單一職責原則(SRP) - 自動化測試覆蓋 - 標準化日志/監控體系 |
安全性(Security) | - 身份認證(OAuth2.0、SSO) - 接口鑒權(JWT、API Key) - 數據加密(傳輸+存儲) - 防護措施(防SQL注入/XSS/CSRF) - 最小權限原則 |
可擴展性(Scalability) | - 無狀態服務(Stateless) - 微服務架構 - 服務拆分+數據庫拆分 - 動態水平擴展(Auto Scaling) |
可測試性(Testability) | - 單元測試、集成測試、端到端測試(E2E) - 測試金字塔設計 - Mock/Stub/Spy技術 - 接口可模擬 |
可部署性(Deployability) | - 容器化部署(Docker/Kubernetes) - 藍綠部署、灰度發布 - 自動化部署(CI/CD流水線) - 快速回滾機制 |
可移植性(Portability) | - 容器編排(K8s、Docker Compose) - 云中立設計(避免廠商鎖定) - 抽象平臺層(Platform Abstraction) |
節能性(Energy Efficiency) | - 資源彈性伸縮(如按需啟動實例) - 低功耗算法優化 - 服務按量自動關停/啟用 |
互操作性(Interoperability) | - 標準化接口(RESTful、gRPC) - API網關(API Gateway) - 使用開放標準(OAuth、OpenID、SOAP等) |
常用設計模式與質量屬性快速對照表
設計模式 | 主要改善的質量屬性 |
---|---|
負載均衡(Load Balancer) | 性能、可用性 |
微服務架構(Microservices) | 可擴展性、可維護性 |
熔斷器模式(Circuit Breaker) | 可靠性、可用性 |
分層架構(Layered Architecture) | 可維護性、可擴展性 |
事件驅動架構(EDA) | 性能、可擴展性 |
服務注冊與發現(Service Discovery) | 可擴展性、可部署性 |
零信任安全(Zero Trust) | 安全性 |
讀寫分離(Read/Write Splitting) | 性能、可靠性 |
常見系統對應質量屬性優先級表
系統類型 | 質量屬性優先級(高 → 低) | 備注說明 |
---|---|---|
支付系統(如微信支付、支付寶) | 安全性 > 可靠性 > 可用性 > 性能 > 可維護性 | 安全第一(資金安全至上),然后要確保交易正確、不中斷。 |
電商系統(如淘寶、京東) | 性能 > 可擴展性 > 可用性 > 可靠性 > 安全性 | 雙11秒殺場景,性能和擴展性壓倒一切,安全重要但次之。 |
實時聊天系統(如微信、Slack) | 可用性 > 性能 > 可靠性 > 安全性 > 可維護性 | 保證實時溝通不中斷,秒開秒發,安全在可接受范圍內保證。 |
視頻監控系統(如安防攝像頭平臺) | 實時性 > 可用性 > 可擴展性 > 可靠性 > 性能 | 實時流暢直播最重要,能容忍少量數據丟失(如低延時優先)。 |
SaaS管理系統(如企業ERP/CRM) | 可維護性 > 可擴展性 > 可用性 > 安全性 > 性能 | 業務變化快,需要靈活維護、快速上線,性能一般要求不極端。 |
大數據平臺(如Hadoop/Spark平臺) | 可擴展性 > 性能 > 可靠性 > 可維護性 > 安全性 | 處理海量數據,擴展性壓倒一切,其次是計算效率。 |
游戲后端(如王者榮耀服務器) | 性能 > 可用性 > 安全性 > 可靠性 > 可維護性 | 游戲體驗感最重要,卡頓/延遲直接影響用戶流失。 |
在線教育平臺(如慕課網、學而思) | 可用性 > 性能 > 安全性 > 可維護性 > 可擴展性 | 要求穩定流暢,體驗感良好,數據保護(隱私)也很重要。 |
IoT物聯網平臺(如智能家居中心) | 可靠性 > 可擴展性 > 安全性 > 性能 > 可維護性 | 設備多、環境復雜,首先要保證設備間穩定通信。 |
短視頻平臺(如抖音、快手) | 性能 > 可用性 > 可擴展性 > 安全性 > 可維護性 | 視頻播放流暢最重要,秒開秒播是基本要求。 |
總結
每個系統架構都是一場關于質量屬性的權衡和妥協。
通常選2~3個最重要的質量屬性作為設計重點,比如:
- 金融系統:安全性 > 可用性 > 可靠性
- 電商系統:性能 > 可擴展性 > 可維護性
- 視頻監控系統:實時性 > 可用性 > 可擴展性