8月30日,由 NineData 和 SelectDB 共同舉辦的主題為“實(shí)時(shí)數(shù)據(jù)驅(qū)動(dòng),引領(lǐng)企業(yè)智能化數(shù)據(jù)管理”的線上聯(lián)合發(fā)布會(huì),圓滿成功舉辦!雙方聚焦于實(shí)時(shí)數(shù)據(jù)倉(cāng)庫(kù)技術(shù)和數(shù)據(jù)開(kāi)發(fā)能力,展示如何通過(guò)強(qiáng)大的生態(tài)開(kāi)發(fā)兼容性,對(duì)接豐富的大數(shù)據(jù)生態(tài)產(chǎn)品,助力企業(yè)快速開(kāi)展數(shù)據(jù)分析業(yè)務(wù),共同探索實(shí)時(shí)數(shù)據(jù)驅(qū)動(dòng)的未來(lái)企業(yè)智能化數(shù)據(jù)管理解決方案。
本文根據(jù)玖章算術(shù)技術(shù)副總裁陳長(zhǎng)城(天羽)在NineData X SelectDB 聯(lián)合發(fā)布會(huì)的主題演講內(nèi)容整理。
陳長(zhǎng)城(天羽)玖章算術(shù)技術(shù)副總裁
?? 嘉賓簡(jiǎn)介
陳長(zhǎng)城,曾任阿里云數(shù)據(jù)庫(kù)中臺(tái)負(fù)責(zé)人和阿里云數(shù)據(jù)庫(kù)生態(tài)工具部總經(jīng)理,前阿里云資深技術(shù)專(zhuān)家。帶領(lǐng)阿里云數(shù)據(jù)庫(kù)基礎(chǔ)設(shè)施完成三次架構(gòu)變革,從去 IOE 到分布式、異地多活、容器化和存儲(chǔ)計(jì)算分離,是歷年雙 11 大促的數(shù)據(jù)庫(kù)核心負(fù)責(zé)人和容量、架構(gòu)規(guī)劃者。主導(dǎo)云原生工具體系架構(gòu)升級(jí)并打造一站式管理能力。發(fā)表過(guò)多篇技術(shù)專(zhuān)利和 VLDB、ICDE 數(shù)據(jù)庫(kù)頂會(huì)論文。
1 NineData產(chǎn)品介紹
在數(shù)據(jù)和云的時(shí)代企業(yè)數(shù)字化面臨諸多挑戰(zhàn),從Gartner和Percona的報(bào)告中,我們知道80%以上的企業(yè)會(huì)選擇多云或混合云,而超過(guò)70%的企業(yè)會(huì)選擇使用多種數(shù)據(jù)庫(kù)來(lái)滿足業(yè)務(wù)需求。在行業(yè)的分析報(bào)告中,我們發(fā)現(xiàn),如果企業(yè)能夠有效使用多源基礎(chǔ)架構(gòu)和新的數(shù)據(jù)架構(gòu),它們的創(chuàng)新能力和整體盈利能力將會(huì)明顯提升。然而,在數(shù)據(jù)和云的時(shí)代下,企業(yè)數(shù)據(jù)管理的挑戰(zhàn)更多,例如數(shù)據(jù)孤島、多源異構(gòu)數(shù)據(jù)管理復(fù)雜度以及開(kāi)發(fā)效率等,都是急需解決的。
基于上述普遍存在的問(wèn)題和挑戰(zhàn),玖章算術(shù)建設(shè)了NineData云原生智能數(shù)據(jù)管理平臺(tái)。最底層IaaS接口層統(tǒng)一對(duì)接各場(chǎng)景的各種數(shù)據(jù)源,基于此建設(shè)NineData數(shù)據(jù)備份、數(shù)據(jù)復(fù)制、數(shù)據(jù)對(duì)比和SQL開(kāi)發(fā)四大核心功能模塊,與企業(yè)的數(shù)據(jù)庫(kù)、搜索、消息隊(duì)列、數(shù)倉(cāng)等數(shù)字系統(tǒng)緊密聯(lián)動(dòng),幫助企業(yè)保護(hù)數(shù)據(jù)資產(chǎn),基于多云和混合云靈活構(gòu)建基礎(chǔ)設(shè)施,統(tǒng)一安全管理,提升數(shù)據(jù)庫(kù)開(kāi)發(fā)效率。
玖章算術(shù)建設(shè)了NineData云原生智能數(shù)據(jù)管理平臺(tái)
這里展開(kāi)介紹一下SQL開(kāi)發(fā),它是一種讓企業(yè)內(nèi)外部所有開(kāi)發(fā)者都遵循統(tǒng)一數(shù)據(jù)訪問(wèn)規(guī)范并提升效率的最佳實(shí)踐產(chǎn)品化,當(dāng)前企業(yè)面對(duì)多云和多種數(shù)據(jù)源,雖然各種數(shù)據(jù)源有各自的CLI或圖形管理工具,但存在這些問(wèn)題:
權(quán)限分散、審計(jì)欠缺,安全管控難度大 ;
各個(gè)工具建設(shè)程度不一,體驗(yàn)一般,開(kāi)發(fā)效率低;
無(wú)法形成統(tǒng)一規(guī)范,數(shù)據(jù)庫(kù)生產(chǎn)穩(wěn)定性缺乏保障;
多環(huán)境、多種數(shù)據(jù)源無(wú)法統(tǒng)一管理。
針對(duì)這些問(wèn)題,NineData設(shè)計(jì)了企業(yè)級(jí)數(shù)據(jù)庫(kù)安全管理能力,通過(guò)統(tǒng)一數(shù)據(jù)源對(duì)接各云廠商和自建的各種數(shù)據(jù)源,設(shè)計(jì)任務(wù)流和審批流、安全規(guī)則配置、權(quán)限管理與操作審計(jì)、SSO支持等基礎(chǔ)組件,將企業(yè)的數(shù)據(jù)(實(shí)例、庫(kù)、表)+ 賬號(hào)角色 + 操作類(lèi)型 通過(guò)規(guī)則引擎統(tǒng)一管理,并內(nèi)置數(shù)據(jù)庫(kù)SQL開(kāi)發(fā)的穩(wěn)定性和安全最佳實(shí)踐,提供數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限管理、變更管理、敏感數(shù)據(jù)管理、數(shù)據(jù)導(dǎo)入導(dǎo)出等功能。NineData提供簡(jiǎn)單GUI的個(gè)人版和高效協(xié)同的企業(yè)版兩種服務(wù)方式,并結(jié)合大模型AIGC的能力,在自然語(yǔ)音查詢數(shù)據(jù)、表結(jié)構(gòu)設(shè)計(jì)改寫(xiě)、SQL優(yōu)化建議方面提升開(kāi)發(fā)者效率。
NineData設(shè)計(jì)了企業(yè)級(jí)數(shù)據(jù)庫(kù)安全管理能力
企業(yè)在數(shù)據(jù)復(fù)制場(chǎng)景下也面臨著多數(shù)據(jù)源、多云數(shù)據(jù)打通、跨地域長(zhǎng)周期復(fù)制,以及由此帶來(lái)的同能和穩(wěn)定性方面的問(wèn)題。NineData數(shù)據(jù)復(fù)制致力于提供數(shù)據(jù)流動(dòng)的基礎(chǔ)設(shè)施。消除不同數(shù)據(jù)庫(kù)類(lèi)型、不同廠商、不同環(huán)境下的造成的數(shù)據(jù)流動(dòng)難點(diǎn),幫助企業(yè)最大地發(fā)揮數(shù)據(jù)價(jià)值。目前NineData以及支持13種數(shù)據(jù)源的單雙向鏈路,強(qiáng)勁的復(fù)制性能和完善的數(shù)據(jù)對(duì)比功能,具體將在后面展開(kāi)。
2 數(shù)據(jù)復(fù)制技術(shù)架構(gòu)
先介紹下NineData整體架構(gòu),基于多云和多源能力,我們構(gòu)建了數(shù)據(jù)備份、數(shù)據(jù)復(fù)制、數(shù)據(jù)對(duì)比和SQL開(kāi)發(fā)能力。
2.1 多云角度
從多云角度,為了幫助企業(yè)統(tǒng)一管理分散在多云或混合云的各種數(shù)據(jù)源,我們?cè)O(shè)計(jì)了靈活的云原生架構(gòu)、容器化彈性拉起、網(wǎng)絡(luò)架構(gòu)等。
?? 支持專(zhuān)屬集群
支持多云的同時(shí),我們通過(guò)專(zhuān)屬集群的技術(shù),能夠讓企業(yè)獨(dú)享本身的資源。包括我們可以把企業(yè)的worker節(jié)點(diǎn)放置在企業(yè)本地或VPC內(nèi)部,實(shí)現(xiàn)數(shù)據(jù)的內(nèi)部閉環(huán),提高企業(yè)數(shù)據(jù)安全和worker執(zhí)行效率。
NineData支持專(zhuān)屬集群
?? 云原生的 SAAS 模式
NineData 作為一個(gè)云原生的 SAAS 產(chǎn)品,按需拉起、彈性伸縮是最基本的能力。
?? 網(wǎng)絡(luò)安全
網(wǎng)絡(luò)方面,基于安全考慮,很多企業(yè)客戶不希望暴露數(shù)據(jù)庫(kù)的公網(wǎng)端口,因此,我們?cè)O(shè)計(jì)了一個(gè)數(shù)據(jù)庫(kù)網(wǎng)關(guān),通過(guò)這種設(shè)計(jì),用戶只需拉起一個(gè)NineData數(shù)據(jù)庫(kù)網(wǎng)關(guān),就能夠連接我們的中心管理節(jié)點(diǎn),從而建立反向訪問(wèn)通道,能夠把散落在各地、以及包括內(nèi)部的數(shù)據(jù)源的統(tǒng)一管理。此外,我們的NineData worker也可以放到用戶本地,實(shí)現(xiàn)數(shù)據(jù)鏈路的內(nèi)部閉環(huán),而管理鏈路依然可以通過(guò)中心控制臺(tái)實(shí)現(xiàn)統(tǒng)一的鏈路管理。
2.2 多源方面
在多源方面,我們主要設(shè)計(jì)了統(tǒng)一數(shù)據(jù)源接入層。為了接入眾多數(shù)據(jù)源,我們對(duì)數(shù)據(jù)源的連接池管理、屬性配置、連接檢查和安全認(rèn)證做了統(tǒng)一抽象。這樣可以將所有的數(shù)據(jù)源統(tǒng)一接入。我們的四大主要功能模塊都使用相同的數(shù)據(jù)源接入層,實(shí)現(xiàn)一次接入所有功能都可用。對(duì)于用戶來(lái)說(shuō),就實(shí)現(xiàn)了真正的統(tǒng)一管理。
NineDataq在多源方面,主要設(shè)計(jì)了統(tǒng)一數(shù)據(jù)源接入層
在NineData的產(chǎn)品設(shè)計(jì)中,安全不是單一的任務(wù)或功能,而是自始至終灌輸在產(chǎn)品設(shè)計(jì)、開(kāi)發(fā)、運(yùn)維的全過(guò)程中,我們?cè)跀?shù)據(jù)傳輸加密、運(yùn)維白屏、操作審計(jì)方面做了很多工作,同時(shí)NineData通過(guò)內(nèi)部測(cè)試和三方審計(jì)多方位保護(hù)數(shù)據(jù)安全。
一個(gè)典型的NineData數(shù)據(jù)復(fù)制鏈路拓?fù)洌?dāng)您配置完源和目標(biāo)之后,NineData 就會(huì)讓整個(gè)鏈路開(kāi)始運(yùn)行。一開(kāi)始會(huì)有一個(gè)預(yù)檢查,檢查您的網(wǎng)絡(luò)連接、賬號(hào)密碼等是否正確。接下來(lái)會(huì)進(jìn)行結(jié)構(gòu)復(fù)制,抓取和寫(xiě)入全量數(shù)據(jù)和增量數(shù)據(jù)。
從產(chǎn)品層面,我們要支持多云多源,除了上面介紹的彈性架構(gòu)和網(wǎng)絡(luò)架構(gòu)外,我們?cè)趶?fù)制模塊的多種數(shù)據(jù)類(lèi)型兼容和擴(kuò)展性做了重要的設(shè)計(jì),同時(shí)多源異構(gòu)長(zhǎng)期運(yùn)行必然存在少部分不兼容場(chǎng)景,我們?cè)诳捎^測(cè)和可干預(yù)方面也重點(diǎn)做了功能設(shè)計(jì)。數(shù)據(jù)傳輸內(nèi)核模塊的底線是保障數(shù)據(jù)一致,同時(shí)在吞吐和延時(shí)上具備領(lǐng)先的優(yōu)勢(shì),因此我們?cè)谶@方面做了很多工作。后面核心特性的分享將圍繞這幾個(gè)點(diǎn)進(jìn)行展開(kāi)。
3 數(shù)據(jù)復(fù)制的核心特性
3.1 吞吐能力
以全量性能為例,主要有幾個(gè)重要的優(yōu)化項(xiàng):
?? 大表遷移性能
大表遷移性能是最常見(jiàn)的瓶頸,假設(shè)我們?cè)谠炊擞幸恍?shù)據(jù)需要處理,其中有許多表,而且它們的數(shù)據(jù)量都不同。如果我們同時(shí)啟動(dòng)三個(gè)并發(fā)線程進(jìn)行處理,那么可能會(huì)出現(xiàn)一些數(shù)據(jù)量小的表已經(jīng)處理完了,但是一些數(shù)據(jù)量較大的表仍然在等待單個(gè)線程進(jìn)行處理的情況。如果表級(jí)并發(fā),就會(huì)類(lèi)似的問(wèn)題。因此,為了提高整個(gè)效率,我們必須增強(qiáng)表內(nèi)的并發(fā)能力。具體來(lái)說(shuō),我們需要考慮表的切片是否均勻。為此,我們制定了一項(xiàng)策略,即默認(rèn)組件支持一鍵拆分,依次通過(guò)主鍵、非空唯一鍵、可空唯一鍵、普通鍵等這種順序支持拆分,以盡力最均衡的方式實(shí)現(xiàn)并發(fā)處理。
并發(fā)寫(xiě)入還連帶著一個(gè)空間問(wèn)題,在使用過(guò)程中,在源端如果您將100G的數(shù)據(jù)寫(xiě)入,在目標(biāo)端它可能會(huì)變成150G。這是因?yàn)槿绻麊蝹€(gè)表亂序提交的話,就可能會(huì)產(chǎn)生一些數(shù)據(jù)空洞。為此,NineData在切片大小和并發(fā)順序方面進(jìn)行了優(yōu)化以控制寫(xiě)入放大。
?? 目標(biāo)庫(kù)寫(xiě)入
要以對(duì)目標(biāo)庫(kù)損耗最少的方法寫(xiě)入,才能獲得最大性能。解決通道性能,并且它可以線性擴(kuò)展之后,吞吐量的瓶頸就不在通道上,而在目標(biāo)庫(kù)的寫(xiě)入上。因此目標(biāo)庫(kù)的寫(xiě)入姿勢(shì)就非常重要。如果每條SQL都需要在目標(biāo)端進(jìn)行解析,那么性能肯定會(huì)差。因此,我們需要采用一些批量提交的方式。同時(shí)在處理壓縮開(kāi)關(guān)時(shí),需要注意CPU的數(shù)量。在CPU數(shù)量較少的情況下,啟用壓縮會(huì)對(duì)性能產(chǎn)生較大的影響。
?? 內(nèi)存優(yōu)化
內(nèi)存優(yōu)化可以提升吞吐性能。因?yàn)檎麄€(gè)全量復(fù)制的特點(diǎn)是批量加載到內(nèi)容而且快速寫(xiě)入目標(biāo)庫(kù),然后這個(gè)數(shù)據(jù)就被淘汰了。所以整個(gè)JVM的參數(shù)上做一些針對(duì)性的配置優(yōu)化,從而降低內(nèi)存和CPU開(kāi)銷(xiāo),提升通道性能。
3.2 低延時(shí)
那么NineData如何構(gòu)建低延時(shí)呢?我們從多個(gè)維度考慮低延時(shí)特性。
?? 通道性能
在通道性能角度,包括一些如Batch、熱點(diǎn)數(shù)據(jù)的合并等。其中熱點(diǎn)數(shù)據(jù)的合并,如果一條記錄從A1改到A2,再改到A3,一般同步模型是全軌跡修改,但開(kāi)啟熱點(diǎn)能力后,它可能直接合并成終態(tài)的A3插入語(yǔ)句,不會(huì)插入A1或update A2,通過(guò)這種能力直接以終態(tài)的數(shù)據(jù)寫(xiě)入,在內(nèi)存中把這個(gè)隊(duì)列直接合并掉。在通道性能層面,還有一些其他設(shè)計(jì)。例如在redis的復(fù)制鏈路中,減少隊(duì)列的序列化代價(jià),從而讓整個(gè)隊(duì)列的消耗降到最低。
?? 通道管理層設(shè)計(jì)
通道管理層面對(duì)低延遲的整體系統(tǒng)設(shè)計(jì)也非常重要,這是在我們多年的實(shí)踐中得出的經(jīng)驗(yàn)。要能夠以最小的代價(jià)面對(duì)同步鏈路中的各種異常。
(a)降低異常情況下重拉的可能。數(shù)據(jù)庫(kù)出現(xiàn)延遲,但是數(shù)據(jù)服務(wù)端的日志已經(jīng)被清除;作為我們?cè)圃漠a(chǎn)品,我們會(huì)怎么做呢?我們會(huì)獲取源端數(shù)據(jù)庫(kù)的接口,檢查是否存在被上傳到OSS或者其他對(duì)象存儲(chǔ)的日志。如果有,我們會(huì)自動(dòng)獲取并接續(xù)上之前的記錄,從而避免重新進(jìn)行全量拉取,減少延時(shí)。
(b) 盡量少地回退數(shù)據(jù)。我們?cè)O(shè)計(jì)了表級(jí)別的安全位點(diǎn)。每張表都會(huì)有一個(gè)自己最新的位點(diǎn)。如果在回放過(guò)程中,這張表的位點(diǎn)曾經(jīng)被使用過(guò),我們會(huì)將其拋棄,以避免位點(diǎn)回退。
(c)干凈地運(yùn)維。針對(duì)日常的運(yùn)維操作,NineData復(fù)制線程會(huì)使隊(duì)列中的所有數(shù)據(jù)都提交完成,使得16個(gè)線程到達(dá)一個(gè)一致的位點(diǎn),然后再關(guān)閉進(jìn)程。通過(guò)這種能力,我們實(shí)現(xiàn)了一個(gè)干凈的cleandown,用戶重新啟動(dòng)后就不會(huì)遇到需要回放數(shù)據(jù),這是非常優(yōu)雅的方式之一。
3.3 一致性數(shù)據(jù)同步
數(shù)據(jù)一致性重要性毋庸置疑,這里從數(shù)據(jù)一致性和DDL結(jié)構(gòu)一致性兩方面各重點(diǎn)介紹一個(gè)NineData的設(shè)計(jì)特性,同時(shí)NineData實(shí)現(xiàn)了完善的數(shù)據(jù)對(duì)比功能。
NineData支持一致性數(shù)據(jù)同步
?? 數(shù)據(jù)一致性
數(shù)據(jù)本身的一致性問(wèn)題,如何保障事務(wù)一致性。舉個(gè)例子,假設(shè)我們有T1到T5這五個(gè)事務(wù),其中B1是訂單狀態(tài),從B1創(chuàng)建訂單,到B3可能是用戶付款,這時(shí)會(huì)產(chǎn)生一個(gè)物流訂單L。如果我們采用正常的行級(jí)同步方式,訂單和物流訂單會(huì)分別存儲(chǔ)在不同的表中,由于行級(jí)的并發(fā)性,無(wú)法保證它們的順序性。因此,B1和L可能同時(shí)出現(xiàn)在目標(biāo)庫(kù)中,也就是說(shuō)在創(chuàng)建訂單時(shí),物流訂單也已經(jīng)被創(chuàng)建了。對(duì)于在線業(yè)務(wù)來(lái)說(shuō),這肯定是違背業(yè)務(wù)邏輯,無(wú)法支持在線業(yè)務(wù)的正常運(yùn)行。
因此,我們構(gòu)建了一個(gè)事務(wù)一致性能力,用戶可以開(kāi)啟事務(wù)能力。當(dāng)用戶開(kāi)啟事務(wù)能力時(shí),我們會(huì)檢查T(mén)3這個(gè)事務(wù)中的每條記錄與之前所有事務(wù)是否存在依賴關(guān)系。如果存在,T3將等待其他事務(wù)都提交完畢后再提交,確保數(shù)據(jù)的一致性。因此,第一次提交只會(huì)提交T1到T4,T3會(huì)等待T2提交完畢后再提交。這是一種保證數(shù)據(jù)一致性的同步機(jī)制。
?? DDL變更同步的一致性
DDL變更同步的一致性問(wèn)題,具體來(lái)說(shuō),以表結(jié)構(gòu)為例,如果我們遇到了表結(jié)構(gòu)的變更,一般的解決方法是查看源端的表結(jié)構(gòu)。然而,由于數(shù)據(jù)日志中大部分只有數(shù)據(jù)和表名,缺少結(jié)構(gòu)和類(lèi)型等信息,因此我們需要回查數(shù)據(jù)源來(lái)獲取結(jié)構(gòu)信息,并拼接出最終的結(jié)果。但是,很可能在回查時(shí)源端已經(jīng)發(fā)生了第二次DDL,導(dǎo)致我們獲取到的是已經(jīng)又被修改過(guò)的DDL,從而拼接出的數(shù)據(jù)不一致和出現(xiàn)錯(cuò)誤。
因此,我們開(kāi)發(fā)了一種DDL解析能力,即在DDL解析完成后,直接在同步線程解析線程中進(jìn)行重放。同時(shí),我們記錄每個(gè)變更的版本,重放的同時(shí)生成新版本,舊版本不刪除。這樣,任何表在任何時(shí)刻都可以隨時(shí)查到其Meta結(jié)構(gòu),而不需要像其他業(yè)界實(shí)踐一樣,需要從頭開(kāi)始重新回放一遍。
?? 數(shù)據(jù)對(duì)比
在數(shù)據(jù)對(duì)比方面,NineData將其作為一個(gè)重要的產(chǎn)品能力進(jìn)行建設(shè),我們認(rèn)為數(shù)據(jù)對(duì)比對(duì)整個(gè)數(shù)據(jù)質(zhì)量的影響非常重要。因此,在結(jié)構(gòu)對(duì)比、數(shù)據(jù)對(duì)比以及訂正SQL生成等方面,我們?cè)诠δ苌献龅梅浅H?。其次,我們?huì)考慮數(shù)據(jù)對(duì)比對(duì)用戶的源庫(kù)和目標(biāo)庫(kù)帶來(lái)的負(fù)載。這些負(fù)載對(duì)于許多生產(chǎn)人員來(lái)說(shuō)非常重要。因此,我們制定了許多策略,例如:僅對(duì)不一致的數(shù)據(jù)進(jìn)行復(fù)檢,可以控制并發(fā)和限流,設(shè)置抽樣比例和條件過(guò)濾,僅對(duì)某一范圍內(nèi)的數(shù)據(jù)進(jìn)行比較等等。同時(shí),在性能方面,我們也做有特色的優(yōu)化。常規(guī)的數(shù)據(jù)對(duì)比會(huì)拉出源和目標(biāo)的所有數(shù)據(jù),就會(huì)耗費(fèi)大量計(jì)算資源和帶寬,因此我們做了比較優(yōu)雅的計(jì)算下推,只對(duì)不一致數(shù)據(jù)進(jìn)行回表再逐個(gè)字段對(duì)比。
3.4 可擴(kuò)展性,加速實(shí)時(shí)數(shù)倉(cāng)構(gòu)建
在可擴(kuò)展性方面,如何在NineData里面支持快速地新增數(shù)據(jù)源?意味著我們需要快速支持結(jié)構(gòu)和數(shù)據(jù)類(lèi)型的轉(zhuǎn)換,以及快速將通道產(chǎn)品化,這些都是我們的目前重要的思考因素。我們的整個(gè)設(shè)計(jì)思路就希望說(shuō),把原來(lái)的各種源到目標(biāo)的這種N乘M的這種拓?fù)浞椒?,能夠通過(guò)N加M的這種方式來(lái)實(shí)現(xiàn)。
我們先講一下數(shù)據(jù)類(lèi)型,因?yàn)閿?shù)據(jù)類(lèi)型可能會(huì)對(duì)于最終一致性,大家會(huì)更加的在意,業(yè)界無(wú)論是在FiveTran、Airbvte、NIFI、NineData等方面的開(kāi)源項(xiàng)目或者還是商用項(xiàng)目中,都定義了很多中間類(lèi)型。今天,NineData 也是定義了一些中間類(lèi)型,因?yàn)橹虚g類(lèi)型抽象得越好,它的種類(lèi)就越少,這意味著新增的數(shù)據(jù)源我們需要開(kāi)發(fā)convert 的工作量就越少。因此,如何更好地抽象到更少的樣本集里,是整體更好的抽象方法。
第二個(gè)抓取和寫(xiě)入模塊的插件化,最大程度復(fù)用代碼,提升產(chǎn)品化效率和穩(wěn)定性。我們提供了一個(gè)叫做關(guān)系數(shù)據(jù)提交框架。該框架把DDL/DML的庫(kù)、表、主鍵級(jí)別沖突等待,事務(wù)沖突等待,熱點(diǎn)合并和攢批優(yōu)化SQL都抽象出來(lái),使得后面接入的數(shù)據(jù)源可以天然地具備這些能力。
NineData支持快速地新增數(shù)據(jù)源的底層設(shè)計(jì)
當(dāng)前NineData已經(jīng)廣泛支持了MySQL、PostgreSQL、SQLServer、 Redis、MongoDB、Kafka、 ElasticSearch、SelectDB(Doris)等數(shù)據(jù)庫(kù),并在其系列上對(duì)接了主流的各云廠商產(chǎn)品。這里重點(diǎn)介紹下SelectDB和ClickHouse的特性設(shè)計(jì)。
NineData支持SelectDB和ClickHouse的特性設(shè)計(jì)
?? 結(jié)構(gòu)復(fù)制
NineData支持了MySQL所有DDL自動(dòng)同步到SelectDB,包括Distribute Key的自適應(yīng)和SQL改寫(xiě),跨庫(kù)的create table like SQL改寫(xiě)等。
?? 數(shù)據(jù)復(fù)制
我們定義了NineData中間類(lèi)型到SelectDB數(shù)據(jù)類(lèi)型的一一映射,實(shí)現(xiàn)數(shù)據(jù)類(lèi)型以及字符集映射,同時(shí)對(duì)于時(shí)間類(lèi)型,支持根據(jù)服務(wù)端Global TimeZone進(jìn)行跨時(shí)區(qū)數(shù)據(jù)遷移。
?? 數(shù)據(jù)處理
支持在復(fù)制過(guò)程中篩選同步對(duì)象,同時(shí)進(jìn)行操作類(lèi)型過(guò)濾(如只復(fù)制Insert不復(fù)制Delete)、基于數(shù)據(jù)計(jì)算進(jìn)行過(guò)濾、數(shù)據(jù)類(lèi)型轉(zhuǎn)換。
?? 性能優(yōu)化
除了復(fù)制框架支持的寫(xiě)入合并外,NineData數(shù)據(jù)復(fù)制支持以Stream模式進(jìn)行全量或增量寫(xiě)入,在MySQL->SelectDB(Doris)的測(cè)試中,云上同Region測(cè)試30個(gè)并發(fā)可以達(dá)到209MB/S,88W RPS(單行平均250B左右)。
NineData在ClickHouse的支持上也做了細(xì)致的設(shè)計(jì),結(jié)構(gòu)映射方面支持用戶選擇CollapsingMergeTree或ReplacingMergeTree進(jìn)行復(fù)制,支持了ClickHouse各數(shù)據(jù)類(lèi)型的映射,包括默認(rèn)值差異的處理。在性能方面,類(lèi)似于Airbyte的做法會(huì)將所有增量數(shù)據(jù)合成一個(gè)文件,因?yàn)镃lickHouse引擎中的許多增刪改都是變成直接增加,因此這種方式相對(duì)簡(jiǎn)單。但這種方式會(huì)帶來(lái)較大的延遲。因此,在實(shí)現(xiàn)過(guò)程中,我們考慮使用SQL的方式進(jìn)行提交,來(lái)了多少條就立即轉(zhuǎn)集批提交,可以動(dòng)態(tài)地控制,例如超過(guò)1000條或0.5秒,可以幾百毫秒就提交。此外,ClickHouse的Jdbc在解析每條語(yǔ)句時(shí)性能較差,因此我們進(jìn)行了一些優(yōu)化,采用批量提交的方式來(lái)提高性能。
3.5 高可用機(jī)制
?? 節(jié)點(diǎn)容災(zāi)
NineData所有組件采用高可用架構(gòu),規(guī)避單點(diǎn)風(fēng)險(xiǎn)。任務(wù)節(jié)點(diǎn)跑在分布式容器集群上,容災(zāi)系統(tǒng)自動(dòng)檢測(cè)異常任務(wù)、異常節(jié)點(diǎn)并自動(dòng)完成任務(wù)跨機(jī)漂移容災(zāi)。
?? 任務(wù)魯棒性
通過(guò)動(dòng)態(tài)內(nèi)存管理,結(jié)合動(dòng)態(tài)分片、動(dòng)態(tài)攢批、流式讀寫(xiě)、彈性擴(kuò)縮容等技術(shù),提升鏈路對(duì)負(fù)載的自適應(yīng)能力,有效保障任務(wù)穩(wěn)定性。
?? 斷點(diǎn)續(xù)傳
所有模塊支持定期位點(diǎn)記錄,包括結(jié)構(gòu)復(fù)制、全量復(fù)制、增量復(fù)制、數(shù)據(jù)對(duì)比;任意任務(wù)或服務(wù)節(jié)點(diǎn)異常,會(huì)基于斷點(diǎn)重啟任務(wù)。通過(guò)完善的重試、干預(yù)手段,提升劣網(wǎng)、數(shù)據(jù)高負(fù)載、硬件異常等場(chǎng)景下,鏈路的健壯性。
3.6 可觀測(cè)可干預(yù)能力
?? 可觀測(cè)性
(1)復(fù)制系統(tǒng)針對(duì)每個(gè)鏈路有有秒級(jí)日志打點(diǎn),可以查看秒級(jí)RPS,累計(jì)DDL/DML操作數(shù),隊(duì)列堆積數(shù)等指標(biāo),查看任務(wù)各模塊狀態(tài)。
(2)實(shí)時(shí)查看提交線程狀態(tài)。例如,如果有16個(gè)線程正在運(yùn)行,我們會(huì)顯示這16個(gè)線程分別在執(zhí)行哪條SQL,或者任務(wù)是否被DDL卡住等信息。可以通過(guò)類(lèi)似于MySQL Processlist的方式查看每個(gè)線程正在執(zhí)行哪些操作,已經(jīng)執(zhí)行了多長(zhǎng)時(shí)間等信息。在同步過(guò)程中,用戶可能會(huì)在目標(biāo)端、新的寫(xiě)入等可能會(huì)遇到一些問(wèn)題,導(dǎo)致這個(gè)兩邊寫(xiě)數(shù)據(jù)沖突等。因此,我們?cè)诳捎^測(cè)性方面不僅會(huì)將基本狀態(tài)完全透露給用戶,還會(huì)提供每個(gè)線程提交的語(yǔ)句。
?? 可干預(yù)能力
(1)修改同步對(duì)象,對(duì)于長(zhǎng)期復(fù)制任務(wù),用戶可能因?yàn)闃I(yè)務(wù)變化,需要添加新的對(duì)象到同步鏈路中,可以在界面上直接添加,后臺(tái)會(huì)創(chuàng)建新對(duì)象的結(jié)構(gòu)初始化、全量和增量,并在追上后合并同步對(duì)象到現(xiàn)有鏈路中。
(2)成熟的異常處理能力。對(duì)于異常任務(wù),NineData會(huì)顯示具體的報(bào)錯(cuò)信息,用戶可以進(jìn)行SQL級(jí)別的語(yǔ)句訂正和重試,或者跳過(guò),從而在少量目標(biāo)雙寫(xiě)或結(jié)構(gòu)不一致情況下,依然可以快速修復(fù)任務(wù),保障目標(biāo)數(shù)據(jù)的及時(shí)性和正確性。
NineData的可觀測(cè)可干預(yù)能力
3.6 能力數(shù)據(jù)復(fù)制小結(jié)
NineData數(shù)據(jù)復(fù)制的設(shè)計(jì)目標(biāo)是Any Where、Any Data、AnyTime的服務(wù)客戶的數(shù)據(jù)流動(dòng)場(chǎng)景。當(dāng)前主流數(shù)據(jù)源以及比較完整,兼容適配了各種復(fù)雜的網(wǎng)絡(luò)環(huán)境,深度適配VPN、專(zhuān)線、堡壘機(jī)、云廠商VPC和私網(wǎng)訪問(wèn)等方案,可以通過(guò)SaaS服務(wù)或?qū)偌悍绞椒?wù)客戶,保障數(shù)據(jù)安全和復(fù)制穩(wěn)定性。
4 典型用戶案例
4.1 國(guó)資云客戶
某大型國(guó)資云數(shù)據(jù)復(fù)制,客戶全國(guó)有30+Region,本身有很多數(shù)據(jù)需要同步,同時(shí)還要提供數(shù)據(jù)復(fù)制產(chǎn)品給他的客戶使用,比如該云的客戶從其他云廠商或自建系統(tǒng)中遷移上云。包括很多復(fù)雜的應(yīng)用場(chǎng)景,如遷移上云、跨云遷移、跨區(qū)域遷移、數(shù)據(jù)容災(zāi)、異地多活等業(yè)務(wù)場(chǎng)景。也面臨非常復(fù)雜的網(wǎng)絡(luò)環(huán)境,Region內(nèi)部/Region之間,和其他云廠商與客戶自有系統(tǒng)之間等各種鏈路。客戶在考察了市面上主流云廠商、數(shù)據(jù)復(fù)制專(zhuān)門(mén)廠商的方案后選擇了NineData。
大型國(guó)資云使用NineData數(shù)據(jù)復(fù)制的解決方案
4.2 跨境電商企業(yè)
某跨境電商企業(yè)通過(guò)NineData實(shí)現(xiàn)實(shí)時(shí)數(shù)倉(cāng),指導(dǎo)運(yùn)營(yíng)分析決策??蛻舻姆治龊瓦\(yùn)營(yíng)活動(dòng)基于ClickHouse。MySQL生產(chǎn)是分散在世界各地,比如日本、韓國(guó)等,他將各個(gè)地方的在線數(shù)據(jù)匯聚到國(guó)內(nèi)的ClickHouse進(jìn)行統(tǒng)一分析和運(yùn)營(yíng)決策。在這個(gè)過(guò)程中,他使用了我們的NineData 復(fù)制產(chǎn)品,NineData在跨地域的復(fù)制方面是具備一些優(yōu)勢(shì)。我們的解析模塊、讀取模塊和寫(xiě)入模塊可以異地部署,解析模塊能夠靠近用戶的源端,寫(xiě)入端能夠靠近用戶的目的端,從而實(shí)現(xiàn)了整個(gè)性能的更加優(yōu)化。
跨境電商企業(yè)通過(guò)NineData實(shí)現(xiàn)實(shí)時(shí)數(shù)倉(cāng),指導(dǎo)運(yùn)營(yíng)分析決策
4.3 大型地產(chǎn)企業(yè)
某大型地產(chǎn)企業(yè)使用NineData實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)管理。該企業(yè)擁有大量的數(shù)據(jù)庫(kù),但其開(kāi)發(fā)流程涉及許多合作伙伴,例如ISV或第三方軟件開(kāi)發(fā)提供商。因此,他們需要將數(shù)據(jù)源的權(quán)限控制委托給這些合作伙伴。在以往的人工管理過(guò)程中,權(quán)限管理變得非常復(fù)雜且流程繁瑣,難以統(tǒng)一管理。為此,NineData 提供了一個(gè)統(tǒng)一管理數(shù)據(jù)源的解決方案。通過(guò)該方案,統(tǒng)一納管了企業(yè)的所有數(shù)據(jù)源,開(kāi)發(fā)人員的賬戶初始化、權(quán)限申請(qǐng)以及數(shù)據(jù)開(kāi)發(fā)流程的可視化等均得到了優(yōu)化,從而大大提升了開(kāi)發(fā)效率和協(xié)同效率。
大型地產(chǎn)企業(yè)使用NineData實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)管理
最后,NineData 已經(jīng)和數(shù)據(jù)源、云廠商產(chǎn)生了很多密切的合作關(guān)系,并且取得云服務(wù)、信息安全管理、質(zhì)量管理等多項(xiàng)認(rèn)證,在多個(gè)行業(yè)的頭部企業(yè)中廣泛應(yīng)用。NineData 致力于為客戶提供更加穩(wěn)定、更智能的數(shù)據(jù)庫(kù)服務(wù),幫助客戶快速構(gòu)建統(tǒng)一的數(shù)據(jù)管理,讓每個(gè)人用好數(shù)據(jù)和云,歡迎大家體驗(yàn)使用。
NineData 已經(jīng)和數(shù)據(jù)源、云廠商產(chǎn)生了很多密切的合作關(guān)系
NineData是新一代的云原生智能數(shù)據(jù)管理平臺(tái),包含了數(shù)據(jù)復(fù)制、SQL開(kāi)發(fā)、數(shù)據(jù)備份以及數(shù)據(jù)對(duì)比等多種功能。NineData采用領(lǐng)先的云原生與AIGC技術(shù),為云與AI時(shí)代的架構(gòu)設(shè)計(jì)提供了智能數(shù)據(jù)管理平臺(tái)。作為業(yè)界首個(gè)支持跨云和本地IDC無(wú)縫打通的平臺(tái),能夠幫助客戶輕松完成數(shù)據(jù)上云、跨云數(shù)據(jù)實(shí)時(shí)傳輸、ETL、數(shù)據(jù)備份、企業(yè)級(jí)智能SQL開(kāi)發(fā)、數(shù)據(jù)庫(kù)研發(fā)規(guī)范、生產(chǎn)變更以及敏感數(shù)據(jù)管理等功能,從而讓客戶的數(shù)據(jù)使用更加安全高效。
審核編輯 黃宇
-
數(shù)據(jù)傳輸
+關(guān)注
關(guān)注
9文章
2015瀏覽量
66041 -
數(shù)據(jù)管理
+關(guān)注
關(guān)注
1文章
312瀏覽量
20018 -
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3922瀏覽量
66163
發(fā)布評(píng)論請(qǐng)先 登錄

