重點摘要#

  • 每位架構師都應該知道並理解:你不可能擁有一切
  • 幾乎不可能設計出同時具備高效能、高可用性、高安全性和高抽象度的架構
  • Vasa 號戰艦的故事完美說明了試圖滿足所有需求的危險
  • 使用 ATAMCBAM 等方法來系統性地評估架構權衡

詳細內容#

每位軟體架構師都應該知道一個事實:你不可能什麼都要。設計一個同時具備高效能、高可用性、高安全性和高抽象度的架構,幾乎是不可能的。這是架構師必須理解並能向客戶和同事傳達的關鍵認知。

Vasa 號的教訓#

1620 年代,瑞典和波蘭正在交戰。瑞典國王下令建造一艘名為 Vasa 的船。這不是一艘普通的船 – 它的要求包括超過 200 英尺長、在兩層甲板上裝載 64 門大砲,並能安全運送 300 名士兵。時間緊迫、預算有限(聽起來是不是很熟悉?)。

船的建築師從未設計過這樣的船,他的專長是較小的單層甲板船。儘管如此,他根據過去的經驗推斷並開始設計建造。當船終於下水那天,它驕傲地駛入港口,發射禮砲,然後立刻沉入海底。

Vasa 號的問題顯而易見:試圖同時作為戰船和運輸船,建築師為了滿足國王的所有願望,創造了一艘不平衡且不穩定的船。

對軟體架構的啟示#

軟體架構師可以從這個故事中學到很多。試圖滿足每一個需求(就像 Vasa 號一樣)會創造出一個本質上什麼都做不好的不穩定架構。例如,要求 SOA 架構同時具備點對點解決方案的效能,通常需要繞過 SOA 的各種抽象層,最終創造出一個像義大利麵一樣混亂的架構。

評估權衡的工具#

有幾種工具可以幫助架構師系統性地確定架構的權衡:

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

理解並接受權衡是架構設計的本質。使用結構化的分析方法來做出明智的權衡決策,而不是試圖面面俱到。

— By Mark Richards