1. DTS搭載全新自研內(nèi)核,突破兩地三中心架構(gòu)的關(guān)鍵技術(shù)

        共 3387字,需瀏覽 7分鐘

         ·

        2022-07-28 05:44

        隨著企業(yè)規(guī)模的擴(kuò)大,對(duì)數(shù)據(jù)庫可用性要求越來越高,更多企業(yè)采用兩地三中心、異地多活的架構(gòu),以提高數(shù)據(jù)庫的異常事件應(yīng)對(duì)能力。

        在數(shù)據(jù)庫領(lǐng)域,我們常聽的“兩地三中心”、“異地多活”到底是什么呢?

        “兩地三中心”就是生產(chǎn)數(shù)據(jù)中心、同城災(zāi)備中心、異地災(zāi)備中心。這種模式下,兩個(gè)地域的三個(gè)數(shù)據(jù)中心互聯(lián)互通,當(dāng)一個(gè)數(shù)據(jù)中心發(fā)生異常,其他數(shù)據(jù)中心可以正常運(yùn)行并進(jìn)行業(yè)務(wù)接管。

        “異地多活”就是在多個(gè)地域建設(shè)多個(gè)數(shù)據(jù)中心, 業(yè)務(wù)數(shù)據(jù)能夠在三個(gè)及以上的數(shù)據(jù)中心之間進(jìn)行雙向同步。異地多活架構(gòu)具有更高的可用性,抗風(fēng)險(xiǎn)能力極強(qiáng)。

        不同數(shù)據(jù)中心可以接管并恢復(fù)業(yè)務(wù)的前提是多個(gè)數(shù)據(jù)中心無差別,彼此之間可以實(shí)時(shí)同步數(shù)據(jù)。通過騰訊云 DTS 數(shù)據(jù)同步功能可以實(shí)現(xiàn)這一訴求。本文將向您介紹通過騰訊云 DTS 數(shù)據(jù)同步功能實(shí)現(xiàn)兩地三中心架構(gòu)的方案以及關(guān)鍵原理。

        架構(gòu)介紹


        利用騰訊云DTS數(shù)據(jù)同步可構(gòu)建下圖中的兩地三中心架構(gòu),其中1~4分別為一條單向的數(shù)據(jù)同步鏈路;A為生產(chǎn)數(shù)據(jù)中心,B為同城的災(zāi)備中心,C為異地的災(zāi)備中心。

        圖:兩地三中心架構(gòu)示例


        關(guān)鍵問題


        在上圖所示的兩地三中心架構(gòu)中,數(shù)據(jù)同步需要解決以下四個(gè)關(guān)鍵問題:

        • 單向鏈路中存量數(shù)據(jù)和增量數(shù)據(jù)的同步
        • 通過單向鏈路構(gòu)建的復(fù)雜拓?fù)渲谢丨h(huán)問題的處理
        • 如何保證三個(gè)節(jié)點(diǎn)數(shù)據(jù)一致
        • 同步延遲問題


        解決方案


        1. 單向鏈路中存量數(shù)據(jù)和增量數(shù)據(jù)的同步


        單向同步鏈路是兩地三中心、多活數(shù)據(jù)架構(gòu)的基礎(chǔ)。為了使單向鏈路的目標(biāo)節(jié)點(diǎn)數(shù)據(jù)和源頭節(jié)點(diǎn)一致,既要復(fù)制存量數(shù)據(jù),又要持續(xù)同步增量數(shù)據(jù)。對(duì)于線上系統(tǒng),源端往往不停地有業(yè)務(wù)數(shù)據(jù)寫入,為了得到一份一致性的存量數(shù)據(jù),往往需要對(duì)源端進(jìn)行加鎖,比如FTWRL或者備份鎖,這也是mydumper,xtrabackup等備份工具采用的方案。加鎖的弊端在于會(huì)影響源庫的業(yè)務(wù)寫入,這在一些場景下是無法接受的。針對(duì)這個(gè)問題騰訊云 DTS 提出了一種無鎖方案,即存量數(shù)據(jù)導(dǎo)出時(shí)不對(duì)源庫加鎖,在回放增量數(shù)據(jù)時(shí)修復(fù)存量數(shù)據(jù)的不一致,最終達(dá)到源和目標(biāo)數(shù)據(jù)的一致性。

        DTS在發(fā)起數(shù)據(jù)同步任務(wù)的同時(shí),會(huì)接管源端的Binlog,然后將Binlog在目標(biāo)端進(jìn)行回放,在同步任務(wù)期間源端的SQL操作,會(huì)重復(fù)在目標(biāo)端執(zhí)行一遍。

        這跟MySQL Replication主從復(fù)制的原理是類似的,通常MySQL為一主多從的架構(gòu)形式,主庫Master負(fù)責(zé)數(shù)據(jù)寫入,從庫Slave負(fù)責(zé)數(shù)據(jù)讀取,從庫的IO線程將主庫上的變化寫入到本地Relay log,SQL線程讀取Relay log在從庫上進(jìn)行回放,從而實(shí)現(xiàn)主從數(shù)據(jù)同步。

        圖:MySQL Replication主從復(fù)制原理圖

        MySQL這種讀寫分離的模式可以大大減少主庫的訪問壓力,但靈活性較差,篩選功能不足。

        DTS在主從復(fù)制架構(gòu)的基礎(chǔ)上,引入靈活的拓?fù)浣Y(jié)構(gòu),支持一對(duì)多、多對(duì)一、聯(lián)級(jí)單向、雙向同步、聯(lián)級(jí)環(huán)形同步等,可滿足各種復(fù)雜的數(shù)據(jù)庫同步場景的應(yīng)用,如兩地三中心、異地多活等。

        2. 解決數(shù)據(jù)回環(huán)問題


        數(shù)據(jù)同步中會(huì)遇到回環(huán)問題,以如下環(huán)形同步為例,對(duì)A進(jìn)行SQL操作,A同步到B,B再同步到C,C又同步給A,A會(huì)重復(fù)處理該SQL操作,進(jìn)而陷入無限循環(huán)中,所以如何進(jìn)行數(shù)據(jù)破環(huán),是雙向同步、環(huán)形同步等必須要解決的問題。

        圖:數(shù)據(jù)回環(huán)問題

        DTS通過在環(huán)形拓?fù)渲凶鰳?biāo)記,從而識(shí)別出來接收到的SQL是否已執(zhí)行過,達(dá)到破環(huán)的目的。在其他的拓?fù)浣Y(jié)構(gòu),如雙向同步、聯(lián)級(jí)環(huán)形同步都可以通過做標(biāo)記來實(shí)現(xiàn)破環(huán)。

        3. 保證三節(jié)點(diǎn)數(shù)據(jù)一致


        在兩地三中心數(shù)據(jù)架構(gòu)中,會(huì)有兩個(gè)或三個(gè)節(jié)點(diǎn)需要同時(shí)進(jìn)行數(shù)據(jù)寫入,保證多個(gè)節(jié)點(diǎn)的一致性至關(guān)重要。

        3.1 規(guī)劃主鍵分區(qū)

        在兩地三中心的場景中實(shí)現(xiàn)數(shù)據(jù)一致性,常見的方法就是規(guī)劃主鍵分區(qū)。主鍵分區(qū)即多個(gè)寫入的數(shù)據(jù)庫“各司其職“,各自負(fù)責(zé)更新不同的主鍵數(shù)據(jù),從源頭上避免產(chǎn)生主鍵沖突。例如A節(jié)點(diǎn)上負(fù)責(zé)更新ID為1、3、5的主鍵數(shù)據(jù),B節(jié)點(diǎn)上負(fù)責(zé)更新ID為2、4、6的主鍵數(shù)據(jù)。

        如果實(shí)際業(yè)務(wù)部分?jǐn)?shù)據(jù)存在耦合,無法進(jìn)行主鍵分區(qū),則可能產(chǎn)生主鍵沖突。DTS支持對(duì)沖突進(jìn)行處理,并提供如下三種沖突策略:

        沖突報(bào)錯(cuò)

        步任務(wù)中,源庫插入(INSERT)主鍵數(shù)據(jù)與目標(biāo)庫存在沖突時(shí),任務(wù)報(bào)錯(cuò)并暫停,需要用戶手動(dòng)處理后才能繼續(xù)。

        沖突處理時(shí)SQL語句改寫如下:
        INSERT不改寫UPDATE 不改寫DELETE 不改寫

        沖突忽略

        同步任務(wù)中檢測到源庫的主鍵插入(INSERT)數(shù)據(jù)與目標(biāo)庫發(fā)生沖突時(shí),忽略源庫的主鍵插入數(shù)據(jù),以目標(biāo)庫的內(nèi)容為準(zhǔn)。

        沖突處理時(shí)SQL語句改寫如下
        INSERT -> INSERT IGNOREUPDATE 不改寫DELETE 不改寫

        沖突覆蓋

        同步任務(wù)中檢測到源庫的主鍵更新(INSERT和UPDATE)數(shù)據(jù)與目標(biāo)庫發(fā)生沖突時(shí),用源庫的主鍵數(shù)據(jù)覆蓋目標(biāo)的主鍵數(shù)據(jù)。

        沖突處理時(shí)SQL語句改寫如下:
        INSERT -> REPLACE INTOUPDATE -> DELETE + REPLACE INTODELETE 不改寫

        這里首先需要明確的是,DTS沖突策略的應(yīng)用,僅針對(duì)發(fā)生主鍵沖突時(shí)的數(shù)據(jù),應(yīng)用后可以按用戶設(shè)置的策略進(jìn)行處理,使任務(wù)報(bào)錯(cuò)提醒給用戶或者繼續(xù)運(yùn)行。不產(chǎn)生沖突的場景,如下圖的UPDATE和所有的DELETE主鍵操作,源端的操作都會(huì)正常同步到目標(biāo)端,DTS不會(huì)干預(yù)。

        圖:不產(chǎn)生沖突的場景下,DTS不干預(yù)

        如果沒有主鍵分區(qū),多個(gè)源端INSERT同一條主鍵數(shù)據(jù)引起沖突時(shí),DTS可以按照沖突策略來干預(yù),但多個(gè)源端對(duì)同一條主鍵數(shù)據(jù)進(jìn)行正常的UPDATE時(shí)(如上圖,沒有沖突),DTS不會(huì)干預(yù),這樣可能會(huì)出現(xiàn),目標(biāo)端的數(shù)據(jù)被重復(fù)刷新或者隨意刷新(不能確定最終刷新的結(jié)果是哪個(gè)節(jié)點(diǎn)同步過來的),同一條主鍵數(shù)據(jù)在多個(gè)節(jié)點(diǎn)顯示的不一致。

        綜上,要實(shí)現(xiàn)多節(jié)點(diǎn)數(shù)據(jù)一致性,進(jìn)行主鍵分區(qū)是非常有效的方法,可以從源頭上避免數(shù)據(jù)產(chǎn)生沖突。

        3.2 兩地三中心數(shù)據(jù)同步應(yīng)用

        下面結(jié)合兩地三中心的數(shù)據(jù)架構(gòu),介紹數(shù)據(jù)一致性如何保證,以及通過設(shè)置沖突策略來處理沖突問題。

        圖:兩地三中心架構(gòu)示例

        圖中1-4為DTS的一條單向同步鏈路,1、2構(gòu)成A<->B的雙向同步,3、4構(gòu)成A->C之間的雙向同步。

        A、B同時(shí)負(fù)責(zé)數(shù)據(jù)寫入,提前規(guī)劃好A、B各自負(fù)責(zé)更新的主鍵數(shù)據(jù),例如A負(fù)責(zé)更新主鍵ID為1-100的數(shù)據(jù),B負(fù)責(zé)更新主鍵ID為101-200的數(shù)據(jù)。

        沖突策略給出如下推薦,用戶在實(shí)際的場景中可以根據(jù)業(yè)務(wù)的情況進(jìn)行靈活選擇。

        • 如果希望發(fā)生INSERT主鍵沖突時(shí)DTS給出提示用戶手動(dòng)處理,則4條鏈路都設(shè)置沖突報(bào)錯(cuò)。

        • 如果希望INSERT主鍵時(shí)以A的為準(zhǔn),則A->B、A->C設(shè)置為沖突覆蓋,B->A、C->A設(shè)置為沖突忽略。(不能保證UPDATE主鍵和DELETE主鍵操作也以A的為準(zhǔn))

        4. 同步延遲問題


        目標(biāo)數(shù)據(jù)庫相對(duì)于源數(shù)據(jù)庫的延遲也是DTS 關(guān)注的一個(gè)重要問題,當(dāng) DTS 同步數(shù)據(jù)的速度達(dá)不到源端寫入速度,就會(huì)出現(xiàn)延遲,這在某些場景下會(huì)影響業(yè)務(wù)對(duì)目標(biāo)數(shù)據(jù)庫的使用。

        騰訊云 DTS 采用全新自研內(nèi)核,對(duì)同步性能做了極致的優(yōu)化,能滿足大部分實(shí)際業(yè)務(wù)場景下對(duì)同步性能的需求。

        如下為當(dāng)前DTS同步任務(wù)中不同規(guī)格的RPS參考(RPS表示DTS每秒同步至目標(biāo)表的數(shù)據(jù)行數(shù))。
        表:DTS同步任務(wù)中不同規(guī)格的RPS參考
        規(guī)格RPS上限參考
        micro
        1000
        small
        2000
        medium
        5000
        large
        >5000

        在實(shí)際業(yè)務(wù)場景中,RPS可能會(huì)受源和目標(biāo)數(shù)據(jù)庫的運(yùn)行負(fù)載、DTS 訪問源和目標(biāo)數(shù)據(jù)庫的網(wǎng)絡(luò)延時(shí)、網(wǎng)絡(luò)帶寬等多種因素的影響。騰訊云 DTS 經(jīng)過優(yōu)化,對(duì)網(wǎng)絡(luò)延時(shí)的容忍度較高,在一些跨地域的場景中也能保持較好的性能。如果用戶需要更高的傳輸性能,也可以通過專線接入、VPN接入等方式,保證數(shù)據(jù)傳輸過程中的網(wǎng)絡(luò)延時(shí)和帶寬質(zhì)量。


        總結(jié)


        騰訊云DTS已具備實(shí)時(shí)數(shù)據(jù)同步、回環(huán)處理、數(shù)據(jù)沖突處理、高性能傳輸?shù)饶芰Γ筛鶕?jù)企業(yè)需求靈活定制多種同步拓?fù)浼軜?gòu),用于兩地三中心、異地多活等場景的數(shù)據(jù)同步。



        -- 更多精彩 --


        微服務(wù)+分布式再上一“城”,騰訊云數(shù)據(jù)庫助力海峽銀行新一代核心系統(tǒng)上線


        騰訊云數(shù)據(jù)庫落地國信證券,承載日均億級(jí)交易額


        點(diǎn)擊閱讀原文,了解更多優(yōu)惠
        瀏覽 198
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 一级免费视频 | 毛片网亚洲| 道具play含着震动按摩器男男 | 污的网站在线观看 | 欧美色老太性爱视频 |