GBase新聞
GBase 8c分布式核心技術(shù)初揭秘—在線擴容
隨著互聯(lián)網(wǎng)時代的發(fā)展,聯(lián)網(wǎng)業(yè)務(wù)高峰期間可能實時面臨高并發(fā)的訪問量。飛速增長的業(yè)務(wù)需求使得數(shù)據(jù)庫計算和存儲壓力急劇增大,負載峰值不斷攀升,將嚴重影響業(yè)務(wù)系統(tǒng)的正常訪問。為了解決此類問題,南大通用GBase 8c多模多態(tài)分布式數(shù)據(jù)庫增強了其在線擴容/縮容的能力。
在線擴容/縮容
GBase 8c因其優(yōu)秀的在線擴容/縮容能力,能夠全面覆蓋用戶流量低高峰期的業(yè)務(wù)場景。用戶根據(jù)業(yè)務(wù)需求、策略等設(shè)置伸縮規(guī)則。在業(yè)務(wù)需求增長時,系統(tǒng)自動增加數(shù)據(jù)庫節(jié)點以保證計算存儲能力;在業(yè)務(wù)需求下降時,系統(tǒng)自動減少數(shù)據(jù)庫節(jié)點以節(jié)約成本。
擴容/縮容數(shù)據(jù)流圖
按照流程方式劃分,GBase 8c在線擴容/縮容可分為普通表、Hashbucket表兩種。默認創(chuàng)建普通表。普通表適合數(shù)據(jù)量小、數(shù)據(jù)文件有序的場景;Hashbucket表適合數(shù)據(jù)量大、數(shù)據(jù)文件繁雜、高并發(fā)的場景,在此類場景下,Hashbucket表的擴容縮容和查詢性能更優(yōu)越。
以下分別簡述普通表和Hashbucket表在線擴容的原理。
普通表在線擴容原理
GBase 8c僅在數(shù)據(jù)重分布階段中表切換操作時,出現(xiàn)秒級或毫秒級的短暫下線。擴容其余時間內(nèi)均支持業(yè)務(wù)在線。存儲節(jié)點擴容主要分為集群加節(jié)點、數(shù)據(jù)重分布兩個階段。
1. 集群加節(jié)點階段。此階段主要完成新節(jié)點的安裝、元數(shù)據(jù)同步、啟動等操作。
首先將新節(jié)點初始化并加到集群中,然后將老節(jié)點的元數(shù)據(jù)信息都同步到新節(jié)點中,為后續(xù)數(shù)據(jù)重分布階段做準備。在元數(shù)據(jù)同步后啟動、運行新節(jié)點,并切換Installation Group為新建的Node Group。
2. 數(shù)據(jù)重分布階段。此階段主要完成存儲節(jié)點擴容后數(shù)據(jù)的重分布,以及切換元數(shù)據(jù)。
首先在數(shù)據(jù)重分布之前,進行檢查新舊Node Group、創(chuàng)建臨時表和delete_delta表等準備工作。然后采用自研Hash數(shù)據(jù)分布算法,完成基線數(shù)據(jù)重分布操作,并追增擴容期間產(chǎn)生的業(yè)務(wù)數(shù)據(jù),完成增量數(shù)據(jù)重分布。在最后一輪數(shù)據(jù)追增完成后,關(guān)閉數(shù)據(jù)追增模式,并完成表切換、刪除臨時列、更新Node Group等收尾操作。
HashBucket表在線擴容原理
此外,GBase 8c還支持創(chuàng)建HashBucket表。創(chuàng)建命令如下:
CREATE TABLE tab_name(rel_name rel_type) with(segment=on,bashbucket=on);
HashBucket表使用段頁式存儲方式,以解決數(shù)據(jù)文件多的問題。
每一個bucketid一段連續(xù)存儲,相同的bucketid存儲在相同文件。因此在線擴容/縮容進行數(shù)據(jù)搬遷時,僅需搬遷發(fā)生變化的bucketid對應(yīng)的塊文件。在表切換、交換物理文件時,僅需在存儲結(jié)構(gòu)進行修改。從而,數(shù)據(jù)搬遷量大大減少。
Hashbucket表擴容數(shù)據(jù)流圖
Hashbucket表擴容數(shù)據(jù)流圖如上所示。例如,擴容前,bucketid為1、2、3的數(shù)據(jù)存放在DN1節(jié)點,bucketid為4、5、6的數(shù)據(jù)存放在DN2節(jié)點。
擴容時,如果新節(jié)點不在原集群中,則需將新增的DN3加到集群中(如圖步驟①所示)。根據(jù)數(shù)據(jù)分布算法生成的新map,僅將bucketid為3、6的數(shù)據(jù)由老節(jié)點搬遷至新增的DN3節(jié)點(如圖步驟②所示),其他bucketid值的數(shù)據(jù)無需搬遷。由此看出,數(shù)據(jù)搬遷時只需移動發(fā)生變化的bucketid對應(yīng)的數(shù)據(jù),而非所有節(jié)點的數(shù)據(jù)重分布,減少擴容過程中的搬遷數(shù)據(jù)量,有效提高了擴容速率。
關(guān)于 GBase 8c
GBase 8c是基于openGauss3.0構(gòu)建的一款多模多態(tài)的分布式數(shù)據(jù)庫,支持行存、列存、內(nèi)存等多種存儲模式和單機、主備式、分布式等多種部署形態(tài)。GBase 8c具備高性能、高可用、彈性伸縮、高安全性等特性,可以部署在物理機、虛擬機、容器、私有云和公有云,為關(guān)鍵行業(yè)核心系統(tǒng)、互聯(lián)網(wǎng)業(yè)務(wù)系統(tǒng)和政企業(yè)務(wù)系統(tǒng)提供安全、穩(wěn)定、可靠的數(shù)據(jù)存儲和管理服務(wù)。