呂韜 田峰 李征宇 張雪
摘? ?要: 分布式關(guān)系型數(shù)據(jù)庫(kù)具有廣泛應(yīng)用和技術(shù)探究空間,其質(zhì)量指標(biāo)關(guān)乎信息系統(tǒng)穩(wěn)定運(yùn)行、業(yè)務(wù)連續(xù)性等,其中恢復(fù)點(diǎn)目標(biāo)(RPO)是衡量分布式關(guān)系型數(shù)據(jù)庫(kù)可靠性的核心指標(biāo)。討論了分布式關(guān)系型數(shù)據(jù)庫(kù)RPO的內(nèi)涵和外延,印證了分布式關(guān)系型數(shù)據(jù)庫(kù)理論上可以保證RPO等于0,擁有對(duì)數(shù)據(jù)完整性的完全保障能力。針對(duì)RPO指標(biāo),提出了一種基于場(chǎng)景的測(cè)試方法,以寫(xiě)入數(shù)據(jù)庫(kù)的事務(wù)數(shù)量與數(shù)據(jù)庫(kù)中記錄數(shù)的差值表征數(shù)據(jù)丟失情況。搭建測(cè)試環(huán)境,應(yīng)用LoadRunner測(cè)試工具,以平均響應(yīng)時(shí)間、每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)、Tomcat日志等為依據(jù),測(cè)試得到三款分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品的RPO指標(biāo),實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)容災(zāi)能力的評(píng)價(jià)。
關(guān)鍵詞: 分布式關(guān)系型數(shù)據(jù)庫(kù);恢復(fù)點(diǎn)目標(biāo)(RPO);容災(zāi)能力; LoadRunner;平均響應(yīng)時(shí)間
引言
信息技術(shù)、互聯(lián)網(wǎng)技術(shù)的深度應(yīng)用,以及大數(shù)據(jù)挖掘、智能化發(fā)展,促使信息系統(tǒng)不斷擴(kuò)展規(guī)模,要求信息系統(tǒng)向高性能、易擴(kuò)展、泛兼容的技術(shù)方向演進(jìn),其中安全存儲(chǔ)、可靠傳輸、精準(zhǔn)應(yīng)用信息資源是信息系統(tǒng)中的關(guān)鍵技術(shù)。信息資源的可用性、完整性、有效性是關(guān)鍵指標(biāo),存儲(chǔ)信息資源的數(shù)據(jù)庫(kù)作為支撐信息系統(tǒng)穩(wěn)定運(yùn)行的基礎(chǔ)軟件,技術(shù)體系不斷革新,從集中式向分布式架構(gòu)演進(jìn)成為重要技術(shù)趨勢(shì)[1]。
相對(duì)傳統(tǒng)的大型集中式關(guān)系型數(shù)據(jù)庫(kù),分布式關(guān)系型數(shù)據(jù)庫(kù)具有成本低、部署靈活、性能高等優(yōu)勢(shì),可以支撐當(dāng)前互聯(lián)網(wǎng)應(yīng)用的大規(guī)模、高并發(fā)、多模式業(yè)務(wù)類(lèi)型,也是當(dāng)前金融領(lǐng)域信息化升級(jí)的重要技術(shù)方向[2]。2019年10月,螞蟻金服科技研發(fā)的分布式關(guān)系型數(shù)據(jù)庫(kù)OceanBase成功登頂TPC-C[3],反映出我國(guó)分布式關(guān)系型數(shù)據(jù)庫(kù)技術(shù)逐步成熟,正在被越來(lái)越多的行業(yè)所認(rèn)可并投入實(shí)際應(yīng)用。
科學(xué)、客觀、準(zhǔn)確地評(píng)價(jià)一款分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品的質(zhì)量是保證信息資源安全、信息系統(tǒng)可靠的 重要課題。除了功能、性能、安全等質(zhì)量屬性外,一些關(guān)鍵行業(yè)的信息系統(tǒng)對(duì)數(shù)據(jù)庫(kù)的可靠性提出了更高的要求:一方面需要數(shù)據(jù)庫(kù)廠商通過(guò)日志、副本等技術(shù)保障可靠性;另一方面也需要客觀評(píng)價(jià)可靠性的指標(biāo)和方法??紤]到分布式關(guān)系型數(shù)據(jù)庫(kù)一般具有多副本實(shí)時(shí)備份的技術(shù)特點(diǎn),恢復(fù)點(diǎn)目標(biāo)(Recovery Point Object,RPO)指標(biāo)成為衡量其可靠性的核心指標(biāo)[4]。為此,本文結(jié)合分布式關(guān)系型數(shù)據(jù)庫(kù)的技術(shù)特點(diǎn),提出一種基于場(chǎng)景的分布式關(guān)系型數(shù)據(jù)庫(kù)恢復(fù)點(diǎn)目標(biāo)的測(cè)試方法,以實(shí)現(xiàn)對(duì)分布式關(guān)系型數(shù)據(jù)庫(kù)可靠性的測(cè)評(píng),并在工程實(shí)踐中進(jìn)行驗(yàn)證,以反映測(cè)試方法的正確性和合理性。
1? 分布式關(guān)系型數(shù)據(jù)庫(kù)與RPO
分布式關(guān)系型數(shù)據(jù)庫(kù)作為基礎(chǔ)軟件產(chǎn)品,符合軟件產(chǎn)品的所有質(zhì)量特性。一般軟件產(chǎn)品的質(zhì)量特性包括功能、效率、可靠性、安全性、兼容性、可擴(kuò)展性等,對(duì)于特定的軟件產(chǎn)品,需要結(jié)合軟件本身的技術(shù)特點(diǎn),在質(zhì)量特性的框架下進(jìn)行設(shè)計(jì),并細(xì)化測(cè)試指標(biāo),明確測(cè)試方法,最終達(dá)到評(píng)價(jià)軟件產(chǎn)品的目的。
1.1? 分布式關(guān)系型數(shù)據(jù)庫(kù)
一般來(lái)說(shuō),分布式關(guān)系型數(shù)據(jù)庫(kù)是用計(jì)算機(jī)網(wǎng)絡(luò)將物理上分散的多個(gè)數(shù)據(jù)庫(kù)單元連接起來(lái),并采用關(guān)系模型加以組織的一個(gè)邏輯上統(tǒng)一的數(shù)據(jù)庫(kù)[5]。分布式關(guān)系型數(shù)據(jù)庫(kù)具有物理分布性、邏輯整體性和站點(diǎn)自治性的特點(diǎn),從其所具有的能力上可以歸納為:
(1)管理、調(diào)度、處理分布式事務(wù);
(2)支持跨數(shù)據(jù)中心的橫向擴(kuò)展;
(3)具備高可用能力,具備進(jìn)行實(shí)時(shí)備份及恢復(fù)的容災(zāi)能力。
從以上的技術(shù)特點(diǎn)可以看出,相對(duì)于傳統(tǒng)的集中式關(guān)系型數(shù)據(jù)庫(kù),分布式關(guān)系型數(shù)據(jù)庫(kù)的擴(kuò)展性和容災(zāi)能力更強(qiáng),尤其是當(dāng)一個(gè)或多個(gè)節(jié)點(diǎn)遇到故障時(shí),分布式關(guān)系型數(shù)據(jù)庫(kù)能夠持續(xù)運(yùn)行并迅速拉起備份節(jié)點(diǎn),承擔(dān)故障節(jié)點(diǎn)的工作[6-7]。
1.2? RPO的內(nèi)涵與外延
RPO的作用是災(zāi)難發(fā)生后,令容災(zāi)系統(tǒng)把數(shù)據(jù)恢復(fù)到災(zāi)難發(fā)生前時(shí)間點(diǎn)的數(shù)據(jù),故RPO是衡量災(zāi)難發(fā)生后會(huì)丟失多少生產(chǎn)數(shù)據(jù)的指標(biāo),具體表示為從災(zāi)難發(fā)生到最近一次備份的時(shí)間度量。本質(zhì)上,RPO指標(biāo)主要反映了業(yè)務(wù)連續(xù)性管理體系下備用數(shù)據(jù)的有效性,系統(tǒng)RPO越小,表示系統(tǒng)對(duì)數(shù)據(jù)完整性的保障能力越強(qiáng),即故障發(fā)生后可能損失的數(shù)據(jù)就越少。
對(duì)于傳統(tǒng)的集中式關(guān)系型數(shù)據(jù)庫(kù),由于其數(shù)據(jù)存儲(chǔ)機(jī)制為主節(jié)點(diǎn)執(zhí)行寫(xiě)操作,因此一旦其主節(jié)點(diǎn)遇到故障,數(shù)據(jù)就存在丟失的可能性,且故障恢復(fù)時(shí)間受到軟硬件、機(jī)房基礎(chǔ)設(shè)施等多種因素影響,RPO指標(biāo)較高;即使是引入了熱備份等相關(guān)機(jī)制的現(xiàn)代的集中式數(shù)據(jù)庫(kù),雖然當(dāng)主節(jié)點(diǎn)遇到故障時(shí)系統(tǒng)能夠快速切換到備份節(jié)點(diǎn),但其“多讀單寫(xiě)”的機(jī)制仍然無(wú)法完全保證其RPO等于0。
對(duì)于分布式關(guān)系型數(shù)據(jù)庫(kù),為了實(shí)現(xiàn)真正的多讀多寫(xiě),一般通過(guò)中間件或同步協(xié)議保障多個(gè)數(shù)據(jù)庫(kù)副本之間的數(shù)據(jù)一致性,從數(shù)據(jù)處理機(jī)制上實(shí)現(xiàn)實(shí)時(shí)的備份,理論上可以保證RPO等于0。因此對(duì)分布式關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行RPO測(cè)試驗(yàn)證成為一個(gè)新的課題[8-9]。
2? 分布式關(guān)系型數(shù)據(jù)庫(kù)RPO測(cè)試方法設(shè)計(jì)
結(jié)合分布式關(guān)系型數(shù)據(jù)庫(kù)的技術(shù)特點(diǎn),我們創(chuàng)新地將RPO引入數(shù)據(jù)庫(kù)質(zhì)量測(cè)試,作為可靠性的測(cè)試指標(biāo)之一,用以驗(yàn)證分布式關(guān)系型數(shù)據(jù)庫(kù)的容災(zāi)能力,對(duì)當(dāng)前分布式關(guān)系型數(shù)據(jù)庫(kù)應(yīng)用較多且對(duì)業(yè)務(wù)連續(xù)性要求較高的電子商務(wù)、金融行業(yè)具有重要的參考價(jià)值。
對(duì)分布式關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行RPO測(cè)試的主要思路是,在被測(cè)數(shù)據(jù)庫(kù)執(zhí)行一個(gè)連續(xù)事務(wù)的過(guò)程中,人為制造故障場(chǎng)景,如切斷一個(gè)或多個(gè)節(jié)點(diǎn),在故障發(fā)生后,觀察被測(cè)數(shù)據(jù)庫(kù)是否仍可穩(wěn)定連續(xù)運(yùn)行,并且在故障發(fā)生的時(shí)間段統(tǒng)計(jì)所有數(shù)據(jù)是否丟失,計(jì)算其RPO。
RPO的測(cè)試方法設(shè)計(jì)如下:
(1)通過(guò)客戶(hù)端持續(xù)對(duì)分布式關(guān)系型數(shù)據(jù)庫(kù)的一個(gè)節(jié)點(diǎn)進(jìn)行寫(xiě)操作,在客戶(hù)端記錄寫(xiě)操作成功的次數(shù),在數(shù)據(jù)庫(kù)端記錄每條插入數(shù)據(jù)的時(shí)間;
(2)斷開(kāi)該節(jié)點(diǎn)的網(wǎng)絡(luò),判斷數(shù)據(jù)庫(kù)是否穩(wěn)定運(yùn)行不退出,以及寫(xiě)操作能否迅速恢復(fù),記錄斷網(wǎng)時(shí)間;
(3)待被測(cè)數(shù)據(jù)庫(kù)穩(wěn)定后,終止測(cè)試;
(4)對(duì)比寫(xiě)操作成功次數(shù)與數(shù)據(jù)庫(kù)中的記錄數(shù)是否一致,并計(jì)算分析斷網(wǎng)之后插入數(shù)據(jù)的時(shí)間間隔。
RPO的判定方法如下:
按照GB/T 20889-2007《信息安全技術(shù) 信息系統(tǒng)災(zāi)難恢復(fù)規(guī)范》[10]的要求,RPO約為0或者等于0的情況對(duì)應(yīng)的容災(zāi)等級(jí)為第5級(jí)、第6級(jí),換算成可靠性的要求,其系統(tǒng)可用性應(yīng)為99.99%及以上。因此,在測(cè)試完成后,應(yīng)計(jì)算丟失記錄數(shù)與總成功插入記錄的比值,若丟失記錄數(shù)的比值小于0.01%,則認(rèn)為被測(cè)的分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品RPO約為0;若比值小于0.001%,則認(rèn)為被測(cè)的分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品RPO等于0。
3? RPO測(cè)試過(guò)程
分布式關(guān)系型數(shù)據(jù)庫(kù)的測(cè)試過(guò)程主要分為三個(gè)部分:一是按照被測(cè)數(shù)據(jù)庫(kù)的技術(shù)特點(diǎn)及實(shí)際業(yè)務(wù)場(chǎng)景需求搭建測(cè)試環(huán)境,準(zhǔn)備能夠準(zhǔn)確量化RPO指標(biāo)的測(cè)試工具;二是根據(jù)RPO測(cè)試指標(biāo)制定測(cè)試步驟,明確測(cè)試的次序和每步需要記錄的測(cè)試數(shù)據(jù);三是對(duì)所有的測(cè)試結(jié)果進(jìn)行分析,評(píng)價(jià)被測(cè)產(chǎn)品的RPO能力。
3.1? 測(cè)試環(huán)境搭建
按照分布式關(guān)系型數(shù)據(jù)庫(kù)的技術(shù)特點(diǎn),在硬件設(shè)備上一般需要準(zhǔn)備6臺(tái)服務(wù)器及配套的交換機(jī),用于部署被測(cè)數(shù)據(jù)庫(kù),此外服務(wù)器還可復(fù)用部署測(cè)試相關(guān)的系統(tǒng),需要一臺(tái)桌面終端。
測(cè)試工具建議選擇LoadRunner,此工具的作用一是模擬實(shí)際用戶(hù),對(duì)Web應(yīng)用系統(tǒng)進(jìn)行持續(xù)訪問(wèn),從而對(duì)被測(cè)數(shù)據(jù)庫(kù)進(jìn)行持續(xù)的寫(xiě)操作;二是監(jiān)測(cè)在故障發(fā)生時(shí)數(shù)據(jù)庫(kù)的性能表現(xiàn)。
此外,為了模擬實(shí)際業(yè)務(wù)場(chǎng)景,還需開(kāi)發(fā)一個(gè)小型的Web應(yīng)用系統(tǒng),此系統(tǒng)的作用一是對(duì)被測(cè)產(chǎn)品進(jìn)行連續(xù)寫(xiě)操作,二是在故障發(fā)生時(shí),通過(guò)監(jiān)測(cè)此系統(tǒng)的運(yùn)行狀態(tài)來(lái)判斷數(shù)據(jù)庫(kù)是否連續(xù)運(yùn)行。
綜上,測(cè)試環(huán)境的軟硬件構(gòu)成如圖1所示。
測(cè)試環(huán)境在搭建時(shí),需要被測(cè)數(shù)據(jù)庫(kù)的廠商按照數(shù)據(jù)庫(kù)的特點(diǎn)進(jìn)行節(jié)點(diǎn)分配,測(cè)試環(huán)境的標(biāo)準(zhǔn)拓?fù)鋱D如圖1所示。
3.2? 測(cè)試實(shí)施步驟
測(cè)試流程圖如圖2所示,以下對(duì)各個(gè)步驟進(jìn)行介紹。
3.2.1? 測(cè)試環(huán)境部署與確認(rèn)
按照?qǐng)D1所示的測(cè)試環(huán)境拓?fù)鋱D搭建分布式關(guān)系型數(shù)據(jù)庫(kù)測(cè)試環(huán)境。搭建完成后,試運(yùn)行被測(cè)數(shù)據(jù)庫(kù),確保數(shù)據(jù)庫(kù)系統(tǒng)正常運(yùn)行。
3.2.2? Web應(yīng)用部署與確認(rèn)
選擇一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器部署Web應(yīng)用系統(tǒng),部署完成后,確保Web應(yīng)用系統(tǒng)與數(shù)據(jù)庫(kù)連接成功且可對(duì)被測(cè)數(shù)據(jù)庫(kù)進(jìn)行操作。在被測(cè)數(shù)據(jù)庫(kù)中,構(gòu)造數(shù)據(jù)庫(kù)表單,要求表單最后一列為時(shí)間戳;在Web應(yīng)用系統(tǒng)中,構(gòu)建一條SQL語(yǔ)句,對(duì)被測(cè)數(shù)據(jù)庫(kù)進(jìn)行操作,SQL語(yǔ)句為插入操作,且插入的最后一列為插入數(shù)據(jù)時(shí)的時(shí)間戳。
3.2.3? 測(cè)試工具部署及調(diào)試
在桌面終端部署LoadRunner工具,錄制腳本并調(diào)試,直至成功,確保可以對(duì)Web應(yīng)用程序進(jìn)行壓力測(cè)試。
3.2.4? 使用測(cè)試工具執(zhí)行壓力測(cè)試
通過(guò)LoadRunner實(shí)現(xiàn)100用戶(hù)并發(fā)對(duì)創(chuàng)建表單的插入操作(壓力測(cè)試執(zhí)行前,務(wù)必清除已創(chuàng)建表單中所有數(shù)據(jù))。參數(shù)設(shè)置:thinktime=0;運(yùn)行時(shí)長(zhǎng)20 min。執(zhí)行壓力測(cè)試,并觀察測(cè)試工具Transactions(事務(wù)總數(shù))的Total Passed與Total Failed數(shù)值,若Total Failed出現(xiàn)非0數(shù)據(jù),則停止壓力測(cè)試,并返回至章節(jié)3.2.3,重新對(duì)測(cè)試工具和Web應(yīng)用進(jìn)行部署調(diào)試。
3.2.5? 故障模擬
在測(cè)試中平穩(wěn)運(yùn)行5 min后,手動(dòng)關(guān)閉其中一個(gè)計(jì)算節(jié)點(diǎn),模擬該節(jié)點(diǎn)運(yùn)行發(fā)生故障并退出。執(zhí)行斷網(wǎng)操作后,觀察LoadRunner工具響應(yīng)時(shí)間曲線圖,若Hits per Second數(shù)值降至零,且Total Failed出現(xiàn)非0數(shù)據(jù)、Total Passed數(shù)值停止增長(zhǎng)、數(shù)據(jù)庫(kù)單一節(jié)點(diǎn)故障引起數(shù)據(jù)庫(kù)不可用,則說(shuō)明該分布式關(guān)系型數(shù)據(jù)庫(kù)的配置不正確,返回章節(jié)3.2.1對(duì)分布式測(cè)試環(huán)境重新進(jìn)行部署與確認(rèn)。執(zhí)行斷網(wǎng)操作后,待Hits per Second數(shù)值降低并穩(wěn)定后,繼續(xù)保持壓力,20 min壓力測(cè)試完成后,記錄測(cè)試數(shù)據(jù)。
3.2.6? 記錄分析測(cè)試結(jié)果
測(cè)試完成后,記錄LoadRunner的事務(wù)通過(guò)數(shù)、未通過(guò)數(shù),Web應(yīng)用系統(tǒng)的成功連接數(shù),被測(cè)數(shù)據(jù)庫(kù)表單中的記錄數(shù)等數(shù)據(jù)。
3.3? 測(cè)試結(jié)果記錄及處理
首先,測(cè)試工具LoadRunner通過(guò)的Transactions數(shù)量,該測(cè)試結(jié)果是對(duì)事務(wù)進(jìn)行綜合分析的結(jié)果,是性能分析的第一步。其一,通過(guò)分析測(cè)試時(shí)間內(nèi)用戶(hù)事務(wù)的成功與失敗情況,可以直接判斷出系統(tǒng)是否運(yùn)行正常,若Transactions的Total Failed數(shù)值持續(xù)增長(zhǎng),則判定客戶(hù)端通過(guò)Web應(yīng)用訪問(wèn)數(shù)據(jù)庫(kù)失敗,需中斷測(cè)試工作;其二,運(yùn)行正常的情況下,在測(cè)試完成后,通過(guò)記錄Transactions的Total Passed數(shù)值,記錄測(cè)試工具端客戶(hù)端成功發(fā)送數(shù)據(jù)庫(kù)的事務(wù)數(shù)量X1。
其次,記錄Web應(yīng)用通過(guò)的Transactions數(shù)量X2,該數(shù)值可直觀反映出客戶(hù)端成功執(zhí)行SQL語(yǔ)句并成功寫(xiě)入數(shù)據(jù)庫(kù)的事務(wù)數(shù)量。
再次,登錄數(shù)據(jù)庫(kù)端通過(guò)SQL語(yǔ)句查詢(xún)數(shù)據(jù)庫(kù)表所有記錄數(shù)X3,X3數(shù)值為本次測(cè)試過(guò)程中實(shí)際成功寫(xiě)入數(shù)據(jù)庫(kù)的事務(wù)數(shù)量。
最后,根據(jù)以上測(cè)試數(shù),對(duì)測(cè)試結(jié)果進(jìn)行計(jì)算分析:
(1)若X1=X3,則客戶(hù)端成功發(fā)送數(shù)據(jù)庫(kù)的事務(wù)數(shù)量等于成功寫(xiě)入數(shù)據(jù)庫(kù)端的事務(wù)數(shù)量,整個(gè)測(cè)試過(guò)程中未發(fā)生數(shù)據(jù)丟失,測(cè)試過(guò)程中RPO等于0。
(2)若X1>X3,則客戶(hù)端成功發(fā)送數(shù)據(jù)庫(kù)的事務(wù)數(shù)量大于成功寫(xiě)入數(shù)據(jù)庫(kù)端的事務(wù)數(shù)量,為了保證測(cè)試的嚴(yán)謹(jǐn)性,需查看Web應(yīng)用通過(guò)的Transactions數(shù)量X2。
① 若X2≤X3,說(shuō)明成功寫(xiě)入數(shù)據(jù)庫(kù)端的事務(wù)數(shù)量大于或等于Web應(yīng)用成功發(fā)送的數(shù)據(jù)量,測(cè)試過(guò)程中未發(fā)生數(shù)據(jù)丟失,測(cè)試過(guò)程中RPO等于0(注:在并發(fā)壓力測(cè)試過(guò)程中,因網(wǎng)絡(luò)延遲、響應(yīng)超時(shí)等原因?qū)е聰?shù)據(jù)庫(kù)寫(xiě)入成功的響應(yīng)結(jié)果未反饋Web服務(wù)器端)。
② 若X2>X3,則Web應(yīng)用成功發(fā)送的數(shù)據(jù)量大于成功寫(xiě)入數(shù)據(jù)庫(kù)端的事務(wù)數(shù)量,測(cè)試過(guò)程中發(fā)生的數(shù)據(jù)丟失情況需要按照以下公式進(jìn)行計(jì)算:
X4=(X2-X3)/X2 (1)
a. 若X4≥0.01%,則認(rèn)為被測(cè)的分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品RPO不等于0,在執(zhí)行故障模擬的過(guò)程中出現(xiàn)事務(wù)丟失,且丟失數(shù)據(jù)量大于每秒寫(xiě)入數(shù)據(jù)庫(kù)的數(shù)據(jù)。計(jì)算事務(wù)丟失數(shù)據(jù)量,查看數(shù)據(jù)庫(kù)事務(wù)日志中事務(wù)連續(xù)寫(xiě)入時(shí)間記錄,分析數(shù)據(jù)庫(kù)記錄時(shí)間戳不連續(xù)的時(shí)間間隔。
b. 若0.001%≤X4<0.01%,則認(rèn)為被測(cè)的分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品RPO約等于0。
c. 若X4<0.001%,則認(rèn)為被測(cè)的分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品RPO等于0。
4? 測(cè)試結(jié)果及分析
為了驗(yàn)證提出的基于場(chǎng)景的分布式關(guān)系型數(shù)據(jù)庫(kù)恢復(fù)點(diǎn)目標(biāo)的測(cè)試方法,搭建實(shí)驗(yàn)測(cè)試環(huán)境,對(duì)A、B、C三款分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品進(jìn)行RPO測(cè)試,并對(duì)測(cè)試結(jié)果進(jìn)行分析。
4.1? A款數(shù)據(jù)庫(kù)測(cè)試結(jié)果及分析
按照測(cè)試要求搭建A款數(shù)據(jù)庫(kù)測(cè)試環(huán)境,部署測(cè)試工具,測(cè)試結(jié)果如下:
(1)測(cè)試過(guò)程中平均響應(yīng)時(shí)間Average Response Time(單位:s)。從圖3可以看出,模擬單節(jié)點(diǎn)故障后,切換過(guò)程中響應(yīng)時(shí)間有明顯的提升;切換完成后,整個(gè)響應(yīng)時(shí)間趨于穩(wěn)定,數(shù)據(jù)庫(kù)連接正常。
(2)測(cè)試過(guò)程中每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)(Hits per Second)。從圖4可以看出,當(dāng)模擬單節(jié)點(diǎn)故障后,每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)出現(xiàn)較大浮動(dòng)的下降;運(yùn)行4 min后,每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)趨于穩(wěn)定且恢復(fù)至故障前水平。整個(gè)過(guò)程中,數(shù)據(jù)庫(kù)連接正常。
(3)LoadRunner測(cè)試工具記錄的通過(guò)Transactions數(shù)量。如圖5所示,X1=7 860 902,該數(shù)值為客戶(hù)端發(fā)送至Web應(yīng)用并成功響應(yīng)的Transactions數(shù)量。
(4)測(cè)試結(jié)束后在數(shù)據(jù)庫(kù)通過(guò)SQL語(yǔ)句
select count (1) form t_gh;
查看數(shù)據(jù)庫(kù)該表中的記錄數(shù),得到X3=7 814 974,如圖6所示。
(5)對(duì)比差值X1-X3=45 928,即數(shù)據(jù)庫(kù)端丟失數(shù)據(jù)條數(shù)為45 928,計(jì)算數(shù)據(jù)丟失比,得
X4=(7 860 902-7 814 974)/7 860 902=0.584%
(2)
X4>0.01%,表明被測(cè)的分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品RPO不等于0。
(6)通過(guò)查看數(shù)據(jù)庫(kù)寫(xiě)入日志記錄發(fā)現(xiàn),數(shù)據(jù)庫(kù)記錄時(shí)間戳不連續(xù)的時(shí)間間隔為80 s,日志部分截圖如圖7所示。因此,被測(cè)的分布式關(guān)系型數(shù)據(jù)庫(kù)產(chǎn)品RPO為80 s。
4.2? B款數(shù)據(jù)庫(kù)測(cè)試結(jié)果及分析
按照測(cè)試要求搭建B款數(shù)據(jù)庫(kù)測(cè)試環(huán)境,部署測(cè)試工具,測(cè)試結(jié)果如下:
(1)測(cè)試過(guò)程中Average Response Time。從圖8可以看出,模擬單節(jié)點(diǎn)故障后,切換過(guò)程中響應(yīng)時(shí)間有明顯的提升;切換完成后,整個(gè)響應(yīng)時(shí)間趨于穩(wěn)定,數(shù)據(jù)庫(kù)連接正常。
(2)測(cè)試過(guò)程中每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)。從圖9可以看出,模擬單節(jié)點(diǎn)故障后,每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)出現(xiàn)較大幅度的下降;運(yùn)行2 min后,每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)趨于穩(wěn)定,且恢復(fù)至故障前水平。整個(gè)過(guò)程中,數(shù)據(jù)庫(kù)連接正常。
(3)LoadRunner測(cè)試工具記錄的通過(guò)Transactions數(shù)量。如圖10所示,X1的數(shù)值為17 070 507,測(cè)試過(guò)程中Transactions的Total Failed數(shù)值為0 ,未出現(xiàn)報(bào)錯(cuò)。
(4)查看Tomcat日志記錄不通過(guò)Transactions數(shù)量為100(如圖11所示),實(shí)際通過(guò)的Transactions數(shù)量X2=17 070 407。
(5)測(cè)試結(jié)束后,在數(shù)據(jù)庫(kù)通過(guò)SQL語(yǔ)句
select count (1) form t_gh;
查看數(shù)據(jù)庫(kù)該表中的記錄數(shù),得到X3=17 070 408,如圖12所示。
(6)通過(guò)以上測(cè)試數(shù)據(jù)可以看出,X1>X3,X2 4.3? C款數(shù)據(jù)庫(kù)測(cè)試結(jié)果及分析 (1)測(cè)試過(guò)程中Average Response Time。從圖13中可以看出,模擬單節(jié)點(diǎn)故障后,響應(yīng)時(shí)間較故障前提升4倍;切換完成后,整個(gè)響應(yīng)時(shí)間趨于穩(wěn)定,數(shù)據(jù)庫(kù)連接正常。 (2)測(cè)試過(guò)程中每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)。從圖14可以看出,當(dāng)模擬單節(jié)點(diǎn)故障后,每秒虛擬用戶(hù)HTTP請(qǐng)求數(shù)出現(xiàn)較大幅度的下降,整體性能下降,但整個(gè)過(guò)程中數(shù)據(jù)庫(kù)未出現(xiàn)中斷,連接正常。 (3)LoadRunner測(cè)試工具記錄的通過(guò)Transactions數(shù)量。如圖15所示,X1的數(shù)值為4 867 970,測(cè)試過(guò)程中Transactions的Total Failed數(shù)值為0 ,未出現(xiàn)報(bào)錯(cuò)。 (4)查看Tomcat日志記錄通過(guò)Transactions數(shù)量X2為4 867 936,如圖16所示。 (5)測(cè)試結(jié)束后,在數(shù)據(jù)庫(kù)通過(guò)SQL語(yǔ)句 select count (1) form t_gh; 查看數(shù)據(jù)庫(kù)該表中的記錄數(shù)X3為4 867 958。 (6)通過(guò)以上測(cè)試數(shù)據(jù)可以看出,X1>X3,X2 5? 結(jié)束語(yǔ) 本文提出了一種基于場(chǎng)景的分布式關(guān)系型數(shù)據(jù)庫(kù)恢復(fù)點(diǎn)目標(biāo)的測(cè)試方法,將RPO測(cè)試指標(biāo)引入分布式關(guān)系型數(shù)據(jù)庫(kù)質(zhì)量測(cè)試,能夠?qū)Ρ粶y(cè)數(shù)據(jù)庫(kù)的容災(zāi)能力進(jìn)行評(píng)價(jià),且通過(guò)實(shí)際的工程實(shí)踐證明了方法的可行性與正確性,對(duì)數(shù)據(jù)庫(kù)的應(yīng)用方具有很高的參考價(jià)值,也為后續(xù)數(shù)據(jù)庫(kù)相關(guān)產(chǎn)品的測(cè)試評(píng)價(jià)提供了思路與方法。 致謝 感謝中國(guó)軟件評(píng)測(cè)中心的領(lǐng)導(dǎo)和同事,在本文寫(xiě)作過(guò)程中,他們提供了許多無(wú)私的幫助,使得這篇文章得以順利完成。感謝審稿專(zhuān)家在百忙之中審閱我們的文章,您們的意見(jiàn)為提高我們文章的質(zhì)量帶來(lái)了很大幫助。歡迎讀者批評(píng)和指正。 參考文獻(xiàn) [1] 王昆, 高可用分布式任務(wù)調(diào)度與執(zhí)行系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安: 西安電子科技大學(xué), 2019. [2] 中國(guó)人民銀行. 中國(guó)金融業(yè)信息技術(shù)“十三五”發(fā)展規(guī)劃[OL]. http://www.pbc.gov.cn/zhengwugongkai/127924/128038/128109/3333998/index.html. 2017-06-27. [3] 螞蟻金服科技. 螞蟻金服自研數(shù)據(jù)庫(kù)OceanBase如何登 頂TPC-C[OL]. https://segmentfault.com/a/1190000020597597. 2019-10-05 [4] 陳宏, 郭素芹, 羅順輝, 等. 信息系統(tǒng)災(zāi)難備份策略及關(guān)鍵技術(shù)研究[J]. 電力信息化, 2011, 9(10):8-13. [5] 邵側(cè)英. 分布式數(shù)據(jù)庫(kù)系統(tǒng)及其應(yīng)用: 第2版[M]. 北京: 科學(xué)出版社, 2005. [6] 葉驕龍. 面向數(shù)據(jù)庫(kù)的CDP容災(zāi)系統(tǒng)關(guān)鍵技術(shù)研究[D]. 杭州: 杭州電子科技大學(xué),2015 [7] 王君軍. 分布式異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)的網(wǎng)絡(luò)容災(zāi)技術(shù)研究[D]. 長(zhǎng)春: 長(zhǎng)春理工大學(xué), 2011. [8] 朱濤, 郭進(jìn)偉, 周歡, 等. 分布式數(shù)據(jù)庫(kù)中一致性與可用性的關(guān)系[J]. 軟件學(xué)報(bào), 2018, 29(1): 131-149 [9] 張宇. 分布式數(shù)據(jù)庫(kù)一致性和可用性方法優(yōu)化方案研究[D]. 成都: 成都理工大學(xué), 2014. [10] 信息安全技術(shù) 信息系統(tǒng)災(zāi)難恢復(fù)規(guī)范: GB/T 20889-2007[S]. 北京: 中國(guó)標(biāo)準(zhǔn)出版社, 2007.