Tair資料遷移三步走

2021-09-19 22:08:57 字數 1169 閱讀 5886

在多機房資料遷移中,整個過程分為三個階段:歷史資料遷移階段、redolog遷移階段、實時複製階段。

歷史資料的遷移使用乙個佇列完成,這個佇列由多個執行緒消費。遷移模組儲存乙個本dataserver的主桶有序序列,儲存引擎順序按桶掃瞄所有資料(對ldb引擎來講,是掃瞄memtable、immutable memtable和所有的sstable),並將掃瞄到的資料放到佇列裡。主線程會同步等待每個桶的資料同步完成,然後在從機房上打上標籤,每次同步前都會判斷這個標籤,避免重啟後歷史資料重遷。

由於在歷史資料同步時,client又會有新的寫入,新寫入的key可能已經被掃瞄過,所以如果不記錄這些操作,這部分資料可能會被丟失。

對歷史資料遷移來講,桶有三種狀態:已遷移、正在遷移、未遷移

redolog只記錄「正在遷移」的桶的新寫入請求。對於已遷移的桶的新寫入請求,把它放到實時遷移佇列,對於未遷移的桶的新寫入請求,不做特殊處理,因為等到遷移這些桶時,資料已經落到ldb上。

當乙個桶的ldb資料遷移完成時,立即開始遷移新產生的log。遷移log時,也可能會有新的寫入,當剩餘log很大時,新的寫入會追加到log;當剩餘log小於一定閾值後,會鎖定log,新的寫入會被阻塞,直到log遷移完畢後,再將被阻塞的請求放到實時複製佇列裡。

redolog的遷移使用多個佇列,根據請求key的hash值放到不同的佇列裡,每個佇列只有乙個消費執行緒,這樣來保證相同key的時序性。

實時複製也使用多個佇列,根據請求key的hash值放到不同的佇列裡,每個佇列只有乙個消費執行緒,來保證相同key的時序性。

如上所述,當乙個桶的歷史資料、redolog遷移完畢後,新的請求就會放到實時佇列裡。

個人介紹:

高廣超:多年一線網際網路研發與架構設計經驗,擅長設計與落地高可用、高效能網際網路架構。

圍棋程式三步走

用什麼語言及用win還是linux無所謂。第一步 介面。要求不高,能交替著子,能自動提子 規則 能判定勝負,能記譜 不難,很多人已完成,而且能完成得不錯 不過完美的程式要充分打磨 難度係數計為2 第二步 使程式下完一局棋 用一種或幾種演算法 當然不是完全的隨機演算法 使程式能完成一局棋。其過程中能基...

ExtJs閉包三步走

構造閉包的一般步驟 1 在函式a內部定義乙個函式b 2 通過呼叫a把b的引用返回出來,賦值給其他作用域中的乙個變數c 3 通過c執行b 通過一段 來展示閉包的模版 function a return b var c a c 例 使用閉包模擬私有屬性 var person function getna...

0720 做產品,三步走

好像,事情也沒那麼複雜 發現需求做出產品以滿足需求告知需要的人 發現需求,首先要豐富自己的生活,提高自己的品位。這樣,才能發現生活中不如意的地方,也就是要改進的點。多和不同的人接觸,洞察別人的需求,也是很重要的。有了需求,就得有能力把產品做出來。落實到具體,主要是產品設計和開發。有了好產品,還得讓別...