架構定義與 4R 模型#
「架構」是技術人員最常聽到的詞彙之一,但真正能準確定義它的人並不多。本章將釐清架構的核心概念,建立清晰的認知框架。
三組容易混淆的概念#
系統與子系統#
系統的三個關鍵特徵:
- 關聯:由一群有關聯的個體組成
- 規則:個體按照指定的規則協作
- 能力:產生個體不具備的新能力
子系統就是更大系統中的一部分。微信是一個系統,包含聊天、支付、朋友圈等子系統;朋友圈又包含動態、評論、點贊等子系統。
關鍵理解:一個系統的架構只包括頂層這一個層級,不包括下屬子系統的架構。
模塊與組件#
兩者都是系統的組成部分,但拆分的角度不同:
| 概念 | 拆分角度 | 目的 | 範例 |
|---|---|---|---|
| 模塊 | 業務邏輯 | 職責分離 | 登錄模塊、訂單模塊 |
| 組件 | 物理部署 | 單元復用 | Nginx、MySQL、Redis |
以學生管理系統為例:
- 模塊視角:登錄注冊模塊、個人資訊模塊、成績模塊
- 組件視角:Nginx、Web 伺服器、MySQL
框架與架構#
| 概念 | 關注點 | 範例 |
|---|---|---|
| 框架 | 規範(如何組織程式碼) | MVC、MVP、Spring |
| 架構 | 結構(系統如何組成) | 微服務架構、分層架構 |
框架是一整套開發規範,架構是某套規範下的具體落地方案,包括各個模塊之間的組合關係和協作規則。
4R 架構定義#
綜合以上分析,架構可以定義為:
軟件架構指軟件系統的頂層(Rank)結構,它定義了系統由哪些角色(Role)組成,角色之間的關係(Relation)和運作規則(Rule)。
Rank(層級)#
軟件架構是分層的,對應「系統」和「子系統」的分層關係。
L0: 微信系統
├── L1: 聊天子系統
├── L1: 支付子系統
│ ├── L2: 收款功能
│ ├── L2: 付款功能
│ └── L2: 紅包功能
└── L1: 朋友圈子系統設計原則:自頂向下,逐步細化。每次只關注一個層級,最多展示相鄰兩層。
Role(角色)#
系統由哪些角色組成,每個角色負責一部分功能。
架構設計的核心工作之一就是將系統拆分為多個角色。 常見的微服務拆分就是按業務領域將系統拆分為多個微服務,每個微服務就是一個角色。
Relation(關係)#
角色之間的關係,對應架構圖中的連接線。任何關係最終都需要程式碼實作:
- 連接方式:HTTP、TCP、gRPC
- 資料協議:JSON、Protobuf、XML
- 具體接口:API 定義
Rule(規則)#
角色之間如何協作完成系統功能。系統能力不是個體能力之和,而是產生了新的能力,Rule 描述的就是這個新能力如何實作。
表達方式:
- Rank、Role、Relation → 系統架構圖
- Rule → 系統序列圖(System Sequence Diagram)
4R 架構圖範例:簡化的支付系統
系統架構圖(展示 Rank、Role、Relation):
flowchart TB
subgraph 支付系統
A[訂單服務] --> B[支付服務]
B --> C[賬戶服務]
A --> D[風控服務]
B --> D
C --> D
end系統序列圖(展示 Rule,以「掃碼支付」為例):
sequenceDiagram
participant U as 用戶
participant M as 商家App
participant O as 訂單服務
participant P as 支付服務
participant R as 風控服務
participant A as 賬戶服務
U->>M: 掃碼
M->>O: 創建訂單
O->>P: 發起支付
P->>R: 風控檢查
R-->>P: 通過
P->>A: 扣款
A-->>P: 成功
P-->>O: 支付成功
O-->>M: 支付成功
M-->>U: 完成架構的多視角#
同一個系統可以從不同角度描述架構:
| 視角 | 關注點 | 範例 |
|---|---|---|
| 業務邏輯 | 功能模塊劃分 | 用戶模塊、訂單模塊、支付模塊 |
| 物理部署 | 組件與節點 | Nginx、Tomcat、MySQL、Redis |
| 開發規範 | 程式碼組織方式 | MVC 架構、DDD 架構 |
這就是為什麼 IBM RUP 將軟件架構視圖分為著名的 4+1 視圖:
- 邏輯視圖
- 開發視圖
- 進程視圖
- 物理視圖
- 場景視圖(+1)
畫架構圖時,先明確是從哪個視角來畫。混合多個視角會讓圖變得混亂難懂。
本章小結#
- 系統:由關聯的個體按規則協作,產生新能力
- 模塊 vs 組件:業務視角 vs 物理視角
- 框架 vs 架構:規範 vs 結構
- 4R 模型:
- Rank:架構是分層的
- Role:系統由角色組成
- Relation:角色之間有關係
- Rule:角色協作的規則