精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用CDC模式改造遺留系統

原創 精選
開發
因為被改造的業務是客戶的核心業務,基于不影響原有業務的考慮下選擇了新老并行模式來完成整個遺留系統改造。我們選擇了 CDC 模式(Debezium)來將遺留系統中產生的變化同步到新服務中。

作者 | 張雙海

項目改造背景及挑戰

在我們經歷的各種遺留系統改造之旅中,使用絞殺者模式來改造一個巨大的單體服務,是一種被廣泛采用且驗證行之有效的手段,在應用傳統的絞殺者模式時,通常采用逐步替換的方式,將遺留系統中某一獨立的部分抽取出來進行改造,最后通過反向代理等方式,將流量倒入到新的服務中。

但是在我們的案例中,被改造的領域服務是客戶的核心業務,客戶強烈希望在整個改造過程中,不要對現有正在運行的系統造成影響,所以僅僅采用絞殺者模式是不夠的,我們還需要采用新老并行模式來完成整個遷移改造。

當使用并行運行時,我們不是調用新舊實現的其中之一,而是同時調用二者,以允許我們比較其結果以確保它們是等效的。盡管調用了兩種實現,但在任何給定的時間內,只有一個實現的結果是正確的。一般而言,在不斷校驗并相信我們的新實現之前,我們認為舊實現的結果是正確的。  

「《Monolith To Microservices》」

通過新老并行模式,原有的系統不會受到影響,可以繼續提供服務,待新的服務完成遷移并通過驗證之后,再將流量遷移到新的系統。采用新老并行模式可以以增量的模式進行遷移改造,并且在出現問題的時候能夠輕松回滾,確保核心業務的安全。具體介紹可以參考zalando 的工程實踐。

圖片

在新老并行模式運行過程中,為了達到使新服務能夠完全平行替代舊服務,需要將舊服務里新產生的變化,及時同步到新服務里來(對于遺留數據只需要一次性的遷移即可)。在各種因素以及客戶業務需求的影響下,我們選擇了 Event Sourcing 作為基本架構來構建我們新領域服務。Event Sourcing 是一種通過記錄一系列的領域事件來完成對系統狀態的持久化,對于 Event Sourcing 更加詳細的介紹可以參看之前的這篇《??被誤解的Event Sourcing??》。

鑒于新服務中持久化的都是一系列的領域事件,所以很難將遺留系統中產生的變化直接持久化到新服務中,最好的方式是通過調用新服務提供的 API,由新服務通過 Command 產生 Event,然后再存儲到 Event Store 中,完成持久化。

同時遺留單體系統中的代碼倉庫已經非常龐大,并且復雜到難以修改,任何對于遺留系統的代碼修改都需要經過繁復的測試和嚴格的 Code Review,同時也會增加交付開發人員的認知負擔,并且還會給現有系統帶來一定的風險。

基于以上背景,我們發現,通過修改遺留系統代碼的方式來完成新老兩個系統之間數據的同步代價是比較大的,而且會引入一定的風險。

以上種種限制使得我們選擇了CDC(Change data capture)模式來完成我們對遺留系統數據的捕捉與遷移。

使用 CDC 模式來完成新老數據同步

什么是 CDC 模式和 Debezium

CDC 模式是一種對變化的數據進行監控并捕獲,以便其他服務也能夠響應這些變化的模式。對于監控數據庫的變化而言,Debezium 是 CDC 模式的一個非常成熟的實現。當使用 Debezium 來連接 MySQL 時,Debezium 會讀取 MySQL 的 binary log (binlog) 獲取到數據庫產生的變化。同時,Debezium 還是一個 Kafka connect,通過配置,能夠將數據庫產生的變化推送到特定的 Kakfa Topic 中。

通過 Debezium,我們便可以捕獲到所有遺留系統數據庫產生的變化,并將其推送到 Kafaka 特定的 Topic 中去,只要新服務能夠響應這些變化,就可以將舊系統中數據產生的變化同步到新系統里去。

圖片

但目前而言,新服務是無法直接響應這些遺留系統數據庫的變化的,原因是新服務接受的是有業務含義的 Command,而不僅僅是一些數據庫的變化。但根本原因在于,我們捕獲到的數據庫變化只是數據庫行級別的變化,缺失了特定的業務含義,所以我們也無法直接利用這些數據與我們的新服務連接起來。

