天天看點

ZNBase 分布式存儲的負載均衡流程

導讀

ZNBase 是浪潮開源的 NewSQL 分布式資料庫,擁有強一緻、高可用的分布式架構。在高負載的情況下,分布式資料庫能夠将負載壓力平衡到不同的實體機節點上,充分利用不同節點的資源。本文将介紹 ZNBase 在面對高負載存儲過程中采用的負載均衡政策。

負載均衡

作為分布式資料庫,為了更有效利用不同實體機節點的資源, 避免伺服器性能的浪費,在資料庫高負載的情況下需要盡量将壓力平衡到各個實體機節點上。這也是分布式資料庫的研究重點之一。

雲溪資料庫 ZNBase 在存儲上采用三副本政策,即每份資料預設同時存在三個節點中,每個副本為一個 Replica。資料庫在進行讀寫時,其中一份副本會獲得一定時間内的租約,成為 lease,該 lease 的節點即為該 range 的 leaseholder。系統的讀寫都是通過 leaseholder 進行的,leaseholder 會将對該副本的讀寫同步到其他的 Replica。

ZNBase 在啟動時會建立 StoreReblancer,用于自适應的對副本進行均衡。ZNBase 通過對 Replica 以及 lease 進行遷移以平衡資料庫的壓力負載。StoreReblancer 會以 10 秒的周期反複執行,如果存儲的壓力超過門檻值,則會循環對每個 range 分兩個部分進行平衡,包括租約平衡和副本平衡。

ZNBase 分布式存儲的負載均衡流程

圖 1-1 負載均衡基本流程圖

租約平衡

ZNBase 會維護目前節點存儲的副本,其中的 lease 會維護該副本的 QPS(每秒查詢率),并按照 QPS 降序進行排序。壓力不夠門檻值的 range,不進行平衡。StoreReblancer 會循環周遊一個 range 的多個副本,排除本地的,排除壓力不符合門檻值的,排除不正常的,排除 zone 限制的副本,選擇剩下的副本轉移租約。租期的選舉和遷移不涉及到 replica 的複制和傳輸。

對于需要遷移的 range 來說,StoreReblancer 對其租約遷移的副本選取規則如下:

  1. 非本地副本。
  2. 目前 store 擁有的租期是合法的。
  3. 判斷租期轉移後本地 range 的 QPS 可以轉到門檻值以内。
  4. 待遷移的 replica 的 raftStatus 領先于候選的 replica 的 raftStatus
  5. 滿足 zone(分區資訊)的限制條件 。一些表可能會帶有租期的限制條件,規定了該資料表的副本所在的結點,以及租期所在的結點。對于固定了租期的資料表,StoreReblancer 不會遷移其 range 的租期。

Lease 選取的基本流程如圖 1-2 所示:

ZNBase 分布式存儲的負載均衡流程

圖1-2 待選取 lease 流程

如果當它的 QPS 大于目前的門檻值範圍,資料庫會将其租約轉移到該存儲該副本的其他節點上。因為資料庫是直接對 leaseholder 進行讀寫,并由 leaseholder 同步到其他副本,故當節點負載過大時,隻要将較大讀寫負載的副本租約轉換到其他節點,就可以把該部分的壓力均衡出去。

副本平衡

如果儲存某副本的三台節點壓力負載都不符合 lease 的遷出條件時,資料庫會選擇将該副本同步到三副本以外的節點,然後将 lease 遷出,以動态平衡壓力。系統會對需要平衡的 range 進行篩選,對于壓力沒有達到門檻值的 range 或遷移後對該 store 的 QPS 影響較小時,則不會進行平衡操作。

系統首先設定目标 store 數量,通常等于 range 的副本數。循環一個 range 的多個副本,排除本地副本後,如果副本所在的 store 壓力符合門檻值,或者不存在,将該 store 放入目标數組。

如果目标數組的目标數量不足,則繼續從其他所有 store 中選擇,直到符合目标數量。選擇 Store 目标數組的過程需要符合 zone(分區)限制,容量限制,壓力門檻值限制,并排序。如果還是不足,則放棄平衡。同時,副本的遷移應該滿足多樣性的限制,多樣性指副本所在的多級分區的分散程度,副本所在的多級分區越分散,多樣性分值越高。在選擇目标 store 時,需要将新的多樣性分值同原來的多樣性分值進行比較,如果不如以前,則放棄平衡。

ZNBase 會循環目标數組,計算新的租約和壓力值,然後選擇目标數組進行副本遷移。遷移過程首先用 batch 指令,副本收到指令,并發送快照。

熱資料分裂

如果同時對某副本的資料進行大量的讀寫,壓力負載是由于該副本引起時,單純的遷移 lease 或者 replica 都無法較好的調節該情況。該部分功能由 splitQueue 進行管理。ZNBase 會選擇對熱點資料的 range 進行分裂,進而把壓力從單個 range 上分開,該步驟會導緻建立新的 replica,進而分散了壓力和流量。建立新的 replica 之後的均衡仍由 store-reblancer 進行。資料庫會在 range 分裂後再進行 reblance。當壓力降低後,系統會自動進行 range 的合并。

總結

以上就是 ZNBase 在處理高負載存儲時采用的負載均衡政策,通過租約平衡、副本平衡與熱資料分裂三種不同次元的均衡政策,避免了單個節點在高負載情況下出現性能瓶頸,提升了資料庫系統的讀寫性能。