重點摘要#

  • 單一資料模型、單一訊息格式、單一架構元件不可能同時服務好業務的所有部分
  • 在技術領域我們可以強制唯一性,但業務領域本質上是混亂且多面向的
  • 當子系統的非功能性屬性差異足夠大時,管理不一致的表示方式是可行的
  • 可以考慮借鑑資料倉儲中 ETL 和 data mart 的做法

詳細內容#

系統建構者經常驚訝地發現:單一資料模型、單一訊息格式、單一訊息傳輸方式 — 事實上,任何主要架構元件、政策或立場的單一版本 — 無法同樣好地服務業務的所有部分。

在技術領域,我們可以強制唯一性,這對我們來說很方便。但在業務領域,不一致、多面向、模糊、混亂的現實世界就會闖入。業務甚至不是在處理「世界」本身,而是在處理人們對世界不同部分的看法。

現實是不會因為你不再相信它就消失的。當業務演變時,混亂總會回來。

接受現實的多元性#

與其試圖用技術手段強制統一,不如面對混亂世界的現實,允許多個、不一致、重疊的表示方式、服務和解決方案

我們可以從資料倉儲的世界得到啟發:data mart 的結構通常是反正規化的,任意混合匯入和計算的值,呈現與底層資料庫非常不同的資料視圖。而天並不會因此塌下來。

關鍵洞察:當子系統的非功能性屬性差異足夠大時,這些差異就形成了一個邊界,在這個邊界上管理不一致的表示方式是可行的。例如交易處理與分析處理之間,有著完全不同的更新和查詢速率、不同的吞吐量、不同的變更速率和不同的資料量。

不要為了好玩而去複製表示方式或建立多重傳輸,但永遠要考慮根據非功能性參數來分解系統的可能性,這可能會揭示出對客戶更有利的多元解決方案。

— By Keith Braithwaite