重點摘要#
- 理想的系統屬性往往三者不可兼得,接受約束反而可能帶來更好的架構
- CAP 定理是經典範例:一致性、可用性、分區容錯性只能選其二
- 不要把系統屬性當作不可侵犯的教條,而要問「為什麼」和「何時」需要
- 接受取捨的必然性,往往能激發更有創意的解決方案
詳細內容#
有時候接受一個約束或放棄某個屬性,反而能帶來一個更好的架構——更容易建構和運行。理想的屬性往往三個一組出現,試圖建構一個同時支援三者的系統,結果往往是什麼都做不好。
CAP 定理#
一個經典的例子是 Brewer 猜想,也稱為 CAP 定理(Consistency, Availability, Partitioning):
- 一致性(Consistency)
- 可用性(Availability)
- 分區容錯性(Partition Tolerance)
在分散式系統中,這三個屬性不可能同時完全達成。試圖三者兼得只會大幅增加工程成本和複雜性,卻無法真正達到預期的效果或商業目標。
教條主義的危險#
人們常常將某些屬性視為不可侵犯的:資料不能有重複、所有寫入必須是交易式的、系統必須 100% 可用、不能有單點故障、一切都必須可擴展……
將屬性當作宗教教條來對待,會阻止你思考手頭的問題。我們開始談論「架構偏差」而非「有原則的設計」,混淆了教條主義和良好治理。
正確的態度#
應該問的是:
- 為什麼這些屬性必須成立?
- 這樣做有什麼好處?
- 何時這些屬性是可取的?
- 如何打破系統以獲得更好的結果?
取捨的必然性是軟體開發中最難接受的事情之一。但我們應該珍惜取捨,因為它遠比擁有無限選擇要好——接受取捨往往能激發出創意和發明。
— By Bill de hOra