將這些捕獲到的數據庫變化賦予業務含義,并將其轉換為特定的 Command,這是我們面臨的下一個挑戰。

從 CDC 到 Command

要完成這個挑戰,就需要深入細節了。為了方便說明,我在這里準備了一個非常簡單的例子。

還是以我們非常熟悉的電商領域商品項為例,假設一個 Product 聚合根,管理著多個 Photo 聚合,它們之間的關系在遺留系統數據庫中用 ERD 表示如下:

圖片

經過前期的事件風暴工作坊,我們可以得到一系列關于 Product 聚合根的領域事件:

  • Product 已增加
  • Product 的 Photo 已增加

由于我們的新服務采用了 Event Sourcing 架構,并且系統內的 Event 設計嚴格遵循事件風暴工作坊產出的領域事件,在新服務中,接受的是像在 Product A 下增加 Photo這樣的 Comand。

有了例子之后, 我們可以將之前描述的問題更加具體一點:當收到一條消息表明 Photo 表中的數據發生了變化,應將其識別并轉變為在 Product A 下增加 Photo或更改 Photo A 為封面圖片這樣的 Command。

接下來讓我們仔細分析一下 Debezium 所捕獲到的變化數據的結構,繼續上面的例子,如下是一個典型的 Debezium 產生的 Kafka 消息的 payload 結構:

{
"before": null,
"after": {
"id": "61CFF6E6-A7AA-43BB-8D6D-A8676CFF59AE",
"productId": "E78E3F5A-2275-4C2D-AA6E-1F0282E6CC08",
"filePath": "48F3AE46-D6A5-4F14-8FE3-7B82B7EB6537"
"order": 0,
"isCover": true,
}
"source": {...some source meta information},
"op": "c",
"ts_ms": 1631690854515,
"transaction": {
"Id": "file=mysql-bin-changelog.000010,pos=40908353",
"total_order": 1,
"data_collection_order": 1
}
}

從這個消息的結構和內容可以看出,該消息里面不僅完整的展示了數據庫里某項記錄在變化前后的所有信息,同時還有一些附加的元信息。在這些元信息中,有兩項數據最值得我們去注意。

一個是op,根據Debezium 的官方文檔,這個字段表明了這次變化的變化類型,這個字段可能的值有:

  • C: 表示創建
  • U: 表示更新
  • D: 表示刪除
  • R: 表示讀?。ㄈ绻且粋€ Snapshot 的話)

通過這個字段,我們可以快速且準確的推斷出當收到某條變化的消息時,遺留系統數據庫的某項數據發生了怎樣的變化。比如上面這個例子,我們可以推斷出來,有一張新的圖片被添加到某個 Product 上面。

但是到目前為止,可以將這樣的消息轉換為在Product A下增加Photo這樣的 Command 嗎?

很遺憾還不能,因為根據 Debezium 的實現以及我們的配置,每張表的更新都會被發送到不同的 Kafka Topic 中去,當收到圖片被添加的消息時,還有可能是添加了一個 Product 的同時添加了這個 Product 的 Photo,所以這個行為不應該被識別為添加圖片的 Command,而應該被識別為創建一個 Product的 Commnd。

為了能夠準確地將數據庫中發生的變化識別為 Commnd,我們需要收集并分析更多的數據,這就需要利用消息體里的另外一個字段——transaction。

Transaction 字段描述了捕獲到的這一次變化里關于 Transaction 的一些信息,這些信息包括了這次變化的“transactionId”,以及這個變化在這次 transaction 里的順序。

同時,Debezium 捕獲到的不僅僅是某個表中的某項記錄發生變化,同時它還會捕獲到每次數據庫關于 Transaction 的一些原始信息,消息格式如下:

{
"status": "END",
"id": "file=mysql-bin-changelog.000010,pos=40908353",
"event_count": 2,
"data_collections": [
{
"data_collection": "product-service@photo",
"event_count": 1
},
{
"data_collection": "product-service@product",
"event_count": 1
}
]
}

