91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

背景

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

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

痛點:6T磁盤已經(jīng)單容器最大,無法繼續(xù)擴容,剩余磁盤余量過小,難適應(yīng)未來發(fā)展

目標(biāo)

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

調(diào)研

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

序號 表名 空間大?。ㄐ袛?shù)|總大小|數(shù)據(jù)大?。?a target="_blank">索引大小)
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
?
合計 4.6T

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

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

挑戰(zhàn)

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

例子:

wKgZomaFDL-AOm55AAEYz3r4oPI090.png

方案

整體方案

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

wKgZomaFDMCASkqxAAj6Pwvr8eo749.png

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

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

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

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

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

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

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

?雙寫

wKgZomaFDMGAfjFxAAN0PJcumXw761.png

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

?具體改造方案:

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

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

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

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

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

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

wKgaomaFDMGAY5rGAAOA-LF7I_U880.png

?雙讀

wKgZomaFDMKAMNWiAATOmQl2_C8531.png

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

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

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

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

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

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

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

?離線驗證

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

?收尾工作

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

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

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

審核編輯 黃宇

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

    關(guān)注

    8

    文章

    7340

    瀏覽量

    94870
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4812

    瀏覽量

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

    關(guān)注

    0

    文章

    34

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    一次寫入,永久鎖定!OTP存儲操作需謹(jǐn)慎

    今天,我們起來聊聊LuatOS中的OTP功能。 OTP(One-Time Programmable Memory) 是一次性可編程存儲。其核心特點是 “一次寫入,永久鎖定” ,數(shù)據(jù)
    的頭像 發(fā)表于 01-27 17:52 ?1068次閱讀
    <b class='flag-5'>一次</b>寫入,永久鎖定!OTP存儲操作需謹(jǐn)慎

    與軸一次成型的微電機轉(zhuǎn)子磁鐵

    在微型電機領(lǐng)域,與軸一次成型的轉(zhuǎn)子磁鐵正逐漸成為種被廣泛采用的結(jié)構(gòu)方案,相比傳統(tǒng)“磁鐵+轉(zhuǎn)軸后裝配”的形式,這類轉(zhuǎn)子在結(jié)構(gòu)、性能和致性方面都有明顯優(yōu)勢,特別適合對體積、精度和可靠性要求較高的微電機應(yīng)用。
    的頭像 發(fā)表于 01-27 11:40 ?362次閱讀
    與軸<b class='flag-5'>一次</b>成型的微電機轉(zhuǎn)子磁鐵

    如何判斷一次消諧器是否工作正常?

    判斷一次消諧器是否正常,其實就看它有沒有“扛住”系統(tǒng)電壓、及時“泄放”諧振能量,同時自己保持“健康”狀態(tài)。核心方法是?外觀檢查、電氣參數(shù)測試和運行狀態(tài)觀察?三管齊下。
    的頭像 發(fā)表于 01-22 10:27 ?215次閱讀
    如何判斷<b class='flag-5'>一次</b>消諧器是否工作正常?

    光伏一次調(diào)頻設(shè)備/一次調(diào)頻裝置|光伏一次調(diào)頻涉網(wǎng)試驗/光伏電站一次調(diào)頻建設(shè)改造方案

    2025年以來能源局下發(fā)通知要求10KV以上的新能源廠站要具備一次調(diào)頻能力,并遞交涉網(wǎng)試驗報告。對于投資規(guī)模不大的工商業(yè)分布式光伏電站,又要面臨改造投資問題,壓力較大。如何選擇質(zhì)優(yōu)價廉的一次調(diào)頻產(chǎn)品
    的頭像 發(fā)表于 01-17 08:54 ?1333次閱讀
    光伏<b class='flag-5'>一次</b>調(diào)頻設(shè)備/<b class='flag-5'>一次</b>調(diào)頻裝置|光伏<b class='flag-5'>一次</b>調(diào)頻涉網(wǎng)試驗/光伏電站<b class='flag-5'>一次</b>調(diào)頻建設(shè)改造方案

    光伏一次調(diào)頻設(shè)備,光伏電站一次調(diào)頻建設(shè)改造方案

    數(shù)據(jù),和調(diào)頻狀態(tài)的監(jiān)視。 些大型的新能源發(fā)電廠站一次調(diào)頻和AGC系統(tǒng)會配置工程師工作站,用于更加豐富翔實地展示廠站一次調(diào)頻和AGC/AVC實時工況和
    發(fā)表于 01-16 20:06

    一次消諧器對電力系統(tǒng)的核心貢獻

    一次消諧器(又稱 PT 一次消諧裝置)是安裝在電壓互感器一次側(cè)中性點與地之間的非線性電阻設(shè)備,主要應(yīng)用于3-66kV 中性點不接地或經(jīng)消弧線圈接地的中壓配電網(wǎng),對保障電力系統(tǒng)安全穩(wěn)定運行具有不可替代
    的頭像 發(fā)表于 01-07 06:40 ?372次閱讀
    <b class='flag-5'>一次</b>消諧器對電力系統(tǒng)的核心貢獻

    車間協(xié)議戰(zhàn)爭調(diào)停者:記一次MODBUS TCP與PROFIBUS的融合實戰(zhàn)

    ?車間協(xié)議戰(zhàn)爭調(diào)停者:記一次MODBUS TCP與PROFIBUS的融合實戰(zhàn) 去年,我們團隊接到個改造項目:家大型鋰電池制造廠希望整合其新舊設(shè)備的
    的頭像 發(fā)表于 12-22 14:10 ?226次閱讀
    車間協(xié)議戰(zhàn)爭調(diào)停者:記<b class='flag-5'>一次</b>MODBUS TCP與PROFIBUS的融合<b class='flag-5'>實戰(zhàn)</b>

    解析一次消諧和二消諧的差異與應(yīng)用場景

    在電力系統(tǒng)中,消諧裝置是保障系統(tǒng)穩(wěn)定運行的關(guān)鍵設(shè)備,它可以有效消除諧振過電壓,避免因諧振引發(fā)的設(shè)備損壞和停電事故。一次消諧器和微機消諧裝置,都可以用于PT柜,保護電壓互感器。 一次消諧器和微機消諧
    的頭像 發(fā)表于 12-11 11:33 ?551次閱讀

    固定式測斜儀多久需要校準(zhǔn)一次?

    在結(jié)構(gòu)物安全監(jiān)測領(lǐng)域,固定式測斜儀的校準(zhǔn)頻率直接影響數(shù)據(jù)可靠性。根據(jù)工程實踐與設(shè)備特性,科學(xué)制定校準(zhǔn)計劃需綜合考量環(huán)境條件、使用強度及工程風(fēng)險等級。那么固定式測斜儀多久需要校準(zhǔn)一次?常規(guī)校準(zhǔn)周期建議
    的頭像 發(fā)表于 08-13 14:47 ?830次閱讀
    固定式測斜儀多久需要校準(zhǔn)<b class='flag-5'>一次</b>?

    智能客服驅(qū)動效率和體驗升級,上海電信+昇騰AI的一次民生應(yīng)用實踐

    上海電信+昇騰AI的一次民生應(yīng)用實踐
    的頭像 發(fā)表于 07-30 23:44 ?2972次閱讀
    智能客服驅(qū)動效率和體驗升級,上海電信+昇騰AI的<b class='flag-5'>一次</b>民生應(yīng)用實踐

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

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

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

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

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

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

    微機消諧器與一次消諧器區(qū)別與聯(lián)系

    微機消諧器與一次消諧器都是用于電力系統(tǒng)中抑制諧波和消除鐵磁諧振的設(shè)備,
    的頭像 發(fā)表于 04-22 16:21 ?858次閱讀

    一次性使用心電電極片性能測試 深圳

    一次性使用心電電極片性能測試 :YICE0196 心電電極電性能測試儀、 心電電極電性能測試儀(SEAM) 心電電極性能測試儀
    的頭像 發(fā)表于 03-19 11:27 ?1501次閱讀
    <b class='flag-5'>一次</b>性使用心電電極片性能測試 深圳<b class='flag-5'>一</b>測