資料中心筆記#01:初版技術架構成形

資料中心筆記#01:初版技術架構成形
Photo by Jakub Żerdzicki / Unsplash

在上篇的 POC 之後,我們整理了一份內部報告,將問題拆成資料蒐集、基礎資料定義、資料量與查詢效能、權限治理、技術架構等幾個面向思考。
這份整理的目的,是先建立邊界,讓我們從發散與模糊,逐步走向具體且聚焦。

在這個基礎上,我開始把關注重點先轉向資料流:
如何讓資料自動、穩定、乾淨地進到分析效能較好的資料庫?

解題思考階段

這個階段,我主要在思考幾個問題:

  • 不同來源的資料,能不能用相對一致的方法接進來?
  • 雖然資料源不同,接收方式很難完全一致,但是否有機會收斂?初期是否可以先用一種主要方式處理(80/20 法則)?
  • 資料會持續累積,是否有合適的儲存與管理方案?
  • 資料進來後,分層應該怎麼定義?

前人的做法大多是將資料分成可追溯的原始資料(Stage)、清洗整理後的乾淨資料(Data)、整合不同維度需求的資料(Mart)。
延續這個方向大致不會錯,但在技術解決方案持續演進下,這些分層該定義在哪裡才更合適,仍需要驗證。

另外,查詢分析時是否有合適的查詢引擎,也是一個關鍵問題。
以可預見的資料量來看,依過去經驗,一般 RDB 在分析場景中能提供的效能提升有限。

整個過程投入了大量時間在不同工具間嘗試,但核心不走偏,仍是找出「合適、可掌握」的組合。
當下其實很難直接定義什麼是「合適」,因此我採取的是持續查找資料、反覆提問討論、參考他人的實務經驗,逐一建置並測試其可用性 (除了通常關注的 License,還包含了建置的難易、操作門檻、擴充彈性),同時評估自己對工具的掌握程度,以及未來維運能量是否能支應。

初版架構的輪廓

當時建構初版架構的核心目標,是找出一套能將「資料接收、資料分層、分析查詢」串起來的解決方案。
對應的資料流如下:

Source (PostgreSQL) -> CDC -> Iceberg (Stage / Data) -> Doris

在這個輪廓中,各層的職責是:

  • CDC:持續接收來源資料的變更事件
  • Stage:保存原始資料,確保可追溯
  • Data:整理與轉換後的可用資料層
  • Doris:面向分析查詢與報表輸出的服務層

當時選擇的主要元件如下,也一併記錄背景理解與用途:

Debezium
背景:常見的 CDC(Change Data Capture)工具,可以從資料庫變更日誌抓資料。
用途:讓資料跟著來源變更流動。

Kafka
背景:事件串流平台,適合承接持續進來的資料變更事件。
用途:作為資料流中間層,解耦來源系統與下游處理。

Iceberg
背景:資料湖表格式,支援大型資料管理與演進。
用途:分成 Stage/Data 兩層,讓原始資料與整理後資料分開管理。

Spark
背景:分散式資料處理引擎。
用途:負責將 Stage 的資料整理到 Data 層,執行轉換邏輯。

Doris
背景:負責分析查詢的 OLAP 引擎。
用途:承接整理後資料,提供查詢與報表分析能力。

部署上,除了 Doris 遵循工作環境規則建置在 VM,其餘元件與作業多基於 K8s 建置。
剛開始接觸 K8s 時,因不熟悉而遇到不少困難;但在持續 try and error 的實踐後,我也逐步建立理解,為後續部署與運行定義一致的環境與方法,打下了不錯的基礎。

POC 帶來了什麼

初版技術架構 POC 的價值,在於資料接收可以沿著設計的架構一路串接。
這對於透過技術路徑逐步落地資料中心,帶來了不少信心。

同時,在實際資料應用的過程裡,也幫助我們看見需要調整與修正的地方。
在架構準備擴大應用前,我們也盡可能先辨識可預見的維運成本,並提前思考如何降低。

Read more

資料中心筆記 #0:在變得具體之前

資料中心筆記 #0:在變得具體之前

