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