通用架構(gòu)師應(yīng)該如何把控遷移技術(shù)方案

假設(shè)我們的應(yīng)用現(xiàn)在使用了具有兩個分片的數(shù)據(jù)集群,通過關(guān)鍵字哈希的方式進(jìn)行路由,如下圖所示。

因為兩個分片已經(jīng)不能滿足容量的需求,所以現(xiàn)在需要擴(kuò)容到4個分片,達(dá)到原來兩倍的總大小,因此我們需要遷移。

遷移的具體過程如下。

1. 雙寫

按照新規(guī)則和舊規(guī)則同時往新新舊數(shù)據(jù)系統(tǒng)中寫數(shù)據(jù),如下圖所示。

![image.png](http://upload-images.jianshu.io/upload_images/4310879-8b3807d7619de48c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


這里,我們?nèi)匀话凑张f的規(guī)則,也就是關(guān)鍵字哈希除以2取余來路由分片,同時按照新的規(guī)則,也就是關(guān)鍵字哈希除以4取余來路由到新的4個分片上,來完成數(shù)據(jù)的雙寫。

2. 遷移歷史數(shù)據(jù)

把舊緩存集群中的歷史數(shù)據(jù)讀取出來,按照新的規(guī)則寫到新的數(shù)據(jù)集群中,如下圖所示。

![image.png](http://upload-images.jianshu.io/upload_images/4310879-c9c2cc77b2a45c54.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)


在這個過程中,我們需要遷移歷史數(shù)據(jù),在遷移的過程中可能需要遷移工具,這也需要一部分開發(fā)工作量。在遷移后,我們還需要對遷移的數(shù)據(jù)進(jìn)行驗證,表明我們的數(shù)據(jù)遷移成功。

3. 切讀

把應(yīng)用層所有的讀操作路由到新的數(shù)據(jù)集群上,如下圖所示。
image.png
在這一步驟里,把應(yīng)用中讀取的操作的數(shù)據(jù)源轉(zhuǎn)換成新的數(shù)據(jù)集群,這是應(yīng)用的讀寫操作已經(jīng)完全發(fā)生在新的數(shù)據(jù)庫集群上了。這一步一般不需要上線代碼,我們會在一開始上雙寫時就實現(xiàn)開關(guān)邏輯,這里只需要將讀的開關(guān)切換到新的集群即可。

4. 下線雙寫

在這一步,我們把寫入舊的集群的邏輯下線,,如下圖所示。 
這一步通常是在雙寫和切讀后驗證沒有任何問題,并保證數(shù)據(jù)一致性的情況下,才把這部分代碼下線。同時可以把舊的分片下線,如果是擴(kuò)容的場景,并且重用了舊的分片1和分片2,則還可以清理分片1和分片2中的冗余數(shù)據(jù)。

可以用“軟著陸”來形容雙寫遷移方案,這和新領(lǐng)導(dǎo)上任后,一般先招心腹,慢慢的替代老下屬的職責(zé),慢慢淘汰老下屬,慢慢實現(xiàn)軟著陸如出一轍。

更多的關(guān)于“通用架構(gòu)師應(yīng)該如何把控遷移技術(shù)方案”的內(nèi)容,請參加艷鵬在gitchat上的嘮嗑節(jié)目。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容