好的資料架構怎麼設計:讀《Fundamentals of Data Engineering》Ch.3

· tech

#data-engineering#book-notes#architecture

上一篇給了生命週期的全貌(資料在做什麼);這一章問的是 —— 怎麼把承載它的系統設計得「好」? 這章最反直覺、也最該記住的一句話是:好的架構不是一張固定的藍圖,而是一個「用權衡換取彈性與可逆」的決策過程。 沒有最好的架構,只有在這個脈絡下相對好的取捨。

先把「架構」定義清楚

書的定義值得抄下來:資料架構是「為了支撐企業不斷演變的資料需求,透過審慎評估權衡、做出有彈性且可逆的決策,所設計出的系統」。 拆開看,關鍵字是三個:權衡(trade-offs)、彈性(flexible)、可逆(reversible)。

順帶釐清一組常被混用的詞:

  • 架構(Architecture)= 為什麼(why):為什麼這樣切系統、為什麼選這個取捨。
  • 工程(Engineering)= 怎麼做(how):把架構決策落地成能跑的東西。

這一章整本在談的是 why,不是 how。

好架構的九個原則

書借鏡 AWS / GCP 的 well-architected 框架,給了九條原則。我把它濃縮成一張表:

原則一句話
明智選用共用元件共用的東西(儲存、權限、監控)要選得讓全公司都受益
為失敗而設計假設東西一定會壞,先想好可用性、復原目標(RTO/RPO)
為可擴展而架構能水平擴、也能在不需要時縮回來
架構即領導架構師的產出不只是圖,是帶人做對的取捨
持續架構架構是動詞,不是一次性交付的文件
建立鬆耦合系統元件能各自獨立演進、抽換
做可逆決策盡量讓決策回得來
優先安全最小權限、零信任,安全是地基不是外掛
擁抱 FinOps雲端成本是一個要持續設計的變數

其中最該深挖、也最能改變你做決策方式的,是可逆決策鬆耦合這兩條。

核心一:可逆決策 —— 雙向門 vs 單向門

書借用 Jeff Bezos 的比喻:決策分兩種門。

  • 雙向門(可逆):走錯了能走回來。→ 決策可以快,試了不對就改。
  • 單向門(不可逆):一旦過去就很難回頭。→ 決策要慎重,值得多花時間評估。
雙向門(可逆) 現狀 新方案 回得來 → 決策可以快 單向門(不可逆) 現狀 新方案 ✕ 回不去 → 決策要慎重
好的架構盡量把決策設計成雙向門 —— 保留改主意的能力,就是保留未來的選項

書的主張是:好架構會盡量把決策設計成雙向門。 因為需求一定會變,而保留「改主意的能力」本身就是價值。實務上這對應到「別把自己鎖死」—— 別簽五年合約、別讓資料只活在某個專有格式裡、別讓一個選擇綁死後面十個。

核心二:鬆耦合 —— 元件能各自演進

緊耦合的系統,元件彼此糾纏,改一個就牽動全身;鬆耦合的系統,元件透過清楚的介面溝通,能各自獨立開發、部署、抽換。

緊耦合 糾纏成一塊 → 改一個動全身 鬆耦合 透過介面溝通 → 各自演進、可抽換
鬆耦合讓你能單獨換掉、升級、重寫某個元件,而不必動到其他

這跟 Kafka 解耦生產者與消費者是同一個精神 —— 把元件之間的依賴降到「一個清楚的介面」,系統就能局部演進而不全面重來。

棕地 vs 綠地

最後一個實用的區分:你是在棕地(brownfield)還是綠地(greenfield)上蓋?

  • 棕地:既有系統上改建。受限於現況、技術債、不能停機 —— 自由度低,但風險也具體。
  • 綠地:一張白紙。自由度高,但也容易過度設計、低估未知。

書的提醒很中肯:綠地的自由是雙面刃,別把「沒有包袱」當成「可以什麼都上」。

反思

「沒有最好的架構,只有取捨」是這章最該內化的一句

我越做越同意:架構的成熟,是從「找最佳解」轉向「講清楚取捨」。 新手問「哪個架構最好」,資深的人反問「在你的約束下,你願意拿什麼換什麼」。這跟我那張概念筆記 先確認痛點,再上重武器是同一條神經 —— 沒有脈絡的「best practice」是空話,所有選擇都該回到「這個痛、這個規模、這個團隊」來秤。書把這件事講成第一原則,我很買單。

可逆性,是我一直在買的「保險」

「盡量做雙向門」這條,其實我在很多篇都下意識實踐過。Medallion裡我堅持 Bronze 不可變、可重播 —— 那本質上就是在保留可逆性:原始資料還在,下游怎麼改都能重來。避免專有格式鎖定、保留原始層、別簽長約,這些都是同一招:用一點當下的成本,買未來改主意的權利。 需求一定會變,而可逆性就是你對「不確定」收的保費。

「架構即領導」「持續架構」—— 這兩條把架構從技術拉回人

我最意外的收穫,是書把「架構即領導」「持續架構」列為原則。它在說:架構不是某個資深工程師關起門畫完的圖,而是一個持續的、社會性的活動 —— 要帶著團隊一起做取捨、要隨需求演進、要被持續地溝通與修正。這跟我讀 Tech Leader 那個系列的體會接上了:好的技術決策從來不只是技術問題,是「怎麼帶一群人在不確定裡持續做對取捨」。架構畫在白板上只是開始,讓它活在團隊的共識裡,才是真功夫。