重點摘要#

  • 架構設計的核心是權衡取捨(tradeoffs) — 你不可能什麼都要
  • 試圖滿足每一個需求,會創造出一個不穩定的架構,最終什麼都做不好
  • 瑞典戰艦 Vasa 的故事是架構失衡的經典警示
  • 架構師應善用 ATAMCBAM 等方法來系統化地評估權衡

詳細內容#

每位軟體架構師都應該知道並理解:你不可能什麼都要。要設計一個同時具備高效能、高可用性、高安全性和高度抽象的架構,幾乎是不可能的。

Vasa 號的教訓#

1620 年代,瑞典與波蘭交戰。瑞典國王下令建造一艘名為 Vasa 的戰艦。這不是一般的船 — 它的需求是:超過 200 英尺長、在兩層甲板上搭載 64 門大砲、能安全運送 300 名士兵穿越波羅的海。時間緊迫,預算有限(聽起來很熟悉吧?)。

船的架構師從未設計過這樣的船。他擅長的是較小的單層甲板船。儘管如此,他根據過去的經驗進行推斷,開始設計和建造 Vasa 號。

當 Vasa 號下水時,它驕傲地駛入港口、鳴放禮砲,然後立即沉入了海底

問題很明顯:試圖同時建造一艘戰鬥艦和運兵船,結果創造了一艘不平衡且不穩定的船。架構師為了滿足國王的所有願望,最終什麼都做不好。

對軟體架構的啟示#

軟體架構師可以從這個故事學到很多。試圖滿足每一個需求(就像 Vasa 號一樣),會創造出一個本質上不穩定的架構,最終什麼都做不好。

有幾種系統化的方法可以幫助架構師評估權衡:

  • Architecture Tradeoff Analysis Method (ATAM) — 架構權衡分析法
  • Cost Benefit Analysis Method (CBAM) — 成本效益分析法

架構師的關鍵能力在於理解各種品質屬性之間的衝突,並做出明智的取捨決策,而非試圖同時最大化所有面向。

— By Mark Richards