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

生產環境部署:redis

  • 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)
相關文章
相關標籤/搜索