時間:2023-07-09|瀏覽:249
ZNBase是浪潮開源的NewSQL分布式數據庫,擁有強一致、高可用的分布式架構。在高負載的情況下,分布式數據庫能夠將負載壓力平衡到不同的物理機節點上,充分利用不同節點的資源。本文將介紹ZNBase在面對高負載存儲過程中采用的負載均衡策略。
負載均衡
為了更有效利用不同物理機節點的資源,避免服務器性能的浪費,在數據庫高負載的情況下需要盡量將壓力平衡到各個物理機節點上。這也是分布式數據庫的研究重點之一。
云溪數據庫ZNBase在存儲上采用三副本策略,即每份數據默認同時存在三個節點中,每個副本為一個Replica。數據庫在進行讀寫時,其中一份副本會獲得一定時間內的租約,成為lease,該lease的節點即為該range的leaseholder。系統的讀寫都是通過leaseholder進行的,leaseholder會將對該副本的讀寫同步到其他的Replica。
ZNBase在啟動時會創建StoreReblancer,用于自適應的對副本進行均衡。ZNBase通過對Replica以及lease進行遷移以平衡數據庫的壓力負載。StoreReblancer會以10秒的周期反復執行,如果存儲的壓力超過閾值,則會循環對每個range分兩個部分進行平衡,包括租約平衡和副本平衡。
圖1-1負載均衡基本流程圖
租約平衡
ZNBase會維護當前節點存儲的副本,其中的lease會維護該副本的QPS(每秒查詢率),并按照QPS降序進行排序。壓力不夠閾值的range,不進行平衡。StoreReblancer會循環遍歷一個range的多個副本,排除本地的,排除壓力不符合閾值的,排除不正常的,排除zone限制的副本,選擇剩下的副本轉移租約。租期的選舉和遷移不涉及到replica的復制和傳輸。
對于需要遷移的range來說,StoreReblancer對其租約遷移的副本選取規則如下:
非本地副本。
當前store擁有的租期是合法的。
判斷租期轉移后本地range的QPS可以轉到閾值以內。
待遷移的replica的raftStatus領先于候選的replica的raftStatus
滿足zone(分區信息)的約束條件。一些表可能會帶有租期的限制條件,規定了該數據表的副本所在的結點,以及租期所在的結點。對于固定了租期的數據表,StoreReblancer不會遷移其range的租期。
Lease選取的基本流程如圖1-2所示:
圖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在處理高負載存儲時采用的負載均衡策略,通過租約平衡、副本平衡與熱數據分裂三種不同維度的均衡策略,避免了單個節點在高負載情況下出現性能瓶頸,提升了數據庫系統的讀寫性能。
熱點:數據