全部產品
Search
文件中心

ApsaraDB for Redis:Tair叢集無感擴縮容介紹

更新時間:Feb 28, 2024

本文列舉社區版Redis叢集、KVStore for Redis叢集版擴縮容方案的不足,並介紹Tair叢集版無感擴縮容方案。

社區版Redis叢集版通常會涉及到資料節點彈性擴縮容、分區間的資料移轉等需求,但業界常見的擴縮容方案仍存在一些問題,例如按Key遷移速度慢、不支援多Key命令、Lua指令碼無法遷移、大Key遷移出現卡頓甚至引發高可用切換、遷移失敗復原複雜等。

Tair推出的新一代以Slot複製為原理的無感遷移資料架構,最佳化執行個體內部線程調度演算法,高效、準確地控制叢集行為,支援真正的無感擴縮容。下文詳細介紹了社區版Redis叢集、KVStore for Redis叢集擴縮容方案的不足以及Tair叢集版無感擴縮容方案。

社區版Redis叢集常見擴縮容方案與不足

  • 社區版Redis叢集彈性擴縮容

    社區版Redis叢集通過Gossip協議傳遞資料,以槽(Slot)為資料的最小集合,並以遍曆(並遷移)Key的方式遷移單個Slot。但該方案存在如下問題:

    • 穩定性較差

      • 資料按Key遷移,可能會導致同一Slot內涉及多Key的命令在遷移過程中執行失敗。

      • 無法同時拷貝Lua指令碼,導致遷移後Lua指令碼丟失。

      • 資料拷貝方式可能會導致大Key遷移出現卡頓,甚至錯誤,觸發高可用(HA)故障切換。

    • 營運難度大

      • 若遷移期間出現失敗,需要依靠人工手動恢複資料庫,難度高、耗時間長度且易出錯。

      • 按Key遷移通常速度慢,擴縮容所需耗時間長度,往往迫使業務方在業務低峰期進行擴縮容,甚至影響到業務正常進行。

  • 基於資料同步遷移組件進行擴縮容

    該方案不依靠社區版Redis叢集特性進行遷移,而是引入一個中間組件作為資料移轉工具。例如先構建一個新的叢集執行個體,然後通過中間組件進行資料移轉,完成遷移後通過LoadBalancer組件切換訪問路徑,最終完成擴縮容操作。該方案存在如下問題:

    • 全量資料同步耗時過長。

    • 擴縮容期間需要同時擁有2套叢集資源,成本較高。

    • LoadBalancer組件在切換過程中會不可避免地引發用戶端串連斷開的問題,同時切換生效時間較長,可能會導致長達10秒以上的服務不可用。

KVStore for Redis叢集版平滑擴縮容方案與不足

KVStore for Redis叢集版提供了平滑擴縮容解決方案,較好地解決了上述社區版Redis叢集版擴縮容存在的部分問題,但該方案也存在如下問題:

  • 擴縮容變更配置期間的資料移轉過程有感知,可能存在秒層級的唯讀時間。

    說明

    擴縮容涉及到資料移轉,通常過程為:服務端處理增量同步處理資料至差值小於一個閾值時,進入唯讀狀態,等待剩餘增量資料移轉完成,然後重新導向用戶端請求到新的地址。若服務端在唯讀狀態期間收到更新要求,則會拒絕請求並返回唯讀錯誤,這類錯誤響應無法被商務邏輯平滑處理,從而影響到業務體驗。

  • 擴縮容變更配置的資料移轉任務與正常業務爭搶處理資源,迫使使用者需要在業務低峰期進行擴縮容操作,影響擴縮容的靈活性。

Tair叢集版無感擴縮容方案

雲原生記憶體資料庫Tair叢集版基於新一代管控架構,通過中心化控制組件,高效、準確地控制叢集行為,支援真正的無感擴縮容。

說明

本方案支援Tair雲端硬碟記憶體型持久記憶體型執行個體,同時Redis社區版雲端硬碟版也預設使用該方案。

Tair叢集版無感擴縮容方案

本方案具有如下特點:

  • 真正的無感擴縮容

    Tair叢集版在擴縮容過程中可實現用戶端無感知、不閃斷、無唯讀狀態,滿足隨時彈性資源伸縮需求。

    平滑處理擴縮容的關鍵在於縮小資料移轉時服務端的唯讀區間,Tair叢集版執行個體通過動態評估增量差值,將資料庫核心的唯讀區間(時間)控制到毫秒層級,遠小於百毫秒層級的TCP重傳時間,因此服務端理論上可規避唯讀錯誤。服務端唯讀區間(禁寫)時,涉及待遷移Key的寫請求將緩衝至服務端,等待資料移轉結束後,向用戶端返回重新導向資訊。同時,叢集管理系統與資料庫核心聯動,資料移轉完成後將第一時間更新叢集資訊。因此,可以實現在用戶端完全無感知的情況下完成擴縮容操作。

  • 擴縮容過程平滑

    Tair叢集版通過最佳化執行個體內部的線程調度演算法,對遷移任務進行細粒度控制,從而最大化提升線程執行效率,線程執行效率可從原先的10%提升到80%(可配置),實現在不影響商務服務的情況下最大化提升資料移轉速度。同時,Tair叢集版在遷移過程中可保障資料高可靠,支援按細粒度擴縮容,且無明顯RT(Reaction Time)上漲,杜絕由RT抖動錯誤觸發高可用切換的隱患。

  • 營運高效簡便

    Tair叢集版解決多項社區版Redis叢集擴縮容的問題。

    • 後台預拷⻉:Tair叢集版採用後台預拷⻉方式,資料拷⻉過程中不會影響線上業務,拷⻉完成前源端持有完整資料,規避大Key遷移卡頓等問題。

    • 一鍵復原:在擴縮容過程中若發生異常情況,支援一鍵復原。

    • 資料按槽(Slot)遷移:資料按Slot遷移,規避同一槽(Slot)內涉及多Key的命令在遷移過程中執行失敗的問題。

    • 支援同時拷貝Lua指令碼:在遷移過程中會同時拷⻉Lua指令碼,規避遷移後指令碼丟失問題。

    • 支援最大256分區水平擴縮容。

  • 低成本

    相比基於中間組件的方案,無需同時持有2套叢集資源,具有較低的成本。