如何從架構角度應對複雜性?

banq發表於2024-12-25

軟體系統中的複雜性永遠不會真正消失。就像物理學中的能量一樣,它不能被摧毀——只能被轉化、重定向或重新分配。我們做出的每一個架構決策要麼會轉移複雜性,要​​麼會改變其形式。

我們可以做的是影響這種複雜性如何體現並影響我們的系統。正如降噪技術不會消除聲波而是引入抵消模式一樣,我們的架構決策可以放大或抑制系統中波動的複雜性波。

並非所有的複雜性都是平等的:

  • 有些複雜性自然而然地從問題領域中浮現出來:我們正在解決的業務問題的本質複雜性。這是我們必須接受和理解的複雜性。這是我們需要清晰聽到的聲音。
  • 然後是偶然的複雜性:相當於不必要的噪音。這來自我們的解決方案、我們的選擇、我們的工具,有時甚至來自我們組織本身。這是我們可以而且應該積極管理的複雜性。

我們做出的每一個架構決策都會對不同型別的複雜性起到放大器或阻尼器的作用。

考慮一下我們探索過的不同模式如何影響複雜性:

抑制複雜性的模式

  • 反腐敗層隔離複雜性波,防止其在整個系統中傳播
  • 已釋出的語言使通訊標準化,降低了整合的複雜性
  • 劃定的界限上下文包含明確定義的邊界內的複雜性

放大複雜性模式(誤用時)

  • 共享核心可以透過跨邊界建立緊密耦合來放大複雜性
  • 大泥球透過不受限制的相互作用放大了複雜性
  • 過早推出的微服務會以更難管理的方式分散複雜性,例如,當從程序轉移到網路時,不明確的通訊模式會被大大放大。

複雜性的三個維度
複雜性體現在我們系統的不同方面:

  • 協調複雜性:我們組織工作和管理依賴關係的方式可以減弱或增強複雜性。康威定律不僅僅是一種觀察——它是一種我們必須積極管理的複雜性關係。
  • 溝通複雜性:我們選擇的資訊流模式對系統複雜性有著深遠的影響。同步與非同步、點對點與廣播——每種選擇都有其自己的複雜性特徵。
  • 一致性複雜性:我們如何跨系統邊界維護事實,既可以簡化我們的架構,也可以使其複雜化。有時,接受最終一致性可以大大降低系統複雜性。

組織複雜性:隱藏的放大器
最強大的複雜性調節器之一根本不是技術性的,而是組織性的。

康威定律的作用是雙向的:

  • 組織可能會因團隊結構不協調而加劇複雜性
  • 他們可以透過邊界設計團隊拓撲撲協調來抑制這種現象。

結論:
目標不是消除複雜性,而是有意識地管理複雜性。每次你認為已經消除了複雜性時,都要檢查它實際上可能轉移到了哪裡。有時看似複雜性降低實際上只是複雜性重新分配。

隨著我們進一步探索不同的架構風格和模式,我們將研究每種風格和模式如何處理複雜性:

  • 整體架構如何集中複雜性管理
  • 分散式架構如何跨不同維度分散複雜性
  • 隨著系統的發展,進化架構模式如何幫助我們管理複雜性

就像國際象棋大師會提前思考幾步一樣,架構師必須考慮今天的複雜性決策將如何影響明天的選擇。每個架構選擇都會開啟一些路徑,同時關閉其他路徑,而這些決策的真正影響通常只有在系統演進的幾步之後才會顯現出來。

架構的成功不在於消除複雜性,而在於:

  1. 認識到哪些複雜性對你的領域至關重要
  2. 選擇系統中複雜性存在的位置
  3. 瞭解不同模式如何影響複雜性流動
  4. 管理不同型別的複雜性之間的權衡

相關文章