400-638-8808
|
微信公眾號(hào)








穩(wěn)定可靠 永不間斷

海外收發(fā) 暢通無(wú)阻

協(xié)同辦公 資源管理

超大郵件 超級(jí)功能

智能反垃圾郵件技術(shù)
易管理 免維護(hù)

微信掃一掃 關(guān)注"天下數(shù)據(jù)"商品一律九折
![]()
搜索"朗玥科技"關(guān)注,了解最新優(yōu)惠

一、問(wèn)題的提出
(1)上游是業(yè)務(wù)層biz,實(shí)現(xiàn)個(gè)性化的業(yè)務(wù)邏輯
(2)中游是服務(wù)層service,封裝數(shù)據(jù)訪問(wèn)
(3)下游是數(shù)據(jù)層db,存儲(chǔ)固化的業(yè)務(wù)數(shù)據(jù)
服務(wù)化分層架構(gòu)的好處是,服務(wù)層屏蔽下游數(shù)據(jù)層的復(fù)雜性,例如緩存、分庫(kù)分表、存儲(chǔ)引擎等存儲(chǔ)細(xì)節(jié)不需要向調(diào)用方暴露,而只向上游提供方便的RPC訪問(wèn)接口,當(dāng)有一些數(shù)據(jù)層變化的時(shí)候,所有的調(diào)用方也不需要升級(jí),只需要服務(wù)層升級(jí)即可。
互聯(lián)網(wǎng)架構(gòu),很多時(shí)候面臨著這樣一些需求:
需求1->底層表結(jié)構(gòu)變更:數(shù)據(jù)量非常大的情況下,數(shù)據(jù)表增加了一些屬性,刪除了一些屬性,修改了一些屬性。
需求2->分庫(kù)個(gè)數(shù)變換:由于數(shù)據(jù)量的持續(xù)增加,底層分庫(kù)個(gè)數(shù)非成倍增加。
需求3->底層存儲(chǔ)介質(zhì)變換:底層存儲(chǔ)引擎由一個(gè)數(shù)據(jù)庫(kù)換為另一個(gè)數(shù)據(jù)庫(kù)。
種種需求,都需要進(jìn)行數(shù)據(jù)遷移,如何平滑遷移數(shù)據(jù),遷移過(guò)程不停機(jī),保證系統(tǒng)持續(xù)服務(wù),是文本將要討論的問(wèn)題。
二、停機(jī)方案
在討論平滑遷移數(shù)據(jù)方案之前,先看下不平滑的停機(jī)數(shù)據(jù)遷移方案,主要分三個(gè)步驟。
步驟一:掛一個(gè)類似“為了給廣大用戶提供更好的服務(wù),服務(wù)器會(huì)在凌晨0:00-0:400進(jìn)行停機(jī)維護(hù)”的公告,并在對(duì)應(yīng)時(shí)段進(jìn)行停機(jī),這個(gè)時(shí)段系統(tǒng)沒(méi)有流量進(jìn)入。
步驟二:停機(jī)后,研發(fā)一個(gè)離線的數(shù)據(jù)遷移工具,進(jìn)行數(shù)據(jù)遷移。針對(duì)第一節(jié)的三類需求,會(huì)分別開發(fā)不同的數(shù)據(jù)遷移工具。
(1)底層表結(jié)構(gòu)變更需求:開發(fā)舊表導(dǎo)新表的工具
(2)分庫(kù)個(gè)數(shù)變換需求:開發(fā)2庫(kù)導(dǎo)3庫(kù)的工具
(3)底層存儲(chǔ)介質(zhì)變換需求:開發(fā)Mongo導(dǎo)Mysql工具
步驟三:恢復(fù)服務(wù),并將流量切到新庫(kù),不同的需求,可能會(huì)涉及不同服務(wù)升級(jí)。
(1)底層表結(jié)構(gòu)變更需求:服務(wù)要升級(jí)到訪問(wèn)新表
(2)分庫(kù)個(gè)數(shù)變換需求:服務(wù)不需要升級(jí),只需要改尋庫(kù)路由配置
(3)底層存儲(chǔ)介質(zhì)變換需求:服務(wù)升級(jí)到訪問(wèn)新的存儲(chǔ)介質(zhì)
總的來(lái)說(shuō),停機(jī)方案是相對(duì)直觀和簡(jiǎn)單的,但對(duì)服務(wù)的可用性有影響,許多游戲公司的服務(wù)器升級(jí),游戲分區(qū)與合區(qū),可能會(huì)采用類似的方案。
除了影響服務(wù)的可用性,這個(gè)方案還有一個(gè)缺點(diǎn),就是必須在指定時(shí)間完成升級(jí),這個(gè)對(duì)研發(fā)、測(cè)試、運(yùn)維同學(xué)來(lái)說(shuō),壓力會(huì)非常大,一旦出現(xiàn)問(wèn)題例如數(shù)據(jù)不一致,必須在規(guī)定時(shí)間內(nèi)解決,否則只能回滾。根據(jù)經(jīng)驗(yàn),人壓力越大越容易出錯(cuò),這個(gè)缺點(diǎn)一定程度上是致命的。
無(wú)論如何,停機(jī)方案并不是今天要討論的重點(diǎn),接下來(lái)看一下常見(jiàn)的平滑數(shù)據(jù)遷移方案。
三、平滑遷移-追日志法
平滑遷移方案一,追日志法,這個(gè)方案主要分為五個(gè)步驟。
數(shù)據(jù)遷移前,上游業(yè)務(wù)應(yīng)用通過(guò)舊的服務(wù)訪問(wèn)舊的數(shù)據(jù)。
步驟一:服務(wù)進(jìn)行升級(jí),記錄“對(duì)舊庫(kù)上的數(shù)據(jù)修改”的日志(這里的修改,為數(shù)據(jù)的insert, delete, update),這個(gè)日志不需要記錄詳細(xì)數(shù)據(jù),主要記錄:
(1)被修改的庫(kù)
(2)被修改的表
(3)被修改的唯一主鍵
具體新增了什么行,修改后的數(shù)據(jù)格式是什么,不需要詳細(xì)記錄。這樣的好處是,不管業(yè)務(wù)細(xì)節(jié)如何變化,日志的格式是固定的,這樣能保證方案的通用性。
這個(gè)服務(wù)升級(jí)風(fēng)險(xiǎn)較。
(1)寫接口是少數(shù)接口,改動(dòng)點(diǎn)較少
(2)升級(jí)只是增加了一些日志,對(duì)業(yè)務(wù)功能沒(méi)有任何影響
步驟二:研發(fā)一個(gè)數(shù)據(jù)遷移工具,進(jìn)行數(shù)據(jù)遷移。這個(gè)數(shù)據(jù)遷移工具和離線遷移工具一樣,把舊庫(kù)中的數(shù)據(jù)轉(zhuǎn)移到新庫(kù)中來(lái)。
這個(gè)小工具的風(fēng)險(xiǎn)較。
(1)整個(gè)過(guò)程依然是舊庫(kù)對(duì)線上提供服務(wù)
(2)小工具的復(fù)雜度較低
(3)任何時(shí)間發(fā)現(xiàn)問(wèn)題,都可以把新庫(kù)中的數(shù)據(jù)干掉重來(lái)
(4)可以限速慢慢遷移,技術(shù)同學(xué)沒(méi)有時(shí)間壓力
數(shù)據(jù)遷移完成之后,就能夠切到新庫(kù)提供服務(wù)了么?
答案是否定的,在數(shù)據(jù)遷移的過(guò)程中,舊庫(kù)依然對(duì)線上提供著服務(wù),庫(kù)中的數(shù)據(jù)隨時(shí)可能變化,這個(gè)變化并沒(méi)有反映到新庫(kù)中來(lái),于是舊庫(kù)和新庫(kù)的數(shù)據(jù)并不一致,所以不能直接切庫(kù),需要將數(shù)據(jù)追平。
哪些數(shù)據(jù)發(fā)生了變化呢?
步驟一中日志里記錄的不就是么?
步驟三:研發(fā)一個(gè)讀取日志并遷移數(shù)據(jù)的小工具,要把步驟二遷移數(shù)據(jù)過(guò)程中產(chǎn)生的差異數(shù)據(jù)追平。這個(gè)小工具需要做的是:
(1)讀取日志,得到哪個(gè)庫(kù)、哪個(gè)表、哪個(gè)主鍵發(fā)生了變化
(2)把舊庫(kù)中對(duì)應(yīng)主鍵的記錄讀取出來(lái)
(3)把新庫(kù)中對(duì)應(yīng)主鍵的記錄替換掉
無(wú)論如何,原則是數(shù)據(jù)以舊庫(kù)為準(zhǔn)。
這個(gè)小工具的風(fēng)險(xiǎn)也很。
(1)整個(gè)過(guò)程依然是舊庫(kù)對(duì)線上提供服務(wù)
(2)小工具的復(fù)雜度較低
(3)任何時(shí)間發(fā)現(xiàn)問(wèn)題,大不了從步驟二開始重來(lái)
(4)可以限速慢慢重放日志,技術(shù)同學(xué)沒(méi)有時(shí)間壓力
日志重放之后,就能夠切到新庫(kù)提供服務(wù)了么?
答案依然是否定的,在日志重放的過(guò)程中,舊庫(kù)中又可能有數(shù)據(jù)發(fā)生了變化,導(dǎo)致數(shù)據(jù)不一致,所以還是不能切庫(kù),需要進(jìn)一步讀取日志,追平記錄?梢钥吹剑胤湃罩咀菲綌(shù)據(jù)的程序是一個(gè)while(1)的程序,新庫(kù)與舊庫(kù)中的數(shù)據(jù)追平也會(huì)是一個(gè)“無(wú)限逼近”的過(guò)程。
什么時(shí)候數(shù)據(jù)會(huì)完全一致呢?
步驟四:在持續(xù)重放日志,追平數(shù)據(jù)的過(guò)程中,研發(fā)一個(gè)數(shù)據(jù)校驗(yàn)的小工具,將舊庫(kù)和新庫(kù)中的數(shù)據(jù)進(jìn)行比對(duì),直到數(shù)據(jù)完全一致。
這個(gè)小工具的風(fēng)險(xiǎn)依舊很小:
(1)整個(gè)過(guò)程依然是舊庫(kù)對(duì)線上提供服務(wù)
(2)小工具的復(fù)雜度較低
(3)任何時(shí)間發(fā)現(xiàn)問(wèn)題,大不了從步驟二開始重來(lái)
(4)可以限速慢慢比對(duì)數(shù)據(jù),技術(shù)同學(xué)沒(méi)有時(shí)間壓力
步驟五:在數(shù)據(jù)比對(duì)完全一致之后,將流量遷移到新庫(kù),新庫(kù)提供服務(wù),完成遷移。
如果步驟四數(shù)據(jù)一直是99.9%的一致,不能完全一致,也是正常的,可以做一個(gè)秒級(jí)的舊庫(kù)readonly,等日志重放程序完全追上數(shù)據(jù)后,再進(jìn)行切庫(kù)切流量。
至此,升級(jí)完畢,整個(gè)過(guò)程能夠持續(xù)對(duì)線上提供服務(wù),不影響服務(wù)的可用性。
四、平滑遷移-雙寫法
平滑遷移方案二,雙寫法,這個(gè)方案主要分為四個(gè)步驟。
數(shù)據(jù)遷移前,上游業(yè)務(wù)應(yīng)用通過(guò)舊的服務(wù)訪問(wèn)舊的數(shù)據(jù)。
步驟一:服務(wù)進(jìn)行升級(jí),對(duì)“對(duì)舊庫(kù)上的數(shù)據(jù)修改”(這里的修改,為數(shù)據(jù)的insert, delete, update),在新庫(kù)上進(jìn)行相同的修改操作,這就是所謂的“雙寫”,主要修改操作包括:
(1)舊庫(kù)與新庫(kù)的同時(shí)insert
(2)舊庫(kù)與新庫(kù)的同時(shí)delete
(3)舊庫(kù)與新庫(kù)的同時(shí)update
由于新庫(kù)中此時(shí)是沒(méi)有數(shù)據(jù)的,所以雙寫舊庫(kù)與新庫(kù)中的affect rows可能不一樣,不過(guò)這完全不影響業(yè)務(wù)功能,只要不切庫(kù),依然是舊庫(kù)提供業(yè)務(wù)服務(wù)。
這個(gè)服務(wù)升級(jí)風(fēng)險(xiǎn)較小:
(1)寫接口是少數(shù)接口,改動(dòng)點(diǎn)較少
(2)新庫(kù)的寫操作執(zhí)行成功與否,對(duì)業(yè)務(wù)功能沒(méi)有任何影響
步驟二:研發(fā)一個(gè)數(shù)據(jù)遷移工具,進(jìn)行數(shù)據(jù)遷移。這個(gè)數(shù)據(jù)遷移工具在本文中已經(jīng)出現(xiàn)第三次了,把舊庫(kù)中的數(shù)據(jù)轉(zhuǎn)移到新庫(kù)中來(lái)。
這個(gè)小工具的風(fēng)險(xiǎn)較小 。
天 下 數(shù) 據(jù)提供完整的端到端云遷移解決方案,將企業(yè)客戶的系統(tǒng)和數(shù)據(jù)平滑遷移至各大公有云:騰訊云、谷歌云、阿里云、華為云等。詳詢客服電話400-63-8-88-08,官網(wǎng):www.51huadong.com
產(chǎn)品與服務(wù)
香港服務(wù)器 香港高防服務(wù)器 美國(guó)服務(wù)器 韓國(guó)服務(wù)器 新加坡服務(wù)器 日本服務(wù)器 臺(tái)灣服務(wù)器云服務(wù)器
香港云主機(jī) 美國(guó)云主機(jī) 韓國(guó)云主機(jī) 新加坡云主機(jī) 臺(tái)灣云主機(jī) 日本云主機(jī) 德國(guó)云主機(jī) 全球云主機(jī)高防專線
海外高防IP 海外無(wú)限防御 SSL證書 高防CDN套餐 全球節(jié)點(diǎn)定制 全球?qū)>GPLC關(guān)于我們
關(guān)于天下數(shù)據(jù) 數(shù)據(jù)招商加盟 天下數(shù)據(jù)合作伙伴 天下數(shù)據(jù)團(tuán)隊(duì)建設(shè) 加入天下數(shù)據(jù) 媒體報(bào)道 榮譽(yù)資質(zhì) 付款方式關(guān)注我們
微信公眾賬號(hào)
新浪微博
天下數(shù)據(jù)手機(jī)站 關(guān)于天下數(shù)據(jù) 聯(lián)系我們 誠(chéng)聘英才 付款方式 幫助中心 網(wǎng)站備案 解決方案 域名注冊(cè) 網(wǎng)站地圖
天下數(shù)據(jù)18年專注海外香港服務(wù)器、美國(guó)服務(wù)器、海外云主機(jī)、海外vps主機(jī)租用托管以及服務(wù)器解決方案-做天下最好的IDC服務(wù)商
《中華人民共和國(guó)增值電信業(yè)務(wù)經(jīng)營(yíng)許可證》 ISP證:粵ICP備07026347號(hào)
朗信天下發(fā)展有限公司(控股)深圳市朗玥科技有限公司(運(yùn)營(yíng))聯(lián)合版權(quán)
深圳總部:中國(guó).深圳市南山區(qū)深圳國(guó)際創(chuàng)新谷6棟B座10層 香港總部:香港上環(huán)蘇杭街49-51號(hào)建安商業(yè)大廈7樓
7×24小時(shí)服務(wù)熱線:4006388808香港服務(wù)電話:+852 67031102
本網(wǎng)站的域名注冊(cè)業(yè)務(wù)代理北京新網(wǎng)數(shù)碼信息技術(shù)有限公司的產(chǎn)品