baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • mysql

  • redis

    • 单机下的redis

    • 集群下的redis

      • 集群下的redis
      • 集群下的redis2
      • redisson详解
      • raft协议浅析
      • 一致性hash与hash槽
        • 什么是一致性hash算法
        • 数据倾斜问题
  • MongoDB

  • 后端存储实战

  • 数据库
  • redis
  • 集群下的redis
xugaoyi
2023-06-13
目录

一致性hash与hash槽

# 什么是一致性hash算法

一致性哈希算法(Consistent Hashing)是一种用于分布式系统中数据分片和负载均衡的算法。它的原理是将数据和节点映射到一个固定大小的哈希环上,通过对哈希环进行散列,实现数据和节点的均匀分布。

以下是一致性哈希算法的原理步骤:

  1. 创建一个固定大小的哈希环(通常使用一个 2^32 或 2^64 大小的环)。
  2. 将节点(例如服务器)通过哈希函数映射到哈希环上的某个位置。
  3. 将数据通过哈希函数映射到哈希环上的某个位置,得到一个哈希值。
  4. 从数据的哈希值开始,顺时针找到离它最近的节点位置,并将数据存储在该节点上。

一致性哈希算法的优点是在节点的增加或删除时,能够最小化数据迁移的量。当添加或删除一个节点时,只会影响到环上该节点到下一个节点之间的数据迁移,而不会对整个环产生剧烈的数据迁移。

此外,一致性哈希算法对于负载均衡也具有良好的性能。当需要查找一个数据所在的节点时,只需经过少量的计算即可找到对应的节点,而无需遍历整个节点列表。

一致性哈希算法常被应用于缓存系统、分布式存储系统和分布式数据库等场景,以提高系统的可扩展性、负载均衡性和容错性。

# 数据倾斜问题

设置虚拟节点

redis的分片方案有哪些呢?

一共有三种方案

  • 第一种是在客户端实现相关的逻辑,例如用取模或者一致性哈希对key进行分片,查询和修改都先判断key的路由。

  • 第二种是把分片处理的逻辑抽取出来,运行一个独立的代理服务,客户端连接到这个代理服务,代理服务做请求转发。

  • 第三种是基于服务端实现的,就是上面介绍的Redis Cluster。

参考:

参考1 (opens new window)

快速了解hash槽 (opens new window)

快速了解哈希槽2 (opens new window)

mic面试回答hash槽 (opens new window)

为什么redis cluster不使用一致性哈希而使用哈希槽 (opens new window)

编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19
raft协议浅析
mongo基本概念

← raft协议浅析 mongo基本概念→

最近更新
01
spark基础
02-22
02
mysql读写分离和分库分表
02-22
03
数据库迁移
02-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式