在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

分享一次海量數據平滑遷移實戰

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-07-03 16:33 ? 次閱讀

背景

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

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

痛點:6T磁盤已經單容器最大,無法繼續擴容,剩余磁盤余量過小,難適應未來發展

目標

降低磁盤容量,優化數據模型,提升系統穩定性

調研

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

序號 表名 空間大小(行數|總大小|數據大小|索引大小)
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

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

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

挑戰

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

例子:

wKgZomaFDL-AOm55AAEYz3r4oPI090.png

方案

整體方案

數據同步 -> 雙讀 -> 雙寫 -> 離線驗證 -> 數據清理

wKgZomaFDMCASkqxAAj6Pwvr8eo749.png

詳細設計

?數據同步,通過DRC實現,歷史全量+增量,其中有以下幾點使用心得:

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

?數據同步過程中不要操作暫停,否則任務重啟后,會重新同步歷史數據,導致數據同步周期變長。詳情參考: 關于全量任務暫停重啟之后數據同步慢的原因

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

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

?數據驗證,業務程序完成雙寫、雙讀改造

?雙寫

wKgZomaFDMGAfjFxAAN0PJcumXw761.png

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

?具體改造方案:

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

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

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

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

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

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

wKgaomaFDMGAY5rGAAOA-LF7I_U880.png

?雙讀

wKgZomaFDMKAMNWiAATOmQl2_C8531.png

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

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

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

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

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

?補充3:應用的關鍵字告警配置,日志文件僅支持以error.log、err.log、exception.log結尾,并開啟歷史日志的路徑

?最后,雙讀期間共通過業務的實際查詢流量發現數據不一致問題2個+,在并未影響到業務使用的前提下及時發現了系統異常

?離線驗證

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

?收尾工作

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

