深度剖析数据库国产化迁移之路
作者 |?吳夏,騰訊云 TDSQL 高級工程師
責編 | 唐小引
頭圖 | CSDN 下載自東方 IC
出品 | CSDN(ID:CSDNnews)
隨著國家有關部門近年來陸續出臺相關政策指導文件,推動探索安全可控的金融科技產品,加強銀行業信息安全建設,國內眾多金融政企機構開始探索借助數字化技術,來實現原有 IT 系統的轉型升級,從而實現降本增效,已經成為行業發展的共識。
近日,騰訊對外透露其自研的金融級分布式數據庫 TDSQL 的金融政企用戶數突破 600 家。作為一款自主研發的金融級數據庫,TDSQL 正在成為眾多金融機構數字化升級過程中的一大擔當。本文將以國內某大型金融機構的數據庫真實遷移的實踐出發,分享國產數據庫的技術架構、遷移歷程以及優化措施。
國產數據庫解決的問題
傳統集中型數據庫,成本高、擴容難、性能受限,傳統模式下靠采購高端設備以及增加硬件來保證數據庫可用性和擴展性的方案正面臨越來越大的壓力。而自主可控分布式數據庫具備高可擴展性、高性能、高可用等特性,可以很好地滿足產業互聯時代線上化、高頻、多維度、高并發的場景需求,能夠幫助金融機構在解決技術瓶頸問題的同時,助力實現降本增效,而節省下來的成本效率,銀行可用于業務快速創新和迭代,發展互聯網線上化業務,在時間和空間上擴大銀行業務服務版圖。
成本方面,國產分布式數據庫同樣表現優勢明顯。舉個例子,基于 TDSQL 的新系統在硬件層面全面采用 x86 服務器,取代傳統商用數據庫所需的大型機、小型機,成本優勢明顯。最新客戶案例數據顯示,張家港農商行采用 TDSQL 分布式數據庫架構后的硬件成本,只有傳統架構成本的 1/5 甚至更低。而微眾銀行公布的數據看,單客戶 IT 成本能節省為傳統商業數據庫架構的 1/10。
作為技術與知識產權自主可控的金融級分布式數據庫,可滿足國家對金融安全自主可控的要求。通過核心技術升級,以新一代分布式數據庫解決過去難以解決的業務問題,同時實現自主可控,是企業數字化轉型的趨勢選擇。
如何遷移?
在金融業務場景中,數據庫遷移升級、數據分發與數據備份是數據庫系統必不可少的基本功能。其中前者是實現數據解耦及匯總的重要基礎,例如保險行業常見的總分系統架構,多個子庫需要實時的將業務數據同步至總庫匯總查詢;銀行核心交易系統中,需要將交易數據實時同步至分析子系統進行報表,跑批等業務員操作。而數據備份則是數據安全的基石,更是金融業務數據的生命線。作為一個金融級數據庫產品來說,TDSQL 在技術層面沉淀了針對數據庫數據遷移、分發、同步和備份的 TDSQL-MULTISRCSYNC(TDSQL-多源同步)解決方案,為數據庫系統國產化轉型的高可用、高可靠提供了有益參考。
???TDSQL 多源同步核心架構:數據遷移與同步的關鍵邏輯
分布式數據庫 TDSQL 是騰訊打造的一款分布式數據庫產品,具備強一致、高可用、全球部署架構、分布式水平擴展、高性能、企業級安全等特性,同時提供智能 DBA、自動化運營、監控告警等配套設施。
TDSQL-MULTISRCSYNC(多源同步),是高性能、高一致,支持多種異構數據平臺的數據分發服務。該服務支持以 TDSQL 作為源端的數據實時同步分發至 MySQL、Oracle、PostgreSQL、消息隊列等平臺,同時也支持以 TDSQL 作為目標端,將 MySQL 或者 Oracle 的數據實時同步至 TDSQL 中,并且部署靈活,支持一對多,多對一等多種復制拓撲結構。
多源同步模塊典型的基于日志的 DCD 復制技術,其系統架構如下:
從上圖我們可以看到,整個系統可以大致地分成三個部分:producer,store,consumer。
producer:增量日志獲取模塊,主要負責解析獲取源端的增量數據改動日志,并將獲取到的日志解析封裝為 JSON 協議的消息體,投送至消息隊列。當源端是 MySQL 或者 TDSQL 時,獲取的增量日志為 binlog 事件,這里要求 binlog 必須是 row 格式且為 full-image。當源端是 Oracle,producer 從 Oracle 的物化視圖日志中獲取增量數據并進行封裝和投送。這里 producer 在向消息隊列生產消息時,采用 at-least-once 模式,即保證特定消息隊列中至少有一份,不排除在隊列中有消息重復的情況。
store:消息隊列中,因為數據庫系統日志有順序性要求,因此這里所有的 topic 的 partition 個數均為 1,保證能夠按序消費。
consumer:日志消費和重放模塊,負責從消息隊列中將 CDC 消息消費出來并根據配置重放到目標實例上。這里因為 producer 端采用 at-least-once 模式生產,因此消費者這里實現了冪等邏輯保證數據重放的正確。
???核心特性:高性能、高一致、高可用
一、高性能保障:基于行的哈希并發策略
金融業務場景中,往往對數據的實時性要較高,因此對數據同步的性能提出了比較高的要求。為了解決這樣的問題,consumer 采用了基于行的哈希并發策略實現并行重放。下面以 binlog 消息為例來說明該策略的實現。
數據庫系統在記錄 binlog 時,按照事務的提交順序將行的改動寫入 binlog 文件,因此按照 binlog 文件記錄事件的順序進行串行重放,源端和目標端數據庫實例狀態一定會達到一致。但是串行重放因為速度慢,在遇到如批量更新等大事務時,容易產生較大的同步時延,適應不了對數據實時性較高的同步場景。為了提高并發度,這里 consumer 按照每個行記錄的表名和主鍵值進行 hash,根據 hash 值將消息投送到對應的同步線程中。這樣亂序的重放會導致數據不一致嗎?答案是不會的,因為雖然是將順序的消息序列打亂了,但是同一行的所有操作都是在同一個線程中是有序的,因此只要每個行的改動執行序列正確,最終數據是會一致。這個過程如下圖所示:
二、一致性保障:row 格式 binlog 事件的冪等容錯
實現冪等邏輯的動機有兩個:
因為生產者實現的是 at-lease-once 模式進行消息生產,因此 consumer 這里必須要能否處理消息重復的問題。
支持冪等邏輯后,便于數據的修復,且在數據同步的過程中不需要記錄鏡像點,便于運維。
這里冪等邏輯的設計原則就是,保證按照 binlog 事件的意圖去對目標實例進行修改。如 insert 事件,其意圖就是要在數據庫中有一條 new 值標識的記錄;update 事件的意圖就是,數據庫中沒有 old 值標識的記錄,只有 new 值標識的記錄;delete 操作也是同樣,其結果就是要求目標數據庫中,不包含 old 值標識的記錄。因此針對 insert,update,delete 操作,其冪等邏輯如下:
INSERT
根據上圖可以看到,當出現主鍵沖突時,insert 操作會轉變成 delete+insert 操作來保證 insert 動作執行成功。另外圖中的影響行數小于 0 或者等于 0 標識執行 SQL 出錯和主鍵沖突。
update
從上圖我們可以看到,update 操作的冪等處理,其實就是保證了在數據庫中,只能有 new 值產生的記錄。
delete
這個過程中,delete 結束后大于 0 就成功;小于 0 就是失敗;等于 0 的時候我們認為它可能沒有匹配到行,這個時候我就按照主鍵操作——因為刪除的操作最終的結果就是目標一定沒有了當前刪除的消息主鍵所標識的這一行——這條操作完成后,DB 里一定沒有這行數據,因此僅僅是按照主鍵進行刪除就可以了。這個時候如果影響行數大于 0,則刪除成功。如果等于 0,就認為按照主鍵去匹配,本身刪除不到,匹配不到——意思是本身目標就沒有這條要刪的主鍵所標識的數據——所以實際上它的結果跟要做完刪除的結果,影響是一樣,也就結束這一條刪除的冪等。
三、高可用保障:多機容災保護
這一套同步服務,一定是高可用的,體現在兩個方面:1、災難的情況下,本身消費者的服務能夠在假如機器出現一些不可恢復的故障時能夠及時地感知并且自動遷移和切換;2、要應對本身常規的擴容——垂直擴容或者水平擴容的伸縮性需求,這也是我們比較強調,這一套同步服務要能夠兼容各種災難情況和常規的運維場景下各種各樣的要求來做到服務的高可用。
重點針對數據庫遷移同步的場景而言,TDSQL 多源同步提供多機容災保護機制:
消費者高可用保障層面,一方面消費者服務本身無狀態,所有的任務下發通過 MetaCluster 實現,可以通過多臺機器去部署同步服務,這套容災機制通過 manager 進程來實現,也就是說當整個機器掉電,運營這個機器的 consumer 已經不存活,這個時候這些 consumer 在 MetaCluster 上的存活節點的失效就會被其他機器的 manager 節點感知——認為另外一些機器的 consumer 已經不存活,這個時候就會把任務接管過來,并且在自己機器上重新拉起這些服務。
二是我們要做到同一個數據同步的鏈路不能在兩臺機器上同時拉起,這是一個互斥的要求。高可用機制會通過一些像唯一標識或者當前的分派節點做到,同一個數據同步的任務在被拉起的時候一定是發生在不同的機器上來實現漂移與互斥的操作,這個多機容災保護總體上就是通過 MetaCluster 和監控的進程,比如說 manager 這樣的服務進行協調完成,保證在機器級別災難或者其他災難情況下這些任務能夠在十秒以內成功遷移到其他的存活節點上。
TDSQL 多源同步金融級應用場景和最佳實踐
TDSQL 多源同步解決方案,過去幾年中,已經在眾多金融政企用戶中得到成功實踐,幫助用戶高效平穩的實現國產數據庫遷移替換。
而作為 TDSQL 模塊中核心的產品服務之一,除了可以實現數據庫全量平穩遷移,TDSQL 多源同步方案還具備支持數據分發、備份等場景應用能力,用戶基于這些能力,探索出各類安全高效實現對業務的數據智能化驅動的姿勢。
保單信息實時數據庫匯總
用戶可以通過多源同步對業務進行分布式的改造,直接通過實時同步將單實例往分布式的架構上遷移。比如說保險客戶通過多個分庫、多個分片區或者多個單的業務、邏輯上的劃分,把這些數據通過 TDSQL 這套服務同步到全量庫里面。
以某大型互聯網保險公司為例,基于 TDSQL 多源同步遷移方案,實現了多對一的一拓撲結構,可以非常高效、穩健地將公司多套大區的業務數據匯總到一個全量庫里面,繼而實現了對整體數據進行報表分析和抽取。
實現數據庫實例間同步,搭建數據倉庫
某大型消費金融公司,在將核心數據庫替換成 TDSQL 后,利用 TDSQL 多源同步服務進行不同數據庫實例之間的同步。這樣的操作帶來業務上的兩大層面驅動:第一個是風控,通過將增量的數據投送到下游消息隊列里面,可提升智能風控的準確率與效率;第二,實現了數據倉庫,用戶利用多源同步這套系統,將業務實時生產庫里面的數據源源不斷地、實時地投入到數據倉庫中,繼而實現 OLAP 類的業務,為業務提供智能化決策分析支持。
核心交易系統異構數據庫實時備份
2019 年,張家港行基于 TDSQL 打造的新一代核心業務系統,成功上線后便成為業界關注的焦點。將銀行傳統核心系統數據庫遷移到騰訊云 TDSQL 數據庫后實現了代差級的降本增效。
在這樣的金融級高度敏感業務系統遷移實踐中,TDSQL 的性能和安全的遷移服務策略得到良好的驗證。
在張家港行數據庫遷移實踐中,核心交易集群是 TDSQL,TDSQL 多源同步方案通過內部的局域網,將存量和增量數據,寫入到備份機房,同時也通過全量的數據校驗服務保證數據源、目標是完全一致來進行風險控制。當核心交易系統如果出現一些小概率不可恢復的災難時候,系統可以在短時間內將交易的服務全部切換到備份機房的 Oracle 上,作為銀行傳統核心系統數據庫遷移的安全兜底方案,最后確保數據庫順利遷移。
數據庫遷移業務割接
數據庫遷移涉及大量核心數據信息,“快”和“穩”缺一不可。多源同步服務作為 TDSQL 內置功能特性,以某省廣電局遷移案例為例,TDSQL 多源同步遷移服務通過重新部署業務系統的遷移方式,從遷移準備、遷移評估、方案設計、資源準備及數據庫改造、遷移實施、結果驗證一共只使用 30 天。其中最為關鍵的資源準備及數據庫改造環節用時 7 天!將客戶的業務系統數據庫從 Oracle 遷移到 TDSQL,TDSQL 的性能滿足了客戶面臨的現有的業務壓力。而業務系統遷移過程中對數據完整性保障,為后續新業務系統運維提供了良好的數據基礎。
跨城跨數據中心災備
以某互聯網人壽保險公司為例,該用戶在公有云 TDSQL 上的實例是其核心的生產環境,云下同時也部署了一套 TDSQL 系統,通過多源同步這套系統,用戶實現了云上的生產環境和云下的生產環境災備同步,這相當于是,實現了跨城同時也是跨數據中心的數據災備功能。
結語
基于高一致、高性能、高可用這“三高”的特性,TDSQL 多源同步幫助用戶業務實現金融級別或者金融場景的數據對外解耦、數據分發、遷移、同步等能力,并通過這些能力,融合到用戶業務的數字化升級當中。
TDSQL 多源同步作為 TDSQL 產品服務體系的核心模塊,既是如關鍵橋梁般的功能,也是幫助衍生業務價值的服務,在數據庫國產化中從分布式改造、遷移、備份到后續同步、分發等,服務用戶遷移到投產、生產運營的全流程。這也是 TDSQL 在多年的實踐打磨下,呈現的產品化優勢。
作者簡介:吳夏,騰訊云 TDSQL 高級工程師,多年分布式數據庫系統研發經驗,目前主要負責 TDSQL 異構數據同步與遷移能力的建設,曾支持大量金融行業數據庫遷移同步。
歡迎更多技術人微信搜索「donyintxy」(備注:姓名+公司+職位)向 CSDN 投稿。
?
推薦閱讀
對不起,我把APP也給爬了
震驚!阿里的程序員竟被一個簡單的 SQL 查詢難住了!
巧用 Trie 樹,實現搜索引擎關鍵詞提示功能
第一個"國產"Apache 頂級項目 Kylin,了解一下!| 原力計劃
華為 5G、阿里檢測病毒算法、騰訊 AI 一分鐘診斷,國內抗疫科技大閱兵!
超級賬本Hyperledger Fabric中的Protobuf到底是什么?
真香,朕在看了!
總結
以上是生活随笔為你收集整理的深度剖析数据库国产化迁移之路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为你整理了一份 Mysql 的学习笔记,
- 下一篇: 一行Python代码能干什么?有意思!