Redis Cluster數據分佈原理

Redis Cluster是Redis的分佈式解決方案,在3.0版本正式推出,有效地解決了Redis分佈式方面的需求。當遇到單機內存、併發、流量等瓶頸時,能夠採用Cluster架構方案到達負載均衡的目的。以前,Redis分佈式方案通常有兩種:數據庫

  1. 客戶端分區方案,有點事分區邏輯可控,肯定是須要本身處理數據路由、高可用、故障轉移等問題
  2. 代理方案,有點事簡化客戶端分佈式邏輯和升級維護便利,肯定是家中架構部署複雜度和性能損耗

接下來咱們介紹下Redis Cluster的數據分佈。架構

  • 數據分佈

分佈式數據庫首先要解決把整個數據集按照分區規則映射到多個節點的問題,即把數據集劃分到多個節點上,每一個節點負責總體數據的一個子集。併發

虛擬槽分區:巧妙的使用了哈希空間,使用分散度良好的哈希函數把全部數據映射到一個固定範圍的整數集合中,整數定義爲槽。這個範圍通常遠遠大於節點數,好比Redis Cluster槽範圍是0~16363.槽是集羣內數據管理和遷移的基本單位。採用大範圍槽的主要目的是爲了方便數據拆分和集羣擴展。每一個節點會負責必定數量的槽。以下圖所示:負載均衡

Redis Cluster採用虛擬槽分區:全部的鍵根據哈希函數映射到0~16383整數槽內,計算公式slot=CRC16 & 16383.每個節點負責維護一部分槽以及槽所映射的鍵值數據,以下圖:分佈式

Redis虛擬槽分區的特色:函數

  1. 解耦數據和節點之間的關係,簡化了幾點擴容和收縮的難度
  2. 節點自身維護槽的映射關係,不須要客戶端或者代理服務維護槽分區元數據。
  3. 支持節點、槽、鍵之間的映射查詢,用於數據路由、在線伸縮等場景
相關文章
相關標籤/搜索