重點摘要#
- 現代系統是分散式且鬆耦合的,控制狂式架構已過時
- 彈性系統會隨時間變化,文件在印出的那一刻就已過時
- 透過觀察、模型提取和驗證來取代直接控制
- 採用「反向 MDA」思維:建立彈性架構,從實際系統狀態中提取模型
詳細內容#
今天的系統是分散式且鬆耦合的。建立鬆耦合系統雖然麻煩,但這是必要的——因為我們希望系統有彈性,不會因微小的變化就崩潰。在現代環境中,我們可能只控制應用程式的一小部分,其餘部分存在於分散式服務或第三方套件中。
彈性與文件的矛盾#
建立能隨時間演進的彈性系統是好主意,但這也意味著「今天的系統不是昨天的系統」。這使得文件記錄極具挑戰性——文件在印出的那一刻就已過時。更糟的是,彈性系統通常更複雜,更難掌握全局圖景。
向邏輯通道發送訊息不太可能觸發編譯器錯誤,但一定會讓期望該訊息執行動作的使用者失望。
觀察的工具#
不要試圖控制一切,而是用其他機制來補充:
- 反射(Reflection):現代程式語言支援反射機制
- 執行時期指標(Runtime Metrics):幾乎所有執行平台都提供
- 系統配置:隨系統變得更可配置,當前配置成為重要的資訊來源
- 模型提取:從原始數據中提取模型,例如追蹤哪些元件向哪些邏輯通道發送訊息,建立元件間實際通訊的圖形模型
反向 MDA#
可以把這想成「Reverse MDA」(Model Driven Architecture 的反向操作)。不是用模型驅動架構,而是建立彈性架構後,從實際系統狀態中提取模型。這可以每隔幾分鐘或幾小時做一次,提供精確且即時的系統影像。
視覺化模型時,使用 1000 英尺高度的視角(如 Erik Doernenburg 所述),而非包含每個類別的 3x5 米巨型看板。此外,確保模型通過基本驗證規則,例如依賴圖中沒有循環依賴、沒有訊息被發送到無人監聽的通道。
放手控制是一件可怕的事,即使對系統架構而言也是如此。但透過觀察、模型提取和驗證來補充,這可能是 21 世紀架構的唯一出路。
— By Gregor Hohpe