通用架構師應該如何把控遷移技術方案

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

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

遷移的具體過程如下。

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)


這里,我們仍然按照舊的規(guī)則,也就是關鍵字哈希除以2取余來路由分片,同時按照新的規(guī)則,也就是關鍵字哈希除以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ù)進行驗證,表明我們的數(shù)據(jù)遷移成功。

3. 切讀

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

4. 下線雙寫

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

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

更多的關于“通用架構師應該如何把控遷移技術方案”的內容,請參加艷鵬在gitchat上的嘮嗑節(jié)目。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容