SPI數(shù)據(jù)傳輸緩慢問(wèn)題求解

無(wú)線采發(fā)儀 振弦、溫度及多類(lèi)型信號(hào)采集 多種數(shù)據(jù)傳輸方式
信道帶寬與數(shù)據(jù)傳輸速率關(guān)系
請(qǐng)問(wèn)ldc1000在與主機(jī)進(jìn)行數(shù)據(jù)傳輸的過(guò)程中,數(shù)據(jù)傳輸速率設(shè)置為多大合適?
MPU數(shù)據(jù)傳輸協(xié)議詳解
ptp對(duì)實(shí)時(shí)數(shù)據(jù)傳輸的影響
水庫(kù)水雨情水位監(jiān)測(cè)系統(tǒng):實(shí)時(shí)數(shù)據(jù)傳輸功能保障水庫(kù)安全

波特率對(duì)實(shí)時(shí)數(shù)據(jù)傳輸的影響
socket 數(shù)據(jù)傳輸效率提升技巧
LORA模塊的數(shù)據(jù)傳輸速率
HTTP海外加速技術(shù):加速跨國(guó)數(shù)據(jù)傳輸,提升用戶體驗(yàn)
網(wǎng)絡(luò)數(shù)據(jù)傳輸速率的單位是什么

評(píng)論