圖文詳解CDC技術,看這一篇就夠了!
點擊上方“服務端思維”,選擇“設為星標”
回復”669“獲取獨家整理的精選資料集
回復”加群“加入全國服務端高端社群「后端圈」
這篇文章是對變更數(shù)據(jù)捕獲 (CDC)?實踐的介紹,而不是對特定工具的深入探討。
假設我們正在構建一個簡單的 Web 應用程序。在大多數(shù)情況下,此類項目從最小的數(shù)據(jù)架構開始。例如,像 MySQL 或 PostgreSQL 這樣的關系數(shù)據(jù)庫足以處理和存儲許多用戶可以使用的數(shù)據(jù)。他們輸入查詢,更新它們,關閉它們,更正它們,通常會執(zhí)行許多操作。它可以是 CRM、ERP、自動銀行系統(tǒng)、計費系統(tǒng),甚至是 POS 終端,應有盡有。
但是,存儲在數(shù)據(jù)庫中的信息可能會引起許多第三方系統(tǒng)的興趣,通常是分析系統(tǒng)。企業(yè)需要了解存儲在該系統(tǒng)中的應用程序或其他實體的狀態(tài)——賬戶、存款、制造、人力資源等。數(shù)據(jù)幾乎在每項業(yè)務運營中都發(fā)揮著重要作用。因此,企業(yè)會定期生成報告,這些報告反映了企業(yè)感興趣的所有主要指標,并且是做出進一步管理決策所必需的。
報告和分析計算通常非常消耗資源。查詢可能需要數(shù)小時才能完成,這通常會嚴重影響從中檢索數(shù)據(jù)的系統(tǒng)的性能。另一個缺點是發(fā)送所有這些數(shù)據(jù)會給網(wǎng)絡帶來很大壓力。最后,基于該數(shù)據(jù)的業(yè)務決策由于查詢頻率而延遲。所以,如果你每晚更新數(shù)據(jù),那意味著你要到第二天才能知道昨天發(fā)生了什么。
如果系統(tǒng)有一個明確的負載減少時間段(例如在夜間),并且這段時間足以卸載所有必要的數(shù)據(jù)而不影響系統(tǒng)的主要活動——那么使用對 RDBMS 的直接查詢可能是一個可以接受的選項。但是,如果沒有減少負載的時期,或者分配的負載窗口不足以完全卸載整個更改的數(shù)據(jù)怎么辦?

在這里 CDC 流程來救援。顧名思義,變更數(shù)據(jù)捕獲只會捕獲數(shù)據(jù)中的變化,這是復制數(shù)據(jù)的 ETL 模式之一。它是一種確定我們感興趣的數(shù)據(jù)的機制,即跟蹤源數(shù)據(jù)庫中的更改并將其應用于目標數(shù)據(jù)庫或數(shù)據(jù)倉庫。并且在目標數(shù)據(jù)庫或數(shù)據(jù)倉庫中,我們可以進行所有類型的分析、報告生成等,甚至不會影響源數(shù)據(jù)庫的性能。
因此,用戶可以在不降低性能的情況下使用原始系統(tǒng),并且管理層可以隨時獲取他們做出管理決策所需的報告。

CDC
因此,CDC 的本質(zhì)——通過捕獲數(shù)據(jù)操作語言 (DML) 更改(插入/更新/刪除)的事實和更改的數(shù)據(jù)本身來為用戶表提供歷史更改信息。CDC 以可以在上游數(shù)據(jù)系統(tǒng)中復制的形式提取它們。用行話來說,這樣的數(shù)據(jù)也被稱為“delta”。
您可以將 CDC 視為一種機制,它不斷監(jiān)控原始數(shù)據(jù)系統(tǒng)的更改、提取它們并將它們分發(fā)到上游系統(tǒng)。Change Data Capture 通過近乎實時地實現(xiàn)數(shù)據(jù)的增量加載,排除了批量數(shù)據(jù)加載的過程。
那么,使用CDC如何解決我們提到的問題呢?
好吧,您沒有定期運行非常大的請求,因為您的負載率實際上是峰值負載行為不會高的,因此,您必須執(zhí)行網(wǎng)絡以確保及時發(fā)送您想要的所有數(shù)據(jù),而不是發(fā)送所有這些數(shù)據(jù)并最終因為數(shù)據(jù)是連續(xù)發(fā)布的,而且是為了小規(guī)模的數(shù)據(jù),您可以通過多個數(shù)據(jù)泄露更多的網(wǎng)絡正常運作,并且顯著地展示您的工作成果,讓您有不同的業(yè)務范圍。將數(shù)據(jù)發(fā)送到您的數(shù)據(jù)倉庫更新,因此倉庫中的數(shù)據(jù)是最新的,這是為了提供實時信息,以便根據(jù)數(shù)據(jù)業(yè)務決策。
變更數(shù)據(jù)操作數(shù)據(jù)中心是您最好的數(shù)據(jù)存儲方式。
提取增量
在分析也是倉庫、CRM、MDM hub、災難時間、提取事務的“delta”是它創(chuàng)建系統(tǒng)的架構任務,當有一段時間的并行操作時,遷移從一個系統(tǒng)的數(shù)據(jù)項目中的人常有任務交給另一個。
在早期,增量知道我們現(xiàn)在的整個問題列表更新了。將成為一個潛在的可能的結果,并且您可能會遺棄一些數(shù)據(jù)。