目標要做資料中心,一開始我不是很能夠想像這件事該長成什麼樣子,有很多疑問需要找到答案。 做到什麼程度算是資料中心? 我們期待它能解決什麼、幫助到誰? 它是不是應該包含一套接收資料的方法、能儲存大量資料的資料庫、提供資料服務的能力?   那麼,它是一個平台嗎?該用什麼技術?有哪些其實現在不需要?又該怎麼做,才能保留未來需要的彈性? 這些問題在當下其實都沒有辦法很快有肯定又具體的答案。好像每一個點都應該被考慮到,但同時又覺得過於理想。那段時間,我甚至開始嘗試透過與 AI 的對話,把模糊的想法拆解成可以被檢視的問題。它沒有辦法替我做決定,但確實加速了我理解自己在問什麼。 只是,在理解問題的過程,即使把想法轉化輸出成一張張架構圖,進展卻不是太明顯,反而有一種腳步浮浮的、始終沒踩在地上的感覺,沒有讓事情真正往前走,我們仍然缺少可以被驗證的起點。 在這樣的狀態下,老闆很快地拋出先做個 POC 的想法,把資料拉進來看看,先驗證價值,再決定如何往下走。 現在回頭看,其實是一個很關鍵的引導,它讓想像的目標被驗證、被修正,逐漸轉化成具體,對我而言,是一次「以終為始」的實踐。 POC

By Jo
筆記 | 自架 Ghost 的 SMTP 設定

筆記 | 自架 Ghost 的 SMTP 設定

部落格荒廢了好一段時間,近期終於想用手機登入管理介面留下些草稿,突然發現無法登入,登入鈕下方出現了如下的一段訊息 EmailError: Failed to send email. Please check your site configuration and try again. 結論先行,原因是我安裝的 ghost 版本,在首次使用新裝置登入時需要 2FA (二階段驗證),也就是說,除了帳號密碼登入之外,還會有一層驗證機制,而這層驗證機制需要輸入 6 碼驗證碼 (Ghost 站台發給登入者註冊信箱的 mail 會提供)。我當時建置 Ghost 時認為自己不會發送電子報,就忽略了 SMTP 的設定,導致 Ghost 站台不能正常發信,在配置好 SMTP 設定後,從新裝置就能正常登入了。 前一篇文章提到我的 Ghost 是架設在

By Jo
部落格遷移紀錄

部落格遷移紀錄

是的,又搬家了。 這次搬家像是一種重新開始,遷移的範圍稍微大些,大致上有三段變動: * 從功能豐富的 WordPress 到簡潔高效的 Ghost * 從 SugarHosts 搬遷到 Google Cloud Platform (GCP),最後搬移到 zeabur Wordpress 的功能非常豐富,只是我使用到的部分極少,總想找個簡潔的服務使用,但忙碌的工作很快就澆熄了動力。一次在輸出小組群組中的討論,注意到 Ghost 這個部落格平台,試裝操作看看,體驗還不賴,想著我的文章數也很少 (心虛),就搬吧! 推進這個改變的契機,一部分也來自於 SugarHosts 自 2024 年底在網路社群中的討論,其中也包含了客服過久沒有回應的議題,SugarHosts 的價格真的很有吸引力,只是客服回應效率突然的落差,讓我開始擔心這是否對影響到部落格,開始思考搬家的可能,實際上身邊的朋友也愈來愈多人遇到類似情況,甚至站台無法再使用,措手不及使得只能使用較早期的備份來拯救文章。 我在年假期間利用 GCP 的試用額度來架設

By Jo
筆記 | Ubuntu 掛載磁碟

筆記 | Ubuntu 掛載磁碟

最近在 GCP 試玩 Compute Engine (VM),建立時另外新增了一顆磁碟,實際運行了才發現,原來需要自行掛載,記錄執行的指令與過程。 以 Ubuntu 22.04 為例 (多數的 Linux 應該也可以使用) 確認新增的磁碟是否存在 lsblk 大多情況應該會看到新的磁碟還沒有掛載任何分區 格式化 (如果硬碟還沒有格式化) sudo mkfs.ext4 /dev/sdb 配置自動掛載 取得新磁碟的 UUID sudo blkid /dev/sdb 一般會顯示類似以下的結果 /dev/sdb: UUID="一串由-符號串接的英數字" BLOCK_SIZE="4096" TYPE="ext4&

By Jo