架構定義與 4R 模型#

「架構」是技術人員最常聽到的詞彙之一,但真正能準確定義它的人並不多。本章將釐清架構的核心概念,建立清晰的認知框架。

三組容易混淆的概念#

系統與子系統#

系統的三個關鍵特徵:

  1. 關聯:由一群有關聯的個體組成
  2. 規則:個體按照指定的規則協作
  3. 能力:產生個體不具備的新能力

子系統就是更大系統中的一部分。微信是一個系統,包含聊天、支付、朋友圈等子系統;朋友圈又包含動態、評論、點贊等子系統。

關鍵理解:一個系統的架構只包括頂層這一個層級,不包括下屬子系統的架構。

模塊與組件#

兩者都是系統的組成部分,但拆分的角度不同:

概念拆分角度目的範例
模塊業務邏輯職責分離登錄模塊、訂單模塊
組件物理部署單元復用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:角色協作的規則