一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

分享一次海量數(shù)據(jù)平滑遷移實(shí)戰(zhàn)

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-07-03 16:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

背景

采購(gòu)系統(tǒng)(BIP)在經(jīng)歷多年演進(jìn)后,系統(tǒng)整體復(fù)雜度和數(shù)據(jù)量?jī)叭灰呀?jīng)極具規(guī)模,本文著重討論海量數(shù)據(jù)的治理

存儲(chǔ)現(xiàn)狀:工程端實(shí)時(shí)訂單庫(kù)采用MySQL 5.5集群,其中主庫(kù)配置為32C/48G/6000G,無(wú)法歸檔的訂單熱數(shù)據(jù)占磁盤空間85%(5.1T)

痛點(diǎn):6T磁盤已經(jīng)單容器最大,無(wú)法繼續(xù)擴(kuò)容,剩余磁盤余量過(guò)小,難適應(yīng)未來(lái)發(fā)展

目標(biāo)

降低磁盤容量,優(yōu)化數(shù)據(jù)模型,提升系統(tǒng)穩(wěn)定性

調(diào)研

首先,既然是要解決存儲(chǔ)容量的問(wèn)題,就要對(duì)詳細(xì)的容量情況有個(gè)更加清楚的了解??偨Y(jié)下當(dāng)前存儲(chǔ)容量問(wèn)題,最大的表是訂單操作日志表lifecycle共1.3T,大于500G的表2張共1.5T;100G~500G的表10張共2.6T。以下是優(yōu)化前庫(kù)里大表(大于100G)的詳細(xì)空間占用情況:

序號(hào) 表名 空間大?。ㄐ袛?shù)|總大?。鼣?shù)據(jù)大小|索引大?。?/th>
1 lifecycle 46億 | 1.3T | 856G | 328G
2 cgfenpei 5.8億 | 665G | 518G | 147G
3 cgtable 5.8億 | 491G | 287G | 204G
4 cgdetail 5.5億 | 405G | 308G | 97G
5 po_asn_receipt_detail 4.5億 | 351G |167G | 184G
6 po_data 2.5億 | 321G | 312G | 9G
7 purchase_order_extension 4.2億 | 293G | 166G | 127G
8 po_stock_detail 7.3億 | 204G | 104G | 100G
9 po_channel 6.1億 | 191G | 70G | 121G
10 cgtablesubtable 6億 | 154G | 62G | 92G
11 unduprecord 4.2億 | 138G | 138G | 0G
12 po_stock 2.8億 | 126G | 63G | 63G
?
合計(jì) 4.6T

其次,確認(rèn)當(dāng)前最高效的優(yōu)化思路是將lifecycle表遷移到其他庫(kù),原因有二:1.lifecycle表的含義是操作日志,在業(yè)務(wù)上不算訂單域內(nèi)最核心的模型,風(fēng)險(xiǎn)可控;2.占用空間大,單表46億行數(shù)據(jù),空間占用1.3T,一張表占了磁盤空間的22%,優(yōu)化的ROI高

最后,想說(shuō)明下,為什么沒有直接將整個(gè)庫(kù),從傳統(tǒng)MySQL切換到JED,原因也有二:1.JED和MySQL的查詢語(yǔ)法還是有一定差異,直接切換,成本和風(fēng)險(xiǎn)極高;2.切換存儲(chǔ)中間件,獲取分布式架構(gòu)下更大的存儲(chǔ)空間并不是銀彈,理智告訴我們要結(jié)合系統(tǒng)現(xiàn)狀,不可盲目下定論

挑戰(zhàn)

保障海量數(shù)據(jù)(存量46億行,增量600w+行/天,TPS峰值:500+,QPS峰值:200+)遷移期間讀、寫穩(wěn)定和準(zhǔn)確。需要補(bǔ)充一下:lifecycle雖然不算訂單最核心業(yè)務(wù)模型,但依舊是輔助業(yè)務(wù)決策的關(guān)鍵數(shù)據(jù),也非常重要

例子:

wKgZomaFDL-AOm55AAEYz3r4oPI090.png

方案

整體方案

數(shù)據(jù)同步 -> 雙讀 -> 雙寫 -> 離線驗(yàn)證 -> 數(shù)據(jù)清理

wKgZomaFDMCASkqxAAj6Pwvr8eo749.png

詳細(xì)設(shè)計(jì)

?數(shù)據(jù)同步,通過(guò)DRC實(shí)現(xiàn),歷史全量+增量,其中有以下幾點(diǎn)使用心得:

?同步速度問(wèn)題,本次是使用傳統(tǒng)MySQL5.5 -> JED 底層MySQL 8.0 單表同步,效率大概是4M/S,一共花了3天半左右

?數(shù)據(jù)同步過(guò)程中不要操作暫停,否則任務(wù)重啟后,會(huì)重新同步歷史數(shù)據(jù),導(dǎo)致數(shù)據(jù)同步周期變長(zhǎng)。詳情參考: 關(guān)于全量任務(wù)暫停重啟之后數(shù)據(jù)同步慢的原因

?字段兼容問(wèn)題,老庫(kù)歷史時(shí)間字段類型是datetime,新庫(kù)需要改為datetime(3),這種數(shù)據(jù)同步是可以兼容的(下文會(huì)講為什么要優(yōu)化時(shí)間字段精度)

?數(shù)據(jù)驗(yàn)證問(wèn)題,當(dāng)時(shí)在歷史數(shù)據(jù)全量同步完畢后開啟了DRC數(shù)據(jù)驗(yàn)證,但是許久未執(zhí)行完成,收到DRC運(yùn)維告知出現(xiàn)大量報(bào)錯(cuò),最終結(jié)論是暫時(shí)不支持這兩個(gè)版本的數(shù)據(jù)比對(duì)(5.5->8.0),這也是為什么整體架構(gòu)上采用BDP抽數(shù)比對(duì)數(shù)據(jù)的主要原因

?數(shù)據(jù)驗(yàn)證,業(yè)務(wù)程序完成雙寫、雙讀改造

?雙寫

wKgZomaFDMGAfjFxAAN0PJcumXw761.png

?為什么采用雙寫?答:控制風(fēng)險(xiǎn)。1.團(tuán)隊(duì)內(nèi)還沒有應(yīng)用直接寫入多分片JED的先例,而且新、老庫(kù)的底層MySQL版本也差異比較大(5.5 vs 8.0),當(dāng)時(shí)通過(guò)分批次灰度上線完成逐步切量驗(yàn)證;2.方便進(jìn)行數(shù)據(jù)驗(yàn)證,lifecycle是業(yè)務(wù)操作日志,基本涵蓋了所有的寫入場(chǎng)景,其中因?yàn)闅v史問(wèn)題,不乏一部分邏輯和訂單更新在同一事務(wù)中,現(xiàn)在遷移到新庫(kù),本地事務(wù)會(huì)存在不生效的場(chǎng)景

?具體改造方案:

?新增【驗(yàn)證開關(guān)】,開啟后新/老庫(kù)雙寫,另外需要要引入vitess驅(qū)動(dòng),目前只支持JDK8及以上

?新增【上線開關(guān)】,開啟后只寫新庫(kù),此開關(guān)是在驗(yàn)證邏輯無(wú)問(wèn)題后,最終切換的開關(guān),代表遷移完成

?注意,開關(guān)改造完成上線后,“全量+增量DRC任務(wù)”在驗(yàn)證期間是一直啟用的,也就是說(shuō)驗(yàn)證期間,增量數(shù)據(jù)會(huì)寫兩份到新庫(kù)

?一部分是實(shí)際的生產(chǎn)數(shù)據(jù),一部分是待驗(yàn)證的測(cè)試數(shù)據(jù)。那么就帶來(lái)另一個(gè)問(wèn)題,如何識(shí)別和區(qū)分這兩部分?jǐn)?shù)據(jù),我們采用的方案是:JED建表指定趨勢(shì)自增的最小id(200億)+【驗(yàn)證開關(guān)】開啟的時(shí)間戳進(jìn)行區(qū)分

?如下圖,其中A和A'都是【驗(yàn)證開關(guān)】切換后的增量數(shù)據(jù),由于老庫(kù)的id已經(jīng)自增寫到了70億,并且DRC同步任務(wù)也是指定id寫入,所以建表時(shí)指定新增數(shù)據(jù)id是200億(詳情參考: 數(shù)據(jù)庫(kù)自增ID列設(shè)置 ),和老數(shù)據(jù)之間存在一定gap方便識(shí)別。BDP腳本數(shù)據(jù)比對(duì)的也是:老庫(kù).A和新庫(kù).A'(這里默認(rèn)DRC增量同步的數(shù)據(jù)是準(zhǔn)確的)

?清除測(cè)試數(shù)據(jù),真正完成【上線開關(guān)】切換,需要提前清除測(cè)試數(shù)據(jù),只需指定id>200億的物理刪除即可。注意:針對(duì)多分片的JED物理刪除delete語(yǔ)句,我們程序上如果為了防止大事務(wù),而采用“for循環(huán)+limit n”的方式執(zhí)行,實(shí)際的每次SQL語(yǔ)句執(zhí)行結(jié)果是多個(gè)分片的n的聚合,而不是n,如果程序上對(duì)結(jié)果有判斷邏輯,需要額外注意

