Java學習筆記系列-Codis

什麼是Codis

  • 一個分佈式 Redis 解決方案,多個 Redis 節點構成的集羣
  • 上層應用可以像使用單機的 Redis 一樣使用,Codis 底層會處理請求的轉發,不停機的數據遷移等工作
  • Redis 實例的CPU計算能力彙集到一起,從而完成關於大數據和高併發量的的讀寫操作

組成部分

clipboard.png

  1. Codis Proxy (codis-proxy),處理客戶端請求,支持Redis協議,因此客戶端訪問Codis Proxy跟訪問原生Redis沒有什麼區別;
  2. Codis Dashboard (codis-config),Codis 的管理工具,支持添加/刪除 Redis 節點、添加/刪除 Proxy 節點,發起數據遷移等操作。codis-config 本身還自帶了一個 http server,會啓動一個 dashboard,用戶可以直接在瀏覽器上觀察 Codis 集羣的運行狀態;
  3. Codis Redis (codis-server),Codis 項目維護的一個 Redis 分支,基於 2.8.21 開發,加入了 slot 的支持和原子的數據遷移指令;
  4. ZooKeeper/Etcd,Codis 依賴 ZooKeeper 來存放數據路由表和 codis-proxy 節點的元信息,codis-config 發起的命令都會通過 ZooKeeper 同步到各個存活的 codis-proxy;
  5. codis-ha,通過codis開放的api實現自動切換主從的工具。該工具會在檢測到master掛掉的時候將其下線並選擇其中一個slave提升爲master繼續提供服務

有贊Codis架構

clipboard.png

生產環境部署:

  • 1024個slot,落到64個group,每臺服務器包含8個group
  • 一個codis集羣 = 8臺物理機 = 8臺物理機 (每臺:8個group)= 64個group (每個group:16個slot) = 1024個slot

分片

  1. Codis會把所有的key分成1024個槽,這1024個槽對應着的就是Redis的集羣,這個在Codis中是會在內存中維護着這1024個槽與Redis實例的映射關係。這個槽是可以配置,可以設置成 2048 或者是4096個
  2. key的分配算法,先是把key進行CRC32 後,得到一個32位的數字,然後再hash%1024後得到一個餘數,這個值就是這個key對應着的槽,這槽後面對應着的就是redis的實例
//Codis中Key的算法
    hash = crc32(command.key)
    slot_index = hash % 1024
    redis = slots[slot_index].redis
    redis.do(command)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章