?切換完成后,老庫老表和DRC同步任務依舊保留了一周的時間,防止出現場景遺漏,產生數據丟失

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

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7237

    瀏覽量

    90897
  • 存儲
    +關注

    關注

    13

    文章

    4492

    瀏覽量

    86997
  • 遷移
    +關注

    關注

    0

    文章

    34

    瀏覽量

    8033
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    一次消諧裝置與二消諧裝置區別、一次消諧器與二消諧器的區別

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

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

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

    HarmonyOS Next 應用元服務開發-應用接續動態配置遷移快速啟動目標應用

    ()請求,隨后再收到一次launchReason為接續拉起(CONTINUATION)的onNewWant()請求。如下所示: 如果沒有配置快速拉起,則觸發遷移時只會收到一次啟動請求: 配置快速拉起后
    發表于 12-31 09:58

    MySQL數據遷移的流程介紹

    本文介紹了一次 MySQL 數據遷移的流程,通過方案選型、業務改造、雙寫遷移最終實現了億級數據遷移
    的頭像 發表于 11-25 09:20 ?414次閱讀
    MySQL<b class='flag-5'>數據</b><b class='flag-5'>遷移</b>的流程介紹

    AFE4403是在ADC_RDY中斷后只讀取一次數據嗎?

    是在ADC_RDY中斷后只讀取一次數據么?還是會有4組數據
    發表于 11-15 08:31

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

    在電力系統和電子設備的供電領域中,一次電源與二電源是兩個至關重要的概念。它們各自承擔著不同的功能和角色,共同確保電力供應的穩定性和可靠性。本文將對一次電源與二電源的定義、區別以及它
    的頭像 發表于 10-10 14:10 ?4507次閱讀

    一次電池分類以及應用場景詳解

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

    ODU MEDI-SNAP一次性醫用插拔自鎖插頭產品介紹

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

    labview如何做到一次觸發采集一次

    最近在做個電壓測試模塊,要求是在個時間段內,出現個上升沿觸發采集,并且只采集一次,采集次數為出現上升沿的次數,采集時間,采樣率及單
    發表于 08-07 10:16

    stm32F407第一次數據沒有進行接收,第二次數據發送時才進行接,為什么?

    stm32F407第一次數據沒有進行接收,第二次數據發送時才進行接
    發表于 07-05 08:11

    一次消諧器的構造

    今天來給大家介紹一下一次消諧器的構造。 一次消諧器是種用于消除電力系統中的諧波及無功功率的裝置,它由感性元件和電容器構成,感性元件用于吸收系統中的無功功率,而電容器則用于補償系統中的感性無功功率
    的頭像 發表于 05-30 14:55 ?726次閱讀

    鴻蒙OS開發:典型頁面場景【一次開發,多端部署】實戰(設置典型頁面)

    本示例展示了設置應用的典型頁面,其在小窗口和大窗口有不同的顯示效果,體現一次開發、多端部署的能力。
    的頭像 發表于 05-27 09:36 ?1468次閱讀
    鴻蒙OS開發:典型頁面場景【<b class='flag-5'>一次</b>開發,多端部署】<b class='flag-5'>實戰</b>(設置典型頁面)

    鴻蒙OS開發:典型頁面場景【一次開發,多端部署】實戰(音樂專輯頁2)

    本示例使用[一次開發多端部署]中介紹的自適應布局能力和響應式布局能力進行多設備(或多窗口尺寸)適配,保證應用在不同設備或不同窗口尺寸下可以正常顯示。
    的頭像 發表于 05-25 16:47 ?2442次閱讀
    鴻蒙OS開發:典型頁面場景【<b class='flag-5'>一次</b>開發,多端部署】<b class='flag-5'>實戰</b>(音樂專輯頁2)

    鴻蒙OS開發:【一次開發,多端部署】(視頻應用)

    提供了“一次開發,多端部署”的系統能力,讓開發者可以基于一次開發,快速構建不同類型終端上的應用,降低開發成本,提高開發效率。
    的頭像 發表于 05-25 16:29 ?4904次閱讀
    鴻蒙OS開發:【<b class='flag-5'>一次</b>開發,多端部署】(視頻應用)

    拒絕無效嘗試,EMC問題解決實戰教學帶你一次性解決問題!

    EMC實戰教學SES2024.06.06輻射發射、傳導發射、ESD、EFT、CS、浪涌等幾個項目是產品電磁兼容測試中的常見問題,也是困擾廣大工程師朋友的整改定位分析難題;在這種時刻,如有通過實戰直播
    的頭像 發表于 05-24 08:17 ?574次閱讀
    拒絕無效嘗試,EMC問題解決<b class='flag-5'>實戰</b>教學帶你<b class='flag-5'>一次</b>性解決問題!
    主站蜘蛛池模板: 久久99久久99精品免观看 | 国产精品国产三级国产在线观看 | 国产午夜免费视频片夜色 | 日本三级在线观看免费 | 狠狠色丁香婷婷综合橹不卡 | 亚洲国产一区二区在线 | 激情丁香网 | 饥渴少妇videos | 日本精品视频四虎在线观看 | 欧美人交性视频在线香蕉 | 免费爱爱视频网站 | 在线播放91灌醉迷j高跟美女 | 亚洲视频精选 | 欧美一级特黄aaaaaa在线看片 | 黄 色 成 年人在线 黄a大片 | 老师喂我吃她的奶水脱她胸罩 | 免费观看成人欧美1314www | 亚洲精品美女久久久久网站 | aaaa级日本片免费视频 | 四虎影院在线观看免费 | 国模沟沟一区二区三区 | 亚洲综合丁香婷婷六月香 | 超级极品白嫩美女在线 | 全午夜免费一级毛片 | caobi在线观看 | 免费在线看视频 | 亚洲国产欧美在线人成aaa | 美女扒开尿口给男人桶视频免费 | 人人爽人人看 | 伊人手机在线观看 | 久久www免费人成看片色多多 | 久久美女免费视频 | 日产精品卡二卡三卡四卡乱码视频 | 日韩一卡 二卡 三卡 四卡 免费视频 | 波多野结衣三个女人蕾丝边 | 中文字幕一区在线 | 狂野欧美激情性xxxx | 天堂网. www在线资源 | 天天操夜夜艹 | 女人张开腿给男人桶爽免费 | 无限国产资源 |