架構特性的範圍#

傳統上,架構特性被視為系統級別的屬性——例如討論 scalability 時,通常指整個系統的可擴展性。然而隨著 microservices 等現代架構風格的興起,架構特性的範圍已大幅縮小。本章引入 architecture quantum 概念,重新定義架構特性的適用範圍。


Coupling 與 Connascence#

傳統耦合度量的局限#

傳統的 code-level coupling 指標(如 afferentefferent coupling)過於細粒度,不適合架構層級的分析。

Connascence(共生性)#

1996 年 Meilir Page-Jones 提出了 connascence 的概念:

若兩個元件中的一個發生變更,另一個也必須修改以維持系統整體正確性,則稱這兩個元件具有 connascence。

Connascence 分為兩大類:

  • Static connascence(靜態共生性):可透過靜態程式碼分析發現
    • 例如:兩個 microservices 共享同一個 class 定義(如 address),改變該 class 需要兩邊同步修改
  • Dynamic connascence(動態共生性):涉及執行時期行為
    • Synchronous(同步):呼叫方等待被呼叫方的回應
    • Asynchronous(非同步):fire-and-forget 語義,允許服務在運營特性上有所不同

同步呼叫在分散式服務之間建立了動態共生性——在等待期間,雙方的運營架構特性必須一致。非同步通訊則能解耦這種約束,提供更大的架構彈性。


Architectural Quanta 與 Granularity#

元件層級的耦合不是唯一將軟體綁定在一起的因素。許多業務概念會語義上將系統的部分綁定在一起,形成 functional cohesion(功能內聚)。

Architecture Quantum 的定義#

Architecture quantum:一個具有高功能內聚(high functional cohesion)和同步共生性(synchronous connascence)的獨立可部署產出物(independently deployable artifact)。

此定義包含三個關鍵部分:

Independently deployable(獨立可部署):

  • Architecture quantum 包含運作所需的所有元件,可獨立於架構的其他部分運行
  • 若應用程式使用資料庫,該資料庫即為 quantum 的一部分
  • 傳統單體應用(使用單一資料庫)天然形成一個 quantum
  • Microservices 中每個服務包含自己的資料庫,形成多個 quanta

High functional cohesion(高功能內聚):

  • Cohesion 指元件內程式碼在目的上的統一程度
  • 高功能內聚意味著 architecture quantum 執行有意義的業務功能
  • 在 microservices 中,開發者通常將每個服務設計為對應單一 workflow(即 DDD 的 bounded context

Synchronous connascence(同步共生性):

  • 指 quantum 內或組成 quantum 的分散式服務之間的同步呼叫
  • 若一個 microservice 同步呼叫另一個,雙方在呼叫期間的運營特性必須一致
  • 例如:caller 的 scalability 遠高於 callee 時,會產生 timeout 和 reliability 問題

Figure 7.1: Adding quantum connascence to the unified diagram


Domain-Driven Design 的 Bounded Context#

Eric Evans 的 Domain-Driven Design (DDD) 定義了 bounded context 概念:

  • 與 domain 相關的一切在內部可見,但對其他 bounded context 不透明
  • 避免跨組織共享通用實體(如統一的 Customer class),減少耦合和協調複雜度
  • 每個問題領域可建立自己的實體,在整合點協調差異

Architecture quantum 概念為架構特性提供了新的範圍。在現代系統中,架構師應在 quantum 層級而非系統層級定義架構特性。


案例研究:Going, Going, Gone#

以線上拍賣公司為例,分析 architecture quantum 如何影響架構決策:

需求分析#

  • 全國規模拍賣,每場拍賣可達數百至數千名參與者
  • 拍賣需盡可能即時
  • 競標者以信用卡註冊,得標後自動扣款
  • 參與者須透過信譽指數追蹤
  • 競標者可觀看即時影像串流和所有出價
  • 線上與現場出價須按時序接收

架構特性識別#

分析各項需求可得出以下架構特性:

  • ScalabilityElasticity:支援大量使用者和拍賣的突發性流量
  • Performance:即時拍賣的本質要求
  • Security:信用卡處理 + 過去的詐騙訴訟
  • ReliabilityAvailability:拍賣師端尤其重要,連線中斷將是災難性的

識別出的 Quanta#

透過 architecture quantum 分析,可識別出不同部分需要不同的架構特性:

Bidder Feedback(競標者回饋):

  • 包含出價串流和影像串流
  • Availability、Scalability、Performance

Auctioneer(拍賣師):

  • 現場拍賣師
  • Availability、Reliability、Scalability、Elasticity、Performance、Security

Bidder(競標者):

  • 線上競標者和出價
  • Reliability、Availability、Scalability、Elasticity

不同 quanta 有不同的架構特性需求——這直接挑戰了「架構特性是系統級別」的傳統假設,並引導架構師走向 hybrid architecture 的設計方向。