為了確保任何遺失這些數(shù)據(jù),但工程師還嘗試了對行進行控制,并得出了大致相同的結果——它可以工作,但它非常資源。不到。

所有的問題都隨著簡單的出現(xiàn)而得到解決。
是數(shù)據(jù)庫中的一種特殊過程。示例過程的特殊性類型,每次數(shù)據(jù)庫中的事件發(fā)生后,在示例中的 SQL 示例中的簡單示例被執(zhí)行。

所以,我們需要一個簡單的表來跟蹤所有的更改,以便為每個創(chuàng)建對象創(chuàng)建一個表,該表將用于更改。
但也有一個類——盡管現(xiàn)在表中的數(shù)據(jù)有任何變化,簡單簡單。但一些CDC產(chǎn)品仍然基于簡單。
CDC的現(xiàn)代方法
我們可以回想一下,數(shù)據(jù)庫實際上是事務性的,并且具有類似的數(shù)據(jù)庫日志(也稱為數(shù)據(jù)庫事務日志或事務日志)之類的功能。幾乎所有管理系統(tǒng)都有事務日志文件,記錄每個事務在我們需要做訪問事務日志的所有數(shù)據(jù)庫并選擇我們想要跟蹤的更改。
因此,在 CDC 中,更改是使用從事務中讀取更改的,并且會在相應的更改表中設置管理員的過程中通過管理員的。
日志的更改部分是我們正確設置的這些事務并跟蹤實際過去的更改。將它們應用到目標。
現(xiàn)代讀取事務處理在獨立服務器的內(nèi)存中進行系統(tǒng)處理,突出需要遠程更改這些更改此類型的通知顯示,系統(tǒng)的架構不,并提供了令人印象深刻的源代碼,能夠跟蹤數(shù)據(jù)發(fā)生的變化變化的預測目標。
生產(chǎn)就緒的CDC系統(tǒng)
要制造一個之前需要生產(chǎn)的CDC系統(tǒng),除了提取之外,我們在一個系統(tǒng)考慮問題:
必須按照發(fā)生的變化,否則系統(tǒng)可能會出現(xiàn)的不同狀態(tài);
在傳遞方面,傳遞保證是的,因此,CDC 必須至少傳遞一次及時通知消息,如果后續(xù)系統(tǒng)交付了一個變更事件,則可能導致整個系統(tǒng)的狀態(tài);
最后,簡單的消息轉換,因為必須支持不同系統(tǒng)的數(shù)據(jù)格式可能。
系統(tǒng)的所有消息都報道了——所有消息源對更改源/訂閱的消息進行更改,源源不斷地將系統(tǒng)監(jiān)聽到系統(tǒng)目標對象,然后在更改消息這些對象時,都可以在更改消息的范圍內(nèi)。時使用它們。

該解決方案提供了許多好處,擴展性。訂閱方法允許主要消息來源/可以向目標系統(tǒng)發(fā)送更多的更新,并且可以相應地擴展此用戶的數(shù)量,以便在需要時使用地處理數(shù)據(jù)。
第二個想要的好處是兩個系統(tǒng)現(xiàn)在連接了。如果源系統(tǒng)更改其數(shù)據(jù)庫或將特定數(shù)據(jù)集移動到其他位置,則目標不需要使用像解拉系統(tǒng)那樣進行更改。只要源系統(tǒng)繼續(xù)以相同的格式將消息就不會繼續(xù)接收到系統(tǒng)更新消息,而顯示源已更改任何內(nèi)容。
— 本文結束 —

關注我,回復 「加群」 加入各種主題討論群。
對「服務端思維」有期待,請在文末點個在看
喜歡這篇文章,歡迎轉發(fā)、分享朋友圈


