數(shù)據(jù)倉庫服務 GaussDB(DWS)核心技術
GaussDB(DWS)采用分布式shared-nothing集群架構,支持行列混合存儲計算,集成高可用、高可靠、高安全、高可擴展、智能化技術棧。
Shared-nothing架構
GaussDB(DWS)各個數(shù)據(jù)庫實例(DN)擁有自己的CPU、內(nèi)存和存儲空間,實例之間不共享系統(tǒng)資源。
基于Shared-nothing/MPP的對等并行計算模型可以充分利用CPU/IO/Mem等資源,獲得極致的運算性能和線性的可擴展性,從而支持PB級數(shù)據(jù)規(guī)模。
分布式存儲
GaussDB(DWS)采用水平分表的方式,將數(shù)據(jù)表格的元組按照一定的分布策略分散存儲到多個節(jié)點。查詢的時候可以通過查詢條件過濾不必要的數(shù)據(jù),快速定位到數(shù)據(jù)存儲位置,從而極大提升數(shù)據(jù)庫性能。
在水平分表的基礎上,GaussDB(DWS)支持數(shù)據(jù)分區(qū)(Partition),即根據(jù)表的一列或者多列,將要插入表的記錄分為不重疊的若干個范圍,為每個范圍創(chuàng)建一個分區(qū),用來存儲相應的數(shù)據(jù)。
表2-1描述了在不同場景下,基于時間分片的方式分區(qū)后帶來的收益。
表2-1 分區(qū)收益
|
場景描述
|
收益
|
|---|---|
當表中訪問率較高的行位于一個單獨分區(qū)或少數(shù)幾個分區(qū)時。 |
大幅減少搜索空間,從而提升訪問性能。 |
當需要查詢或更新一個分區(qū)的大部分記錄時。 |
僅需要連續(xù)掃描對應分區(qū),而非掃描整個表,因此可大幅提升性能。 |
當需要大量加載或者刪除的記錄位于一個單獨分區(qū)或少數(shù)幾個分區(qū)時。 |
可直接讀取或刪除對應分區(qū),從而提升處理性能;同時由于避免大量零散的刪除操作,可減少清理碎片工作量。 |
數(shù)據(jù)分區(qū)帶來的好處如下:
- 改善可管理性
利用分區(qū),可以將表和索引劃分為一些更小、更易管理的單元。這樣,數(shù)據(jù)庫管理員在進行數(shù)據(jù)管理時就能采取“分而治之”的方法。 有了分區(qū),維護操作可以專門針對表的特定部分執(zhí)行。
- 可提升刪除操作的性能
刪除數(shù)據(jù)時可以刪除整個分區(qū),與分別刪除每行相比,這種操作非常高效和快速。
- 改善查詢性能
通過限制要檢查或操作的數(shù)據(jù)數(shù)量,分區(qū)可帶來許多性能優(yōu)勢,包括:
--分區(qū)剪枝:
分區(qū)剪枝(也稱為分區(qū)消除)是CN在執(zhí)行時過濾掉不需要掃描的分區(qū),只對相關的分區(qū)進行掃描的技術。分區(qū)剪枝通??梢詫⒉樵冃阅芴岣呷舾蓴?shù)量級
--智能化分區(qū)聯(lián)接:
通過使用一種稱為智能化分區(qū)聯(lián)接的技術,分區(qū)還可以改善多表聯(lián)接的性能。當將兩個表聯(lián)接在一起,并且至少其中一個表使用聯(lián)接鍵進行分區(qū)時,可以應用智能化分區(qū)聯(lián)接。智能化分區(qū)聯(lián)接將一個大型聯(lián)接分為多個較小的聯(lián)接,這些較小的聯(lián)接包含與聯(lián)接的表“相同”的數(shù)據(jù)集。這里,“相同”定義為恰好包含聯(lián)接的兩端中相同的分區(qū)鍵值集,因此可以確保只有這些“相同”數(shù)據(jù)集的聯(lián)接才會有效,而不必考慮其他數(shù)據(jù)集。
全并行計算
GaussDB(DWS)實現(xiàn)了一套高效能的分布式執(zhí)行引擎,充分利用集群中各節(jié)點的資源,發(fā)揮并行計算的極致性能。
圖2-1 GaussDB(DWS)的全并行計算
如圖2-1,GaussDB(DWS)的全并行計算核心技術如下:
- MPP節(jié)點并行
分布式執(zhí)行框架,VPP用戶態(tài)TCP協(xié)議,支持>1000服務器,萬級CPU核并行計算。
- SMP(Symmetric Multi-Processing)算子并行
采用多線程并行算法執(zhí)行同一個SQL,充分利用多核CPU資源,支持眾核(>64 cores),NUMA架構優(yōu)化。
- SIMD(Single Instruction Multiple Data)指令級并行
一個指令執(zhí)行一批數(shù)據(jù)的操作,支持X86,ARM指令。
- LLVM(Low Level Virtual Machine)動態(tài)編譯
將熱點函數(shù)預編譯成機器碼,減少SQL執(zhí)行指令數(shù),提升性能。
行列混合存儲與向量化執(zhí)行
GaussDB(DWS)實現(xiàn)了行存儲和列存儲兩種存儲引擎,用戶可以根據(jù)應用場景在建表時選擇合適的存儲方式,如圖2-2所示。
圖 2-2 GaussDB(DWS)行列混合存儲引擎
其中列存儲引擎支持數(shù)據(jù)壓縮,對于非活躍的早期數(shù)據(jù)可以通過壓縮來減少空間占用,降低采購和運維成本。壓縮方式支持Delta Value Encoding、Dictionary、RLE 、LZ4、ZLIB等壓縮算法,且能夠根據(jù)數(shù)據(jù)特征自適應的選擇壓縮算法,平均壓縮比7:1。壓縮數(shù)據(jù)可直接訪問,對業(yè)務透明,極大縮短歷史數(shù)據(jù)訪問的準備時間。
GaussDB(DWS)的向量化執(zhí)行引擎一次處理一批元組,極大提升處理效率。支持行列存混合處理,當查詢數(shù)據(jù)同時包括行存表和列存表時,支持行列兩種引擎的自動轉換,達到性能的最優(yōu)化。
主備從HA技術
傳統(tǒng)的兩副本策略(一主一備)的容錯能力較差,節(jié)點發(fā)生故障后,為了服務可用性,一般都會選擇讓正常節(jié)點繼續(xù)提供服務,在故障節(jié)點恢復前數(shù)據(jù)只有單副本運行。一旦正常主機再次發(fā)生故障,將造成數(shù)據(jù)丟失的嚴重后果。三副本策略可以避免這一問題,但帶來了更多的存儲成本開銷。GaussDB(DWS)采用主備從高可用技術,使得集群在任意單點故障時仍保持兩副本可用,相比傳統(tǒng)三副本節(jié)約了三分之一的存儲空間,但數(shù)據(jù)可靠性基本持平。
圖2-3主備從復制原理示意圖
如圖2-3所示,GaussDB(DWS)引入備機和從備的概念,正常情況下主機和備機通過日志流復制和數(shù)據(jù)頁流復制進行強同步,主機與從備僅保持連接并不發(fā)送日志和數(shù)據(jù),因此從備不占用額外存儲資源。當備機發(fā)生故障時,主機自動感知,將未完成同步的日志和數(shù)據(jù)發(fā)送給從備,并保持主從強同步。主備同步向主從同步的切換在內(nèi)核底層HA實現(xiàn),事務層并不感知,因此不會造成任何報錯和不一致。
同理,當主機發(fā)生故障時,由集群管理感知并仲裁備機升主,升主后的備機連接從備進行主從強同步。因此,在一組DN內(nèi)發(fā)生單點故障后,不會影響服務可用性,同時數(shù)據(jù)仍然有兩份副本的可靠性保障。
在線擴容
GaussDB(DWS)提供最多達2048節(jié)點的擴展能力,通過加入新的節(jié)點,集群的存儲容量和運算能力能夠得到線性提升。
GaussDB(DWS)采用Node Group技術,支持多表并行擴容,擴容速度高達400G/小時/新增節(jié)點。其擴容過程如圖2-4所示。
圖2-4 擴容過程
GaussDB(DWS)在線擴容具有如下特點:
- 擴容不中斷業(yè)務。
擴容過程中支持數(shù)據(jù)持續(xù)入庫、查詢業(yè)務不中斷。
- 一致性Hash技術和多表并行擴容等技術,助力擴容性能提升。
采用一致性Hash技術使得重分布過程中需要遷移的數(shù)據(jù)量最小。
重分布過程中支持多表并行及用戶自主選擇表的重分布順序。
支持擴容進度查詢,實時監(jiān)控擴容進度。
- 隨著節(jié)點數(shù)增加,集群性能線性增長。
在全并行分布式架構下,隨著節(jié)點數(shù)的增加,集群的數(shù)據(jù)加載性能、業(yè)務處理性能和容量可線性擴展。
透明安全技術
GaussDB(DWS)支持對數(shù)據(jù)進行透明加密,加密解密的過程用戶無感知。每個集群有一個CEK(集群秘鑰),每個數(shù)據(jù)庫采用單獨配置的DEK(數(shù)據(jù)庫加密密鑰)加密保護,DEK使用CEK加密保護,保證秘鑰安全。密鑰通過Kerbores服務申請和加解密,加密算法通過配置項統(tǒng)一配置。目前支持AES、SM4算法,其中SM4算法在hi 1620以上版本芯片中支持硬件加速。
大數(shù)據(jù)中蘊藏巨大價值的同時,也帶來了隱私信息保護方面的問題。GaussDB(DWS)支持客戶以表的列為單元創(chuàng)建脫敏策略,客戶可針對業(yè)務中的敏感數(shù)據(jù)進行策略創(chuàng)建,敏感數(shù)據(jù)的界定由客戶結合自身業(yè)務場景識別。制定脫敏策略后,只有管理員和表對象的owner才能訪問原始數(shù)據(jù)。同時,脫敏的數(shù)據(jù)可以參與實際運算及使用,僅在數(shù)據(jù)庫服務最終返回結果時脫敏。
以圖2-5為例,用戶數(shù)據(jù)中每個人員的工資、email和手機號碼均為敏感數(shù)據(jù),包含了用戶的隱私信息,如果明文顯示,將會暴露用戶的隱私,帶來一系列問題。經(jīng)過透明脫敏處理后,普通用戶查看到的數(shù)據(jù)均被掩碼顯示,從而保護了用戶的隱私。
圖2-5 數(shù)據(jù)脫敏效果
數(shù)據(jù)脫敏的關鍵技術如下:
- 策略可配置
客戶可結合自身業(yè)務場景識別敏感數(shù)據(jù)并使用DDL在表的指定列創(chuàng)建脫敏策略。
- 策略可擴展
內(nèi)置數(shù)值、字符、時間類型脫敏函數(shù),支持用戶自定義脫敏函數(shù)。
- 訪問控制
制定脫敏策略后,只有管理員和表對象的owner才能訪問原始數(shù)據(jù)。
- 數(shù)據(jù)可用性
脫敏數(shù)據(jù)可以參與實際運算及使用,僅在最終返回結果時脫敏。
SQL自診斷
傳統(tǒng)的SQL優(yōu)化需要較多的前期工作收集信息,對優(yōu)化人員的要求較高,尤其是分布式數(shù)據(jù)庫,需要豐富的經(jīng)驗和深厚的知識才能夠定位出問題SQL。如圖2-6所示,GaussDB(DWS)在執(zhí)行SQL的過程中能夠智能化地分析發(fā)生的性能問題,以通俗易懂的方式記錄和呈現(xiàn)給用戶,實現(xiàn)自動化地診斷,幫助用戶快速地識別和定位問題,方便性能調優(yōu)。
圖2-6 SQL自診斷技術原理