wKgaomaFDMGAY5rGAAOA-LF7I_U880.png

?雙讀

wKgZomaFDMKAMNWiAATOmQl2_C8531.png

?整體邏輯基本復(fù)用寫入期間已有開關(guān),其中針對(duì)新庫(kù)當(dāng)中DRC實(shí)時(shí)同步的數(shù)據(jù)(上圖:新庫(kù).A)會(huì)根據(jù)開關(guān)開啟時(shí)間進(jìn)行過(guò)濾

?其中,在驗(yàn)證期間,新、老庫(kù)都會(huì)根據(jù)采購(gòu)單號(hào)進(jìn)行查詢并實(shí)際返回老庫(kù)的查詢結(jié)果,其中還會(huì)進(jìn)行結(jié)果比對(duì),出現(xiàn)數(shù)據(jù)不一致會(huì)輸出異常日志關(guān)鍵字

?另外,因?yàn)閘ifecycle操作日志數(shù)據(jù)是有先后順序的,老庫(kù)的處理方式是根據(jù)自增id進(jìn)行倒排,到了新庫(kù)以后,由于采用的是JED分片(分布式存儲(chǔ)的磁盤空間更大),考慮到開發(fā)成本,數(shù)據(jù)id采用的是趨勢(shì)遞增的自增主鍵(詳情參考: Vitess全局唯一ID生成的實(shí)現(xiàn)方案 ),這時(shí)多集群并行寫入無(wú)法繼續(xù)使用基于id倒排的方式返回結(jié)果(后寫入的數(shù)據(jù)可能id較小,可以參考sequece發(fā)號(hào)器的ID生成),所以將原始的數(shù)據(jù)寫入時(shí)間戳從datetime提高精度到datetime(3),通過(guò)數(shù)據(jù)寫入時(shí)間進(jìn)行倒排,這里也解釋了上文,新庫(kù)DRC數(shù)據(jù)同步為什么要考慮字段兼容的問(wèn)題

?補(bǔ)充1:這里基于時(shí)間倒排在業(yè)務(wù)上是準(zhǔn)確的,因?yàn)閘ifecycle數(shù)據(jù)是根據(jù)訂單號(hào)進(jìn)行分片的,所以同一訂單一定落在單分片上,也就是說(shuō)不存在不同分片時(shí)鐘偏移的問(wèn)題,單訂單的操作日志的時(shí)間序列一定是按照寫入順序逐漸增加的

?補(bǔ)充2:新庫(kù)字段類型變更(datetime->datetime(3)),32分片,共46億行數(shù)據(jù),執(zhí)行了大概1小時(shí),期間主從延遲最高30分鐘,容器負(fù)載正常

?補(bǔ)充3:應(yīng)用的關(guān)鍵字告警配置,日志文件僅支持以error.log、err.log、exception.log結(jié)尾,并開啟歷史日志的路徑

?最后,雙讀期間共通過(guò)業(yè)務(wù)的實(shí)際查詢流量發(fā)現(xiàn)數(shù)據(jù)不一致問(wèn)題2個(gè)+,在并未影響到業(yè)務(wù)使用的前提下及時(shí)發(fā)現(xiàn)了系統(tǒng)異常

?離線驗(yàn)證

?lifecycle歸根結(jié)底還是寫多讀少的業(yè)務(wù)場(chǎng)景,為了防止出現(xiàn)上文數(shù)據(jù)比對(duì)驗(yàn)證的遺漏,我們會(huì)采用BDP離線任務(wù)會(huì)分別開啟增量數(shù)據(jù)+歷史全量數(shù)據(jù)驗(yàn)證。通過(guò)對(duì)新、老庫(kù)的全量數(shù)據(jù)字段相互sql inner join的方式完成比對(duì),其中會(huì)忽略id和寫入時(shí)間,因?yàn)樾聨?kù)的id不是單調(diào)遞增、時(shí)間精確到了毫秒。期間共發(fā)現(xiàn)有效數(shù)據(jù)問(wèn)題3個(gè)+,均是因?yàn)楸镜厥聞?wù)回滾導(dǎo)致的數(shù)據(jù)不一致的場(chǎng)景

?收尾工作

?完成【上線開關(guān)】切換,只讀、寫新庫(kù),完成整體平滑遷移。在無(wú)QA參與前提下,驗(yàn)證期間未出現(xiàn)過(guò)數(shù)據(jù)丟失、重復(fù)、錯(cuò)誤等異常