在每一次數據庫的 transaction 開始或者結束的時候,我們都能通過 debezium 收到這樣一條消息,這個消息里面,我們可以得知某一個 Transaction 的狀態,id,這次 Transaction 里面有哪些表發生了變化,以及變化的數量是多少。

在這些數據中,我們最為關注的就是 Transaction 的id,可以發現在前述關于數據表變化的消息體里面也存在這個字段,通過這個字段,我們可以將某一個 Transaction 下所有產生的變化都聚合到一起,根據聚合之后的數據再來判斷應該將其識別轉換為哪種 Command。比如說,要是這個變化的聚合里面有一個 Product 被新增了,那么我們就可以確定的是這肯定是一個新增Product的 Command,即便這個變化的聚合里面顯示出有 Photo 被新增,那也不應該被識別為成添加圖片的 Command。

其實作出上面的推論還是有一個隱含前提,就是遺留系統的一些行為和操作,都是在一個 Transaction 中,如果同一個操作不在同一個 Transaction ,那么我們的推論也就無法成立。好在在我們的真實案例中,客戶采用了成熟的 ORM 框架(Prisma),每一個有業務含義的行為所造成的修改都在同一個 Transaction 中并保存到數據庫。在開發過程中,也需要在遺留系統的前端不斷操作驗證并加以單元測試才能確保我們能夠準確地識別出所對應的 Command。

至此,我們所有要解決的問題都能夠得到解決了,我們已經能夠將遺留系統數據庫與新系統的數據庫之間的 gap 填平了,兩者之間的通道也能夠建立了。我們終于勝利了!

圖片

基于此種解決方案,我們將整個遺留系統改造分為了三個階段,

圖片

  • 階段一:前端對遺留系統讀和寫,但是對遺留系統所造成的修改都會被同步到新系統中
  • 階段二:前端對遺留系統進行寫操作,但是對于讀操作都會被引向新系統
  • 階段三:待對新系統做好完整的驗證后,新系統就會被作為唯一可信的數據源進行讀寫了

更多的細節

常言道,魔鬼都在細節里,不過鑒于篇幅有限,已經無法再用文字展開更多了,只能通過時序圖來介紹 CDC Procrssor 服務里更多的細節,包括如何通過Transaction來聚合 Debezium 消息以及整個消息處理流程。

圖片

總結

最后總結一下,因為被改造的業務是客戶的核心業務,基于不影響原有業務的考慮下選擇了新老并行模式來完成整個遺留系統改造。我們選擇了 CDC 模式(Debezium)來將遺留系統中產生的變化同步到新服務中。在同步過程中,由數據層的變化推導出業務意圖是成功的關鍵。在其他運用絞殺模式的改造中,如果能夠在更上層的地方做分支也是一種好的思路(參考 Decorating Collaborator Pattern),這樣可以更好地還原業務。最后,在使用 CDC 模式來完成遺留系統改造時,數據完整性和性能都是關鍵指標,在不丟失數據的情況下應越快越好。

原文鏈接:??使用CDC模式改造遺留系統 (qq.com)??

責任編輯:趙寧寧 來源: 51CTO
相關推薦

2020-12-24 08:00:00

數字化轉型遺留系統架構

2022-07-08 09:41:20

遺留系統服務拆分

2022-01-13 09:49:40

遺留系統交接開發

2010-09-06 16:35:58

SQL函數

2021-01-15 11:01:42

IT系統漏洞網絡攻擊

2018-05-03 15:34:34

組件測試遺留系統微服務

2013-09-12 09:39:38

遺留系統云遷移API

2014-02-13 09:47:41

GartnerERP云ERP

2023-06-25 12:22:25

IT領導者CIO

2025-05-30 10:34:00

2021-07-09 05:25:48

CIO遺留系統現代化用戶體驗

2022-08-24 09:50:40

系統運維

2024-04-12 10:03:48

2013-09-16 13:18:28

遺留系統系統遷移

2017-09-13 15:45:17

交付軟件遺留系統

2021-06-27 17:20:20

遺留系統隱形成本CIO

2023-02-10 11:40:53

2020-11-30 10:13:17

ITCIO首席信息官

2021-12-27 11:02:00

首席信息官技術發展企業管理者

2013-11-11 09:59:29

Boni Satani遺留系統系統遷移
點贊
收藏

51CTO技術棧公眾號

