數(shù)據(jù)遷移類測(cè)試策略
前言
前段時(shí)間做了一次數(shù)據(jù)遷移,針對(duì)數(shù)據(jù)遷移類型的測(cè)試方法進(jìn)行了一些了解和總結(jié),以下工具愚公移山和精衛(wèi)為淘寶開(kāi)發(fā)的工具,已使用于多個(gè)產(chǎn)品、項(xiàng)目中,質(zhì)量有保障。
一、工具介紹
1、愚公移山
概述:
數(shù)據(jù)的動(dòng)態(tài)遷移,可完成數(shù)據(jù)全量、增量遷移,進(jìn)行數(shù)據(jù)比對(duì),保證數(shù)據(jù)的正確;目前較多運(yùn)用在數(shù)據(jù)遷移中,已經(jīng)被很多團(tuán)隊(duì)使用,是很成熟可靠的數(shù)據(jù)遷移工具
適用范圍:
可支持:支持oracle和mysql,分庫(kù)分表,實(shí)時(shí)同步,數(shù)據(jù)比對(duì)
不支持:涉及到外部依賴,遷移規(guī)則非常復(fù)雜的數(shù)據(jù)
性能情況:
沒(méi)有對(duì)愚公進(jìn)行壓測(cè),性能情況參考以下的例子
例子:遷移一個(gè)1000萬(wàn)的表。 16個(gè)線程,開(kāi)啟批量寫(xiě)入,半個(gè)小時(shí)以內(nèi)完成。
影響點(diǎn):機(jī)器的負(fù)載,并行的任務(wù)數(shù),配置的線程數(shù)
愚公百科:(不知道可以可以貼!有需要可聯(lián)系作者)
2、精衛(wèi)工具
概述:
精衛(wèi)是一個(gè)基于MySQL數(shù)據(jù)庫(kù)的數(shù)據(jù)復(fù)制組件,較多運(yùn)用在數(shù)據(jù)雙寫(xiě)的場(chǎng)景中,是比較成熟的一個(gè)數(shù)據(jù)復(fù)制組件
解析數(shù)據(jù)庫(kù)的binlog文件,A庫(kù)的所有的數(shù)據(jù)變更傳到B庫(kù)。binlog:描述數(shù)據(jù)變更的文件
適用范圍:
同庫(kù)不同表數(shù)據(jù)復(fù)制、多庫(kù)多表數(shù)據(jù)冗余、標(biāo)準(zhǔn)化去O支持、數(shù)據(jù)變化通知
性能情況:
性能壓測(cè),性能結(jié)果滿足交易主庫(kù)同步備庫(kù)需求
例子:主庫(kù)1000tps,延遲在50sms以內(nèi)
【精衛(wèi)+metaq性能測(cè)試結(jié)論.msg】
精衛(wèi)百科:(不知道可以可以貼?。?br />
二、遷移類測(cè)試策略
1、概述
隨著業(yè)務(wù)需求或數(shù)據(jù)量增長(zhǎng)到一定程度,往往需要進(jìn)行數(shù)據(jù)庫(kù)切換,這里就伴隨這數(shù)據(jù)遷移。
關(guān)鍵字: 全量數(shù)據(jù)遷移,增量數(shù)據(jù)遷移,分庫(kù)分表,數(shù)據(jù)雙寫(xiě),oracle、mysql、hbase…,新老數(shù)據(jù)兼容,數(shù)據(jù)訂正
2、發(fā)布方案(遷移方案)
兩大類:正常發(fā)布、停機(jī)發(fā)布
正常發(fā)布:可以實(shí)現(xiàn)線上業(yè)務(wù)無(wú)縫切換,不影響用戶使用,需要保證新老數(shù)據(jù)兼容,發(fā)布過(guò)程中的數(shù)據(jù)寫(xiě)入等。
停機(jī)發(fā)布 : 優(yōu)點(diǎn)在于可以避免發(fā)布過(guò)程中的新數(shù)據(jù)寫(xiě)入,缺點(diǎn)是發(fā)布過(guò)程中,不能正常提供服務(wù)。
發(fā)布方案的制定是根據(jù)具體業(yè)務(wù)情況制定發(fā)布方案,對(duì)業(yè)務(wù)無(wú)影響的情況下較常采用停機(jī)發(fā)布,方便簡(jiǎn)單。
介紹一種無(wú)縫對(duì)接的正常發(fā)布方案
A庫(kù)歷史庫(kù) mysql分庫(kù)分表 到 B庫(kù)新庫(kù)hbase
步驟1、全量dump1:A庫(kù)數(shù)據(jù)全量遷移至B庫(kù)
步驟2、打開(kāi)雙寫(xiě):同時(shí)寫(xiě)入到A庫(kù)歷史庫(kù)和B庫(kù)新庫(kù)
步驟3、全量dump2:開(kāi)啟雙寫(xiě)前的所有差集,將差集灌回B數(shù)據(jù)庫(kù),這里是補(bǔ)充全量dump1期間和開(kāi)啟雙寫(xiě)前只寫(xiě)入到A的數(shù)據(jù)。保證了A、B數(shù)據(jù)庫(kù)數(shù)據(jù)的完全一致,同時(shí)已經(jīng)開(kāi)啟了雙寫(xiě)。
步驟3’、測(cè)試介入,可對(duì)A、B庫(kù)取某一時(shí)間段前所有數(shù)據(jù)進(jìn)行數(shù)據(jù)驗(yàn)證。
步驟4、停止對(duì)A庫(kù)的寫(xiě)入,發(fā)布前端應(yīng)用,切換至B庫(kù)新庫(kù)
注意點(diǎn):
1、雙寫(xiě)時(shí),B庫(kù)不存在被寫(xiě)源數(shù)據(jù)或B庫(kù)數(shù)據(jù)狀態(tài)異常等情況,需要從業(yè)務(wù)上考慮,是否直接從A庫(kù)中獲取數(shù)據(jù)并覆蓋至B庫(kù)
2、以上步驟中的多次dump和雙寫(xiě)有多個(gè)寫(xiě)入B庫(kù)的場(chǎng)景,需要以保證B庫(kù)和A庫(kù)一致為原則,如B庫(kù)的重復(fù)寫(xiě)入等情況的處理。
3、測(cè)試策略
在進(jìn)行數(shù)據(jù)遷移測(cè)試前,需確認(rèn)的CheckList
CheckList
1、 哪些表需要遷、哪些表不需要遷;需要遷移的表老庫(kù)和新庫(kù)的對(duì)應(yīng)關(guān)系是怎樣的
2、 明確表的關(guān)聯(lián)關(guān)系,關(guān)聯(lián)表是否需要遷移,不遷移怎么處理
3、 遷移的表中,哪些字段要遷移,哪些不遷移,對(duì)應(yīng)關(guān)系是怎樣的
4、 新表中的字段,老表是不是一定有,如果不一定,怎么處理可能為空的情況,尤其是必填字段的處理
5、 遷移前,新表是否為空,不為空是否可能存在數(shù)據(jù)重復(fù)的情況,怎么處理
6、 新老表中的字段類型、長(zhǎng)度的定義是否一致,可否正確轉(zhuǎn)換
7、 需遷移的表數(shù)據(jù)量為多少
8、 開(kāi)發(fā)做了哪些數(shù)據(jù)遷移正確性的保障
針對(duì)不同的業(yè)務(wù)場(chǎng)景需要測(cè)試人員設(shè)計(jì)不同的測(cè)試方案,主要都是兩個(gè)層面的驗(yàn)證,數(shù)據(jù)層面的數(shù)據(jù)驗(yàn)證和功能層面的功能驗(yàn)證
1、數(shù)據(jù)驗(yàn)證:使用工具或設(shè)計(jì)對(duì)賬程序全量驗(yàn)證
a、全量數(shù)據(jù)驗(yàn)證
b、增量數(shù)據(jù)驗(yàn)證
c、抽樣數(shù)據(jù)驗(yàn)證
根據(jù)業(yè)務(wù)情況判斷需要進(jìn)行哪一項(xiàng)或幾項(xiàng)數(shù)據(jù)驗(yàn)證
工具使用:可以選用目前較成熟的遷移工具:愚公移山, 兼全量數(shù)據(jù)驗(yàn)證和增量數(shù)據(jù)驗(yàn)證功能
驗(yàn)證方式:若遷移場(chǎng)景不在愚公的適用范圍內(nèi),全量驗(yàn)證和增量數(shù)據(jù)驗(yàn)證需要另外設(shè)計(jì)適用于該場(chǎng)景下的數(shù)據(jù)驗(yàn)證方案
可采用的一些驗(yàn)證方式:考慮根據(jù)不同數(shù)據(jù)的存儲(chǔ)方式,數(shù)據(jù)量的大小
a、關(guān)系數(shù)據(jù)庫(kù),直接新老數(shù)據(jù)庫(kù)中jdbc方式獲取數(shù)據(jù),一條條進(jìn)行對(duì)比,新老數(shù)據(jù)存在規(guī)則轉(zhuǎn)換的情況需要在對(duì)賬程序中同時(shí)進(jìn)行規(guī)則判斷。
b、全量或抽樣dump歷史庫(kù)和新庫(kù)兩份文件進(jìn)行對(duì)比,數(shù)據(jù)庫(kù)非常大的時(shí)候推薦使用hadoop
2、功能驗(yàn)證:主要是抽樣數(shù)據(jù)的功能測(cè)試
a、功能測(cè)試:對(duì)歷史數(shù)據(jù)常見(jiàn)的操作方式為,在歷史庫(kù)準(zhǔn)備一批歷史數(shù)據(jù),準(zhǔn)備什么樣的歷史數(shù)據(jù)依賴于具體業(yè)務(wù)的數(shù)據(jù)情況,通過(guò)遷移程序?qū)v史數(shù)據(jù)遷移至新庫(kù)后,驗(yàn)證這批數(shù)據(jù)的存儲(chǔ)和功能展現(xiàn)。新數(shù)據(jù)的驗(yàn)證則以新增功能的方式進(jìn)行測(cè)試。
b、自動(dòng)化測(cè)試:API自動(dòng)化+頁(yè)面自動(dòng)化:只有數(shù)據(jù)遷移沒(méi)有上層業(yè)務(wù)變更的情況下,如果已經(jīng)存在自動(dòng)化腳本,采用自動(dòng)化腳本可以快速回歸,重點(diǎn)在DAO層的方法。
以下情況需要特別設(shè)計(jì)用例進(jìn)行功能驗(yàn)證
1、 老表字段進(jìn)行類型或長(zhǎng)度等轉(zhuǎn)換遷移至新表
2、 老表中可能為空的字段,新表中直接為空或默認(rèn)一個(gè)初始值
3、 老表數(shù)據(jù)通過(guò)特殊處理轉(zhuǎn)換為新表中的值
4、 需要進(jìn)行數(shù)據(jù)訂正的字段
數(shù)據(jù)雙寫(xiě)
數(shù)據(jù)雙寫(xiě)往往伴隨著數(shù)據(jù)遷移進(jìn)行,精衛(wèi)工具能很好的支持?jǐn)?shù)據(jù)復(fù)制,并進(jìn)行數(shù)據(jù)比對(duì)。
在精衛(wèi)工具的試用范圍外的數(shù)據(jù)雙寫(xiě),一般是應(yīng)用中加入雙寫(xiě)代碼,這里也需要涉及數(shù)據(jù)比對(duì)程序,類似于數(shù)據(jù)遷移的比對(duì)程序;
可采用的驗(yàn)證方式:
1、根據(jù)數(shù)據(jù)雙寫(xiě)的實(shí)時(shí)性的特性, 在不影響應(yīng)用功能、性能的情況下,可以考慮在雙寫(xiě)代碼中加入驗(yàn)證程序,即每完成一次雙寫(xiě),即對(duì)插入的新老數(shù)據(jù)進(jìn)行數(shù)據(jù)比對(duì)。
2、枚舉所有涉及雙寫(xiě)的場(chǎng)景,逐個(gè)場(chǎng)景進(jìn)行功能驗(yàn)證
3、以全量的方式進(jìn)行數(shù)據(jù)比對(duì),數(shù)據(jù)雙寫(xiě)進(jìn)行到一定程度,能確保所有需要雙寫(xiě)的場(chǎng)景都已經(jīng)進(jìn)行過(guò),那么,對(duì)雙寫(xiě)的兩張表的數(shù)據(jù)截取gmt_modify時(shí)間為某一時(shí)間段以前的所有數(shù)據(jù)進(jìn)行比對(duì),約等于遷移的全量數(shù)據(jù)驗(yàn)證。
其他關(guān)注點(diǎn):
1、 考慮id預(yù)留空間:+**,需要足夠大,保證沒(méi)有主鍵沖突
2、 關(guān)注sql性能:分庫(kù)分表,尤其是跨庫(kù)查詢時(shí)需要關(guān)注性能情況,數(shù)據(jù)量比較大的情況下,可以考慮走搜索
posted on 2013-09-06 10:57 順其自然EVO 閱讀(559) 評(píng)論(0) 編輯 收藏