?切換完成后,老庫(kù)老表和DRC同步任務(wù)依舊保留了一周的時(shí)間,防止出現(xiàn)場(chǎng)景遺漏,產(chǎn)生數(shù)據(jù)丟失

?46億行大表清理,采用drop+create的方式實(shí)現(xiàn)效率、穩(wěn)定性更高,在業(yè)務(wù)低峰期完成腳本執(zhí)行,大概花費(fèi)10秒的時(shí)間,容器負(fù)載、內(nèi)存等指標(biāo)正常。但是當(dāng)時(shí)碰上了DBA的備份任務(wù),導(dǎo)致有一個(gè)從庫(kù)主從延遲升高,這個(gè)后續(xù)需要注意

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)
    +關(guān)注

    關(guān)注

    8

    文章

    7252

    瀏覽量

    91712
  • 存儲(chǔ)
    +關(guān)注

    關(guān)注

    13

    文章

    4527

    瀏覽量

    87341
  • 遷移
    +關(guān)注

    關(guān)注

    0

    文章

    34

    瀏覽量

    8050
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    移動(dòng)電源EMC整改:認(rèn)證失敗到一次通過(guò)的實(shí)戰(zhàn)經(jīng)驗(yàn)

    深圳南柯電子|移動(dòng)電源EMC整改:認(rèn)證失敗到一次通過(guò)的實(shí)戰(zhàn)經(jīng)驗(yàn)
    的頭像 發(fā)表于 05-26 11:25 ?175次閱讀
    移動(dòng)電源EMC整改:認(rèn)證失敗到<b class='flag-5'>一次</b>通過(guò)的<b class='flag-5'>實(shí)戰(zhàn)</b>經(jīng)驗(yàn)

    充電樁EMC整改:測(cè)試失敗到一次過(guò)檢的標(biāo)準(zhǔn)化流程設(shè)計(jì)

    南柯電子|充電樁EMC整改:測(cè)試失敗到一次過(guò)檢的標(biāo)準(zhǔn)化流程設(shè)計(jì)
    的頭像 發(fā)表于 05-09 11:19 ?234次閱讀

    一次消諧裝置與二消諧裝置區(qū)別、一次消諧器與二消諧器的區(qū)別

    一次消諧器與二消諧器是電力系統(tǒng)中用于抑制諧振過(guò)電壓的不同裝置,主要區(qū)別如下: 安裝位置:一次消諧器串聯(lián)于電壓互感器(PT)一次側(cè)中性點(diǎn)與地之間,直接承受高電壓;二
    的頭像 發(fā)表于 05-07 09:58 ?943次閱讀
    <b class='flag-5'>一次</b>消諧裝置與二<b class='flag-5'>次</b>消諧裝置區(qū)別、<b class='flag-5'>一次</b>消諧器與二<b class='flag-5'>次</b>消諧器的區(qū)別

    歐度MEDI-SNAP一次性醫(yī)用插頭發(fā)布

    歐度MEDI-SNAP一次性醫(yī)用插頭產(chǎn)品組加入新成員啦!為滿足一次性內(nèi)窺鏡、一次性手術(shù)消融刀等設(shè)備中的耗材需求,歐度將ODU MEDI-SNAP一次性醫(yī)用插頭的鎖定方式擴(kuò)展為插拔自鎖和
    的頭像 發(fā)表于 02-21 16:00 ?482次閱讀

    一次性鋰電池為什么不能充電?文講清!

    一次性鋰電池不能充電,是由它的正負(fù)極材料、電解液等決定的。雖然它不能充電,但在某些場(chǎng)景下,還是有著不可替代的作用。希望通過(guò)這篇文章,能讓大家對(duì)一次性鋰電池有更深入的了解,以后在生活中使用的時(shí)候,也能更安全、更環(huán)保。
    的頭像 發(fā)表于 01-23 14:11 ?1173次閱讀
    <b class='flag-5'>一次</b>性鋰電池為什么不能充電?<b class='flag-5'>一</b>文講清!

    HarmonyOS Next 應(yīng)用元服務(wù)開發(fā)-應(yīng)用接續(xù)動(dòng)態(tài)配置遷移快速啟動(dòng)目標(biāo)應(yīng)用

    ()請(qǐng)求,隨后再收到一次launchReason為接續(xù)拉起(CONTINUATION)的onNewWant()請(qǐng)求。如下所示: 如果沒有配置快速拉起,則觸發(fā)遷移時(shí)只會(huì)收到一次啟動(dòng)請(qǐng)求: 配置快速拉起后
    發(fā)表于 12-31 09:58

    MySQL數(shù)據(jù)遷移的流程介紹

    本文介紹了一次 MySQL 數(shù)據(jù)遷移的流程,通過(guò)方案選型、業(yè)務(wù)改造、雙寫遷移最終實(shí)現(xiàn)了億級(jí)數(shù)據(jù)遷移
    的頭像 發(fā)表于 11-25 09:20 ?513次閱讀
    MySQL<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>遷移</b>的流程介紹

    AFE4403是在ADC_RDY中斷后只讀取一次數(shù)據(jù)嗎?

    是在ADC_RDY中斷后只讀取一次數(shù)據(jù)么?還是會(huì)有4組數(shù)據(jù)
    發(fā)表于 11-15 08:31

    海量數(shù)據(jù)處理需要多少RAM內(nèi)存

    海量數(shù)據(jù)處理所需的RAM(隨機(jī)存取存儲(chǔ)器)內(nèi)存量取決于多個(gè)因素,包括數(shù)據(jù)的具體規(guī)模、處理任務(wù)的復(fù)雜性、數(shù)據(jù)庫(kù)管理系統(tǒng)的效率以及所使用軟件的優(yōu)化程度等。以下是對(duì)所需內(nèi)存量的分析:
    的頭像 發(fā)表于 11-11 09:56 ?1242次閱讀

    emc數(shù)據(jù)遷移工具的使用指南

    在當(dāng)今快速發(fā)展的信息技術(shù)領(lǐng)域,數(shù)據(jù)遷移成為了企業(yè)IT戰(zhàn)略中不可或缺的部分。隨著數(shù)據(jù)量的激增和業(yè)務(wù)需求的變化,企業(yè)需要將數(shù)據(jù)
    的頭像 發(fā)表于 11-01 15:55 ?826次閱讀

    一次電源與二電源有什么不同

    在電力系統(tǒng)和電子設(shè)備的供電領(lǐng)域中,一次電源與二電源是兩個(gè)至關(guān)重要的概念。它們各自承擔(dān)著不同的功能和角色,共同確保電力供應(yīng)的穩(wěn)定性和可靠性。本文將對(duì)一次電源與二電源的定義、區(qū)別以及它
    的頭像 發(fā)表于 10-10 14:10 ?4974次閱讀

    一次電池分類以及應(yīng)用場(chǎng)景詳解

    01 一次電池簡(jiǎn)介 一次電池即原電池(primarycell、primarybattery)(俗稱干電池),是放電后不能再充電使其復(fù)原的電池,通電電池有正極、負(fù)極電解以及容器和隔膜等組成。 一次電池
    的頭像 發(fā)表于 09-30 17:52 ?2690次閱讀
    <b class='flag-5'>一次</b>電池分類以及應(yīng)用場(chǎng)景詳解

    ODU MEDI-SNAP一次性醫(yī)用插拔自鎖插頭產(chǎn)品介紹

    為滿足一次性內(nèi)窺鏡、一次性手術(shù)消融刀等設(shè)備中的耗材需求,歐度全新推出了MEDI-SNAP一次性醫(yī)用插拔自鎖插頭,為醫(yī)療客戶打造了組在品質(zhì)與經(jīng)濟(jì)性上均能滿足需求的高性價(jià)比解決方案。
    的頭像 發(fā)表于 09-10 09:59 ?836次閱讀

    無(wú)線時(shí)鐘秒轉(zhuǎn)一次思路怎么設(shè)置

    創(chuàng)建個(gè)無(wú)線時(shí)鐘,使其每秒轉(zhuǎn)動(dòng)一次,涉及到多個(gè)領(lǐng)域的知識(shí),包括電子工程、無(wú)線通信、編程和機(jī)械設(shè)計(jì)。 1. 項(xiàng)目概述 無(wú)線時(shí)鐘每秒轉(zhuǎn)動(dòng)一次的項(xiàng)目可以分為以下幾個(gè)主要部分: 機(jī)械設(shè)計(jì) :設(shè)計(jì)
    的頭像 發(fā)表于 09-07 09:21 ?547次閱讀

    labview如何做到一次觸發(fā)采集一次

    最近在做個(gè)電壓測(cè)試模塊,要求是在個(gè)時(shí)間段內(nèi),出現(xiàn)個(gè)上升沿觸發(fā)采集,并且只采集一次,采集次數(shù)為出現(xiàn)上升沿的次數(shù),采集時(shí)間,采樣率及單
    發(fā)表于 08-07 10:16