qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問(wèn) http://qaseven.github.io/

          數(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)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          <2013年9月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 揭东县| 嘉峪关市| 沾益县| 廉江市| 台北市| 柞水县| 静乐县| 射洪县| 合水县| 聂荣县| 昆山市| 鄂伦春自治旗| 镇江市| 江北区| 扶绥县| 凤冈县| 盐源县| 陆河县| 常德市| 彭泽县| 海盐县| 高安市| 昆山市| 那曲县| 安福县| 左权县| 隆子县| 龙井市| 札达县| 容城县| 宿州市| 徐水县| 新泰市| 台南市| 呼和浩特市| 娱乐| 七台河市| 耒阳市| 郁南县| 郧西县| 永福县|