對(duì)外經(jīng)濟(jì)貿(mào)易大學(xué)統(tǒng)計(jì)學(xué)院在職人員高級(jí)課程研修班 崔校郡
分布式數(shù)據(jù)庫(kù)管理平臺(tái)主要是快速部署分布式數(shù)據(jù)庫(kù)實(shí)例的管理平臺(tái),包含數(shù)據(jù)庫(kù)基本功能、高性能、信息安全性、維護(hù)性、易用性、對(duì)外接口、高可用、擴(kuò)展多方面的功能,與傳統(tǒng)的Oracle數(shù)據(jù)庫(kù)對(duì)比,更加體現(xiàn)在高可用和擴(kuò)展性、云計(jì)算的彈性擴(kuò)展上,因此功能設(shè)計(jì)與測(cè)試方法上與Oracle也存在差異,在設(shè)計(jì)測(cè)試用例上,著重設(shè)計(jì)單點(diǎn)機(jī)房高可用、跨機(jī)房高可用、網(wǎng)絡(luò)故障、混沌測(cè)試、數(shù)據(jù)一致性的,分布式事務(wù)、備份恢復(fù)的功能測(cè)試用例。
信息技術(shù)的快速發(fā)展數(shù)據(jù)也呈現(xiàn)了膨脹式增長(zhǎng),傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)無(wú)法滿足業(yè)務(wù)訪問(wèn)需求,開始出現(xiàn)不同的解決方案對(duì)Oracle形成了有力挑戰(zhàn),有的產(chǎn)品是基于分布式文件系統(tǒng)[1],有的是基于關(guān)系型數(shù)據(jù)庫(kù)改造而成的分布式數(shù)據(jù)庫(kù),例如百度的蓋亞,各種數(shù)據(jù)庫(kù)產(chǎn)品的穩(wěn)定性、功能集存在差異,如何選出綜合系統(tǒng)性適合自己業(yè)務(wù)的產(chǎn)品是非常重要的,必須通過(guò)一套可行的方法論指導(dǎo),本文就分布式數(shù)據(jù)庫(kù)管理平臺(tái)的功能設(shè)計(jì)和測(cè)試方法進(jìn)行研究。
分布式數(shù)據(jù)庫(kù)的典型特征是基于CAP、BASE、最終一致性的三大基石設(shè)計(jì)和開發(fā)的,對(duì)于不同的應(yīng)用類型進(jìn)行功能取舍,在一致性、可用性、分區(qū)容錯(cuò)性進(jìn)行取舍,容忍數(shù)據(jù)庫(kù)從基本可用到軟狀態(tài)、最終一致性,傳統(tǒng)的集中式數(shù)據(jù)庫(kù)選擇的是CA,既一致性和可用性放到同一個(gè)實(shí)例中保障,分布式數(shù)據(jù)庫(kù)有更多的選擇,即可以選擇CA,也可以選擇BASE、AP。在節(jié)點(diǎn)層的存儲(chǔ)引擎上有的選擇列式存儲(chǔ)、行列混合存儲(chǔ)、智能索引技術(shù),在運(yùn)算分析型場(chǎng)景中性能非常優(yōu)越;分布式數(shù)據(jù)庫(kù)由于采用了數(shù)據(jù)水平分布架構(gòu),存儲(chǔ)與計(jì)算耦合,存儲(chǔ)與計(jì)算雙分布式,網(wǎng)卡采用RDMA技術(shù),使得通過(guò)水平擴(kuò)展節(jié)點(diǎn)帶來(lái)的性能飛躍接近線性增長(zhǎng),在進(jìn)行帶分區(qū)鍵的數(shù)據(jù)檢索、更新業(yè)務(wù)中,吞吐量增長(zhǎng)效果非常明顯,成為了在TB級(jí)在線運(yùn)算數(shù)據(jù)量的場(chǎng)景中首選[2]。
數(shù)據(jù)庫(kù)對(duì)象實(shí)際包含數(shù)據(jù)庫(kù)用戶、數(shù)據(jù)庫(kù)、表、索引、視圖、權(quán)限、操作符、函數(shù)、存儲(chǔ)過(guò)程、序列,這些對(duì)象的創(chuàng)建和使用規(guī)則方法是否符合標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)SQL規(guī)范標(biāo)準(zhǔn)(SQL∶2003-SQL∶2011),對(duì)外提供的訪問(wèn)接口,管理界面。
數(shù)據(jù)庫(kù)管理功能測(cè)試的方法和側(cè)重點(diǎn)與傳統(tǒng)集中式數(shù)據(jù)庫(kù)不一樣,分布式數(shù)據(jù)庫(kù)與集中式數(shù)據(jù)庫(kù)采取的設(shè)計(jì)原則和理論基石與集中式數(shù)據(jù)庫(kù)是截然不同的,使用場(chǎng)景不同采取的典型配置也有差異,在集中式的數(shù)據(jù)庫(kù)中以上對(duì)象的管理功能必須是齊全的,是符合數(shù)據(jù)庫(kù)范式的完整關(guān)系型數(shù)據(jù)庫(kù),既能滿足可用性,也保障一致性,但在分布式數(shù)據(jù)庫(kù)中,滿足數(shù)據(jù)的分布式存儲(chǔ)后,管控界面、訪問(wèn)接口、表的存儲(chǔ)、用戶管理、權(quán)限管理是必須的之外,視圖、操作符、函數(shù)、存儲(chǔ)過(guò)程、序列是可選的。分布式事務(wù)在分布式的產(chǎn)品中是非常難實(shí)現(xiàn)并且影響事務(wù)性能的[3],有的產(chǎn)品采用了兩階段提交,有的產(chǎn)品采用了三階段提交,有的產(chǎn)品使用MQ作為分布式事務(wù)串行化執(zhí)行隊(duì)列。
著重指出的是,從集中式數(shù)據(jù)庫(kù)過(guò)度到分布式數(shù)據(jù)庫(kù)過(guò)程中不只是數(shù)據(jù)庫(kù)管理系統(tǒng)本身的改變,更多是開發(fā)方法和方案的改變,從應(yīng)用層進(jìn)行改革,單從數(shù)據(jù)庫(kù)產(chǎn)品替換不能解決集中式數(shù)據(jù)庫(kù)遇到的問(wèn)題[2],視圖、函數(shù)、存儲(chǔ)過(guò)程需要全局視圖,全局一致性的維護(hù)帶來(lái)系統(tǒng)開銷和一致性檢查的強(qiáng)制等待時(shí)間開銷,單事務(wù)響應(yīng)時(shí)間必然要多于集中式數(shù)據(jù)庫(kù),如果不選擇全局性的視圖、函數(shù)、存儲(chǔ)過(guò)程,分布式數(shù)據(jù)庫(kù)能通過(guò)節(jié)點(diǎn)數(shù)的水平擴(kuò)展,提升整體吞吐量和系統(tǒng)性能線性擴(kuò)展。
數(shù)據(jù)庫(kù)的性能主要體現(xiàn)在數(shù)據(jù)的檢索和更新效率上,分布式數(shù)據(jù)庫(kù)采用了數(shù)據(jù)水平分布,數(shù)據(jù)哈希分布到多個(gè)節(jié)點(diǎn)上并發(fā)運(yùn)算,性能管理主要涉及到數(shù)據(jù)的導(dǎo)出、導(dǎo)入加載,單事務(wù)的響應(yīng)時(shí)間,高并發(fā)情況下的平均響應(yīng)時(shí)間以及每秒事務(wù)處理能力,每個(gè)事務(wù)的SQL數(shù)量以及讀寫比例。
測(cè)試的側(cè)重點(diǎn)在于業(yè)務(wù)場(chǎng)景的分析與測(cè)試工具的選取上,業(yè)務(wù)場(chǎng)景主要是分析讀寫比例,數(shù)據(jù)量、表的數(shù)量、表的行數(shù),表的平均行長(zhǎng)度,字段類型,SQL的類型以及典型特征,選取與業(yè)務(wù)特征相近的測(cè)試工具,分布式數(shù)據(jù)庫(kù)的優(yōu)勢(shì)和劣勢(shì)都非常明顯,并不是通用在所有場(chǎng)景中,用其長(zhǎng)處,規(guī)避其劣勢(shì)是性能測(cè)試中的重點(diǎn),避免跨實(shí)例的事務(wù)和連接能夠大大提升分布式數(shù)據(jù)庫(kù)的并發(fā)度和吞吐量,如果涉及到跨實(shí)例的事務(wù)和連接,業(yè)務(wù)層需要做一定的改造才能用好分布式數(shù)據(jù)庫(kù),否則造成資源浪費(fèi),也不能取得良好的效果,對(duì)于分析型的場(chǎng)景中,多個(gè)節(jié)點(diǎn)并行運(yùn)算,在線運(yùn)算的數(shù)據(jù)量往往是TB級(jí)[1],運(yùn)算所占的時(shí)間在整體業(yè)務(wù)執(zhí)行時(shí)間中的比例大,這種場(chǎng)景下分布式的數(shù)據(jù)庫(kù)并行運(yùn)算的連接查詢的性能遠(yuǎn)比集中式數(shù)據(jù)庫(kù)高數(shù)倍。測(cè)試用例需要考察數(shù)據(jù)分布在多個(gè)節(jié)點(diǎn)是否均勻,各個(gè)節(jié)點(diǎn)的壓力是否均衡,CPU、內(nèi)存和磁盤資源的利用率是否均勻,如果出現(xiàn)數(shù)據(jù)傾斜是否為分布鍵選取不合理導(dǎo)致,最佳的效果是數(shù)據(jù)分布均勻,各個(gè)節(jié)點(diǎn)資源利用率均勻,隨著壓力的增加,各個(gè)節(jié)點(diǎn)壓力增長(zhǎng),帶來(lái)整體的每秒處理事務(wù)數(shù)增加,性能呈現(xiàn)增長(zhǎng)趨勢(shì),到達(dá)瓶頸后開始回落并穩(wěn)定在一定的性能水平值。
分布式數(shù)據(jù)庫(kù)與集中式數(shù)據(jù)庫(kù)一樣,信息安全包括用戶訪問(wèn)控制、身份鑒別、審計(jì)日志、數(shù)據(jù)加密和傳輸加密,因部分場(chǎng)景需要用到數(shù)據(jù)不落地加密,需要鑒別數(shù)據(jù)庫(kù)產(chǎn)品是否具備這樣的功能。
信息安全測(cè)試的重點(diǎn)在于用戶訪問(wèn)的密碼存儲(chǔ)是否已經(jīng)加密,分布式的集群往往由集群層和節(jié)點(diǎn)層組成或者部署中間件負(fù)責(zé)數(shù)據(jù)路由解析,會(huì)存在集群層或者中間件通過(guò)密碼訪問(wèn)節(jié)點(diǎn)層數(shù)據(jù)庫(kù)的情況,需要確保中間件或者集群層的賬號(hào)密碼加密存儲(chǔ),密碼復(fù)雜度是否滿足國(guó)家安全標(biāo)準(zhǔn)需要。
維護(hù)功能主要是分布式數(shù)據(jù)庫(kù)在日常運(yùn)行過(guò)程中,能否提供必要的工具檢查錯(cuò)誤信息、日志信息,能夠通過(guò)工具進(jìn)行性能檢測(cè)、運(yùn)維告警、版本升級(jí)和降級(jí),數(shù)據(jù)庫(kù)參數(shù)設(shè)置,能否通過(guò)一鍵式定位問(wèn)題流程,系統(tǒng)能否具備自我運(yùn)維的功能。
測(cè)試的重點(diǎn)管控面必須具備全局統(tǒng)一視圖運(yùn)維多個(gè)節(jié)點(diǎn),并能針對(duì)每個(gè)節(jié)點(diǎn)進(jìn)行詳細(xì)的運(yùn)維,例如一套分布式集群的運(yùn)行狀態(tài)、數(shù)據(jù)量、并發(fā)度、數(shù)據(jù)訪問(wèn)流量等信息都能夠統(tǒng)一看到,同時(shí)又能看到節(jié)點(diǎn)上的這些信息。在出現(xiàn)問(wèn)題報(bào)警后,根據(jù)報(bào)警信息能夠在運(yùn)維系統(tǒng)里進(jìn)行一鍵式故障定位,根據(jù)故障定位結(jié)果,提供快速問(wèn)題解決的建議。運(yùn)維工具本身具備自我運(yùn)維的能力。
當(dāng)某個(gè)數(shù)據(jù)庫(kù)進(jìn)程故障時(shí)保障對(duì)外提供的數(shù)據(jù)庫(kù)服務(wù)不受到影響或者在有限的時(shí)間內(nèi)服務(wù)恢復(fù)且數(shù)據(jù)不丟失,高可用需要包括數(shù)據(jù)路由節(jié)點(diǎn)、集群層、數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)、管控進(jìn)程、網(wǎng)絡(luò)、磁盤、數(shù)據(jù)備份的高可用,對(duì)于存在多機(jī)房的系統(tǒng)也包括整機(jī)房的高可用。
在測(cè)試中針對(duì)每種高可用環(huán)境,需要構(gòu)建程序進(jìn)程故障、掛起、軟切換的軟故障,也需要構(gòu)建操作系統(tǒng)宕機(jī)、物理宕機(jī)、網(wǎng)絡(luò)中斷、機(jī)房掉電等硬故障情況下的故障用例,故障切換完成后,需要校驗(yàn)數(shù)據(jù)的一致性,需要從理論上分析產(chǎn)品是否具備高可用數(shù)據(jù)一致性的能力,并且通過(guò)故障驗(yàn)證這種能力。所有的高可用故障切換后最主要的是保障數(shù)據(jù)的一致不丟失,采用關(guān)系型數(shù)據(jù)庫(kù)作為存儲(chǔ)節(jié)點(diǎn)構(gòu)建的分布式數(shù)據(jù)庫(kù)都有多個(gè)存儲(chǔ)節(jié)點(diǎn),每個(gè)存儲(chǔ)節(jié)點(diǎn)都是有只讀副本以及備份節(jié)點(diǎn)提供服務(wù),當(dāng)存儲(chǔ)節(jié)點(diǎn)故障后,高可用的管控程序會(huì)組織所有副本選主,新主庫(kù)與舊主庫(kù)之間數(shù)據(jù)一致的保障通過(guò)主副本的數(shù)據(jù)同步完成,主副本的同步如果是庫(kù)外回放事務(wù)日志的方法,例如MySQL的事務(wù)日志,主庫(kù)會(huì)等待副本收到事務(wù)日志的接收應(yīng)答后才會(huì)提交并入庫(kù)刷盤,保障副本事務(wù)與主庫(kù)一致,副本如果收到事務(wù)日志但回放日志的速度與主庫(kù)之間存在延遲,在切換過(guò)程中管控程序會(huì)等待副本回放完畢事務(wù)日志,避免數(shù)據(jù)差異。
備份、恢復(fù)的測(cè)試用例需要包括全量備份、增量備份,全量恢復(fù)和增量恢復(fù),是否包含閃回,觀察產(chǎn)品是基于事務(wù)日志挖掘的閃回,還是基于存儲(chǔ)引擎本身的閃回,分布式數(shù)據(jù)庫(kù)的閃回需要考察分布式事務(wù)的協(xié)調(diào)多個(gè)存儲(chǔ)節(jié)點(diǎn)的閃回,是閃回過(guò)程非常容易出問(wèn)題的點(diǎn),備份恢復(fù)必須做到分布式事務(wù)的一致性。
分布式數(shù)據(jù)庫(kù)的最大特性是橫向擴(kuò)展能力,未達(dá)到存儲(chǔ)節(jié)點(diǎn)的性能瓶頸前,橫向擴(kuò)展中間件或者集群層節(jié)點(diǎn)數(shù),能夠提升系統(tǒng)的事務(wù)處理能力,在達(dá)到存儲(chǔ)節(jié)點(diǎn)瓶頸后,擴(kuò)展存儲(chǔ)節(jié)點(diǎn)也可以提升系統(tǒng)的事務(wù)處理能力,節(jié)點(diǎn)數(shù)的水平擴(kuò)展,能夠使整體性能達(dá)到接近線性增長(zhǎng)的能力,在中間件節(jié)點(diǎn)數(shù)擴(kuò)容以及存儲(chǔ)節(jié)點(diǎn)擴(kuò)容過(guò)程中業(yè)務(wù)讀寫無(wú)感,中間件節(jié)點(diǎn)的擴(kuò)容不涉及到數(shù)據(jù)的重分布,存儲(chǔ)節(jié)點(diǎn)數(shù)擴(kuò)容可能引起已有的數(shù)據(jù)的重分布,產(chǎn)品最好能夠提供可選的能力,增加存儲(chǔ)節(jié)點(diǎn)后可以選擇以后數(shù)據(jù)存儲(chǔ)分布不變。
擴(kuò)展性的測(cè)試重點(diǎn)應(yīng)該構(gòu)建帶業(yè)務(wù)讀寫的擴(kuò)容、縮容用例,觀察數(shù)據(jù)量與擴(kuò)縮容時(shí)間的關(guān)系,以及需要觀察對(duì)業(yè)務(wù)讀寫的影響,包括阻塞讀、阻塞寫的時(shí)間,擴(kuò)縮容后數(shù)據(jù)一致檢查,需要說(shuō)明的是隨著節(jié)點(diǎn)數(shù)的擴(kuò)容和不斷增加,單集群的單筆事務(wù)處理時(shí)長(zhǎng)可能會(huì)變長(zhǎng),數(shù)據(jù)分布節(jié)點(diǎn)數(shù)越多,分布式事務(wù)需要協(xié)調(diào)的節(jié)點(diǎn)數(shù)越多,耗費(fèi)時(shí)間越久,因此當(dāng)單筆事務(wù)處理時(shí)長(zhǎng)發(fā)生變化時(shí)而且非常明顯時(shí),可能需要關(guān)注業(yè)務(wù)是否可以通過(guò)拆分業(yè)務(wù)事務(wù)數(shù)據(jù)的大小,避免單筆事務(wù)時(shí)長(zhǎng)增加帶來(lái)的積壓?jiǎn)栴},積壓?jiǎn)栴}會(huì)導(dǎo)致數(shù)據(jù)庫(kù)實(shí)例存儲(chǔ)引擎的宕死,導(dǎo)致死鎖、鎖等待等連鎖問(wèn)題。
分布式數(shù)據(jù)庫(kù)多用在數(shù)據(jù)量龐大以及多租戶環(huán)境中,不同租戶之間的優(yōu)先級(jí)和使用資源的能力不一樣,管控程序必須提供資源管控的能力,統(tǒng)一劃分整個(gè)系統(tǒng)的處理器、內(nèi)存、磁盤存儲(chǔ)和輸入輸出能力[1]。
測(cè)試用例必須構(gòu)建不同租戶分別在不同處理器、內(nèi)存、磁盤資源配置下處理相同數(shù)據(jù)集的時(shí)長(zhǎng)差異,確認(rèn)租戶資源管控能力的強(qiáng)弱,必須達(dá)到預(yù)期的結(jié)果是分配資源越多處理效率越高。
本文分析了分布式數(shù)據(jù)庫(kù)管理平臺(tái)的功能設(shè)計(jì)要點(diǎn)和測(cè)試方法,希望在數(shù)據(jù)庫(kù)管理員數(shù)據(jù)庫(kù)選型時(shí)有所幫助,分布式數(shù)據(jù)庫(kù)在金融場(chǎng)景數(shù)據(jù)倉(cāng)庫(kù)分層建模分析,風(fēng)險(xiǎn)控制系統(tǒng)應(yīng)用廣泛,它與傳統(tǒng)的數(shù)據(jù)庫(kù)的使用方法和適用場(chǎng)景上存在著巨大的差異,在小數(shù)據(jù)集以及單事務(wù)效率上不如集中式數(shù)據(jù)庫(kù),但整體的吞吐量,并行運(yùn)算能力、水平彈性擴(kuò)展存儲(chǔ)節(jié)點(diǎn)的能力,遠(yuǎn)遠(yuǎn)超過(guò)Oracle等傳統(tǒng)數(shù)據(jù)庫(kù)產(chǎn)品,在數(shù)據(jù)庫(kù)功能選擇和構(gòu)建測(cè)試用例的時(shí)候,必須從業(yè)務(wù)優(yōu)化的角度構(gòu)建與業(yè)務(wù)匹配的測(cè)試用例,選擇適于自身業(yè)務(wù)的數(shù)據(jù)庫(kù)產(chǎn)品。
引用
[1] 林子雨.大數(shù)據(jù)技術(shù)原理與應(yīng)用[M].北京:人民郵電出版社,2017(2):108-116.
[2] 周瑩.分布式異構(gòu)數(shù)據(jù)集成系統(tǒng)的研究與分析[J].數(shù)字技術(shù)與應(yīng)用,2018,36(7):220+222.
[3] 潘潁.確定性分布式數(shù)據(jù)庫(kù)中長(zhǎng)事務(wù)處理方法研究[J].數(shù)字技術(shù)與應(yīng)用,2017(2):107.