在分散式系統中,確保多個資料庫與快取系統之間的資料一致性一直是一個巨大的挑戰。許多工程師會嘗試使用 Dual Writes(雙寫),即同時將資料寫入資料庫與訊息佇列(如 Kafka),但這極易導致資料不一致。為了解決這個問題,業界常用的方案是 CDC (Change Data Capture,變更資料擷取),透過監控資料庫的日誌(Log)來同步狀態。
然而,當系統規模達到 DoorDash 這種等級時,傳統的 CDC 方案(如 Debezium)會遇到嚴重的瓶頸。本文將解析 DoorDash 如何設計一套名為 WAIL (Write-Ahead Intent Log,寫前意圖日誌) 的新架構,將「意圖」與「狀態」分離,以達成極高擴展性的資料同步。
傳統 CDC 的痛點與限制
傳統 CDC 通常依賴資料庫內建的日誌機制(例如 Postgres 的 Logical Replication 或 Cassandra 的 Commit Log)。這種模式在小規模時很方便,但在大規模環境下有四大問題:
第一,抽象化困難。不同資料庫的 CDC 語法與行為完全不同,平台團隊必須為每種資料庫寫不同的翻譯層,導致複雜度爆炸。
第二,擴展性與性能瓶頸。CDC 連接器通常與資料庫緊密耦合。在高併發壓力下,連接器會消耗大量 CPU,甚至影響資料庫本身的可用性(SLO)。
第三,生態系破碎。許多強大的功能(如 Exactly-once 語義)被鎖在商業付費版中,且不同連接器的成熟度參差不齊。
第四,脆弱性。一旦發生 Schema Change(資料結構變更),連接器很容易崩潰,而對於數 PB 等級的資料,重新掃描或回放日誌的成本極高。
WAIL 的核心設計理念:意圖與狀態分離
為了克服上述問題,DoorDash 提出了 WAIL 架構。其核心觀念在於:不要在日誌中儲存完整的狀態 Payload(資料內容),而僅儲存 Intent(意圖)。
所謂的 Intent,是指「誰在什麼時間對哪個 Key 做了什麼操作(Insert/Update/Delete)」,但不包含具體的變更數值。這樣做能讓資料契約(Data Contract)與同步機制解耦,即使資料結構改變,同步管線也不會因此崩潰。
WAIL 的三大關鍵組件
Dumb Producer (啞 producer / 代理層) 應用程式不再直接寫入資料庫,而是透過一個 Proxy(代理層)。這個 Proxy 被稱為 Dumb Producer,因為它不理解任何業務邏輯或資料模型。它只負責將兩件事同步執行:將 Intent 寫入 Kafka,並將資料寫入資料庫。
Smart Consumer (智能消費者) 這是系統中複雜度最高的地方。它從 Kafka 讀取 Intent,然後回頭去資料庫驗證該意圖是否真的已生效(Actualized)。驗證成功後,它會根據 Schema Repository(定義資料格式的倉庫)將最終狀態發送到 Event Bus。
Concurrency Backbone (併發骨幹) 為了確保能隨時擴展,WAIL 將所有組件之間的手遞交(Handoff)配置化。例如,如果某張表流量激增,可以單獨增加 Kafka 分區數、增加 Consumer 數量,或擴大 Proxy 的連接池,而不需要重新設計整個管線。
實務運作中的權衡與考量
在實作 WAIL 時,工程團隊面臨了幾個關鍵的工程決策:
關於失敗處理 對於 Dual Write 的失敗問題,WAIL 提供兩種模式讓開發者選擇。Transactional(事務模式)要求 Kafka 與資料庫必須同時成功,否則全部回滾;Independent(獨立模式)則允許 Kafka 寫入失敗但資料庫成功,適用於統計類等非關鍵資料。
關於 Read-Your-Write 語義 WAIL 引入了一個權衡:為了確保正確性,Consumer 必須在發送事件前回頭讀取一次資料庫以獲取最新狀態。這增加了資料庫的讀取壓力,但 DoorDash 透過將讀取請求導向 Read Replica(讀取副本)或專用資料中心來緩解此問題。
關於動態流量整形 (Traffic Reshaping) 當某些熱點表(Hot Table)造成 Noisy Neighbor(吵鬧鄰居)效應影響其他表時,WAIL 允許動態地將特定表的流量遷移到新的 Kafka Broker 與 Consumer 組合,而不需要停機。
總結
WAIL 將傳統 CDC 的「依賴資料庫日誌」轉變為「主動記錄意圖」。透過將 Producer 簡化、將複雜度移至 Consumer,並將 Schema 獨立管理,DoorDash 成功構建了一個與特定資料庫脫鉤、可隨需擴展的同步體系。
來源:infoq.com - Write-Ahead Intent Log: A Foundation for Efficient CDC at Scale
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。