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