99热在线成人| 涩涩视频在线免费看| 韩国v欧美v日本v亚洲v| 欧美成人激情视频免费观看| 成人做爰www看视频软件| bl视频在线免费观看| 久久久精品欧美丰满| 国产福利视频一区| 免费视频一二三区| 综合伊思人在钱三区| 在线电影国产精品| 国产 国语对白 露脸| 十九岁完整版在线观看好看云免费| 另类av一区二区| 欧美成人精品三级在线观看| 国产精品jizz| 久久久久毛片免费观看| 精品免费在线视频| 国产精品无码乱伦| 日本韩国一区| 国产99久久久久久免费看农村| 国产97在线|亚洲| 久艹视频在线观看| 成人av动漫在线观看| 精品99999| 国产原创精品在线| 无遮挡在线观看| 一区二区三区中文字幕电影 | 亚洲精品国产无码| 欧美午夜精品| 精品国产拍在线观看| 成人免费看aa片| 日韩区一区二| 欧美老女人第四色| 日韩在线第三页| 99thz桃花论族在线播放| 亚洲欧美精品午睡沙发| 久久亚洲一区二区| 亚洲欧美国产高清va在线播放| 日韩中文字幕区一区有砖一区| 欧美精品福利在线| 欧美色图亚洲天堂| 99久久久久久中文字幕一区| 亚洲午夜精品视频| 精品人妻一区二区三区视频| 青青草这里只有精品| 欧美mv日韩mv亚洲| 久久精品一二三四| 国产情侣一区在线| 欧美高清hd18日本| 天天综合网久久| 精品亚洲美女网站| 色香蕉成人二区免费| 免费黄色日本网站| sis001欧美| 色综合久久99| 可以免费观看av毛片| 中老年在线免费视频| 欧美日韩午夜剧场| 美女av免费在线观看| 亚洲精品日产| 色婷婷综合久久| 韩国一区二区av| 91看片一区| 欧美性大战久久久久久久蜜臀| 少妇激情一区二区三区| 成人一区视频| 在线播放91灌醉迷j高跟美女| www.成年人| 视频精品一区| 亚洲电影免费观看高清完整版在线| 乱码一区二区三区| 久久黄色影视| 亚洲欧美日韩精品| 懂色av粉嫩av浪潮av| 久久精品国产亚洲夜色av网站| 中文字幕亚洲自拍| 欧美在线视频第一页| 欧美日韩一区二区国产| 91国产视频在线播放| 日韩美一区二区| 麻豆精品一区二区综合av| 91色视频在线导航| 蜜桃视频在线观看www| 91视频在线看| 一区二区三区|亚洲午夜| 操你啦在线视频| 亚洲国产裸拍裸体视频在线观看乱了 | 图片区亚洲欧美小说区| 欧美老少配视频| 91精品国产乱码在线观看| 丝袜国产日韩另类美女| 国产精品色婷婷视频| 精品久久久免费视频| 99re免费视频精品全部| 亚洲精品一区二| 丝袜在线观看| 91久久久免费一区二区| 午夜av中文字幕| 亚洲69av| 欧美理论电影在线播放| 国产一区二区视频免费| 国产一区二区调教| 欧美日韩视频在线一区二区观看视频| 香蕉视频免费在线播放| 亚洲一区二区四区蜜桃| 成年人网站大全| 中文一区二区三区四区| 国产一区二区三区视频| 欧美三级在线免费观看| 老司机亚洲精品| 国产精品嫩草在线观看| 福利成人在线观看| 亚洲sss视频在线视频| 国产精品一区二区小说| 老司机凹凸av亚洲导航| 久久亚洲精品网站| 日本一区二区免费电影| 国产黄色成人av| 亚洲成人第一| 性欧美18xxxhd| 欧美精品一区二区在线播放| 国产人与禽zoz0性伦| 国产欧美短视频| 91亚洲精华国产精华| 二区在线视频| 黑人巨大精品欧美一区免费视频 | 不卡av电影在线播放| 亚洲国产一区在线| 亚洲国产福利| 亚洲成人精品视频在线观看| 免费成人深夜夜行网站| 久久九九免费| 狠狠色综合色区| 国产探花在线观看| 欧美一卡2卡三卡4卡5免费| 久操视频在线观看免费| 欧美专区一区二区三区| 精品久久一区二区三区蜜桃| 少妇视频在线| 欧美一区二区三区的| 亚洲精品自拍视频在线观看| 日韩和的一区二区| 欧美精品亚洲| 亚洲私拍视频| 亚洲精品中文字幕有码专区| 精品在线播放视频| 成人av免费在线| 2019日韩中文字幕mv| 另类视频一区二区三区| 久久天天躁狠狠躁夜夜爽蜜月| 在线视频1卡二卡三卡| 欧美日韩在线看片| 一区二区的视频| 美女福利一区| 欧美大片在线看免费观看| 97精品人妻一区二区三区| 国产精品欧美久久久久一区二区| 成人在线免费播放视频| 在线日本制服中文欧美| 日韩av色综合| 国产特黄在线| 欧美色国产精品| 日韩三级久久久| 国产精选一区二区三区| 欧美黑人在线观看| www.国产精品一区| 97在线视频免费看| 日中文字幕在线| 91久久一区二区| 黄色片网站在线播放| 国产一二三精品| 大荫蒂性生交片| 加勒比久久高清| 欧洲午夜精品久久久| 蜜桃视频在线观看网站| 欧美伊人久久大香线蕉综合69| 中文字幕伦理片| 精品一区中文字幕| 免费看黄色a级片| 欧美理伦片在线播放| 国产精品91视频| 粗大黑人巨茎大战欧美成人| 欧美成人精品高清在线播放| 青青草成人av| 国产精品污污网站在线观看| 午夜福利123| av不卡在线| 亚洲精品国产一区| 91成人福利| 国产精品极品美女在线观看免费| 国产色在线观看| 亚洲精品v欧美精品v日韩精品| 高潮毛片又色又爽免费 | 亚洲国产第一| 欧美一区二区三区四区夜夜大片| 祥仔av免费一区二区三区四区| 欧美极品少妇与黑人| 国产中文在线| 日韩欧美第一区| 九九热最新视频| 一区二区三区四区不卡在线| 四虎国产精品成人免费入口| 国产精品自拍三区| 91av在线免费播放| 黄色激情视频在线观看| 伦一区二区三区中文字幕v亚洲| 欧美精品少妇videofree| 少妇性bbb搡bbb爽爽爽欧美| 在线不卡的av| 最新中文字幕一区| 亚洲精品精品亚洲| 人妻一区二区视频| 丁香天五香天堂综合| 亚洲欧美自拍另类日韩| 亚洲专区免费| 99久久久精品视频| 999久久久精品国产| 久久综合九色综合久99| 麻豆视频久久| 国产日韩欧美黄色| 欧美大片高清| 6080yy精品一区二区三区| 国产在线观看a| 中国日韩欧美久久久久久久久| 色视频在线观看福利| 日韩精品专区在线影院重磅| 一级片一区二区三区| 欧美视频免费在线| 久久精品女人毛片国产| 中文字幕字幕中文在线中不卡视频| 丰满少妇一区二区三区| 成人午夜电影小说| 成人性生交视频免费观看| 蜜臀av在线播放一区二区三区| 熟女少妇在线视频播放| 欧美在线网站| 欧美精品一区二区性色a+v| 欧洲美女日日| 日韩精品一线二线三线| 亚洲女娇小黑人粗硬| 久久精品国产精品国产精品污 | 欧美日韩天天操| 日本成人7777| 欧美大香线蕉线伊人久久| 欧美深夜视频| 久久伦理网站| 最新国产精品视频| 奇米影视首页 狠狠色丁香婷婷久久综合| 欧美大奶一区二区| 玖玖玖精品中文字幕| 日韩理论电影中文字幕| 欧美成人蜜桃| 精品一区免费| 日韩欧美精品一区二区三区经典 | 国产成人精品一区二区三区四区| 狠狠干狠狠操视频| 精品一区二区三区免费毛片爱| 爱爱爱爱免费视频| 精品一区二区免费看| 一级做a爱视频| 国产精品一卡二卡| 岛国精品一区二区三区| 99久久久精品免费观看国产蜜| 7788色淫网站小说| 久久先锋影音av鲁色资源| 美女脱光内衣内裤| 国产日本欧洲亚洲| 91免费公开视频| 亚洲综合色成人| 亚洲黄色三级视频| 91久久免费观看| 国产精品怡红院| 精品福利一二区| 欧美日韩免费做爰大片| 中文字幕日韩av综合精品| 麻豆视频在线播放| 久久久久一本一区二区青青蜜月| 欧美日韩国产观看视频| 国产精品天天狠天天看| 日韩精品久久久久久久软件91| 精品国产_亚洲人成在线| 欧美极品在线观看| 在线成人性视频| 亚洲黄色高清| 一本岛在线视频| 床上的激情91.| 色一情一交一乱一区二区三区| 日韩美女久久久| 黄色一级片免费看| 欧美日韩精品一区二区三区| 丁香六月天婷婷| 国产一区二区久久精品| 中文在线手机av| 日本欧美一级片| 日韩激情综合| 日韩欧美一区二区三区久久婷婷| 欧美在线国产| 成人性生生活性生交12| 国产精品一品视频| 极品蜜桃臀肥臀-x88av| 亚洲成av人片www| 亚洲一区中文字幕在线| 亚洲国产欧美一区二区三区同亚洲 | av成人资源| 亚洲欧美99| 国产婷婷精品| 99国产精品免费视频| 中文字幕欧美三区| www..com国产| 欧美一区二区日韩| 福利小视频在线观看| 97视频在线观看亚洲| 国产精品美女久久久久| 日本不卡一区二区三区视频| 欧美日韩亚洲一区三区| 99sesese| 亚洲国产激情av| 国产精品xxxx喷水欧美| 日韩欧美一级二级| 麻豆影院在线观看| 国产精品爱久久久久久久| 高清日韩欧美| 久久精品在线免费视频| 美国十次了思思久久精品导航| 亚洲最大免费视频| 亚洲自拍偷拍综合| 国产喷水福利在线视频| 日日骚av一区| 影音成人av| 欧美精品国产精品久久久 | 欧美亚洲高清| 国产综合免费视频| 99re这里只有精品6| 久久亚洲国产成人精品性色| 91精品一区二区三区久久久久久| eeuss影院www在线观看| 国产成人97精品免费看片| 欧美调教视频| 人妻少妇精品无码专区二区| 丁香婷婷综合色啪| 五月天婷婷丁香| 欧美精品一区二区三区高清aⅴ | 国产精品美女久久久免费 | 国产一区二区三区欧美| 欧美日韩国产v| 日韩精品久久一区二区三区| 久久精品系列| 中文字幕第24页| 欧美日韩在线综合| www.在线播放| 国产精品免费看久久久香蕉| 日韩电影在线视频| 亚洲精品免费一区亚洲精品免费精品一区| 国产精品素人视频| 91精品国产乱码久久久| 久久夜色精品国产亚洲aⅴ| 精品一区视频| 国产在线视频在线| 91视频一区二区三区| 欧美国产成人精品一区二区三区| 国产丝袜一区视频在线观看| 亚洲承认视频| 亚洲精品一区二区三区樱花 | 自拍视频在线| 亚洲一区二区久久久久久| 欧美国产91| 日韩免费高清一区二区| 色呦呦国产精品| 免费大片黄在线观看视频网站| 91久久久精品| 亚洲天堂激情| 国产精品无码久久久久一区二区| 在线观看一区不卡| 男人天堂久久久| 国产91亚洲精品一区二区三区| 在线亚洲欧美| 91在线无精精品白丝| 538在线一区二区精品国产| 黑人另类精品××××性爽| 另类欧美小说| 精品亚洲aⅴ乱码一区二区三区| 国产一级av毛片| 亚洲色图50p| 麻豆一区在线| 欧美精品色婷婷五月综合| 国产精品乱码一区二区三区软件| www.黄色小说.com| 欧日韩不卡在线视频| 五月久久久综合一区二区小说| www.四虎精品| 欧美色涩在线第一页| 91桃色在线观看| 亚洲精品久久久久久一区二区| 成人一区二区三区中文字幕| 黄瓜视频在线免费观看| 欧美xxxx18性欧美| 欧美禁忌电影网| 无码国产69精品久久久久网站 | 国产福利免费视频|