当前位置: 首页 > news >正文

一文讲明白一致性hash算法

一致性Hash算法常用来解决数据分片时的数据扩容/缩容的性能问题。
一、业内数据分片用的Hash算法,将节点的hash值对节点数取余。
存取通过key / value的方式对节点取余。

二、数据分片使用hash算法的优缺点:
优点:简单,方便。
缺点:数据难以的扩容和维护。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f4fd98fc5047471abb4a106f99278ace.png
1.当节点数从3变成4的时候前面的三个节点需要对里面的数据进行重新分配四个节点上。
2.当节点数从3变成2时,也需要对3个节点数的数据重新分配到两个节点上。
这样必然会带来大量数据进行迁移,在数据迁移的过程中,是无法进行读写的,必然会严重影响整个系统的性能。

三、用一致性hash算法解决扩容/缩容的问题
1.一致性hash算法的思路是将hash计算出来的 key 对 2的32次方取余,然后将其分配到计算后的节点上。
取得的余数再映射到各个节点上,如果没有找到节点,对去下一个节点上找。

在这里插入图片描述
2.当节点扩容时,假设在d~a之间增加一个e节点,那么只需要将a节点中的hash取余后的值在d-e之间的数据迁移到e节点即可,b、c、d节点的数据无需迁移。

在这里插入图片描述
3.当节点缩容时,假设a节点要去除,则将a节点的数据迁移到b节点即可,在e-b区间之间的请求到b节点上。
在这里插入图片描述
4.假设a节点宕机,则影响的只有(e,a] 之间的数据不可访问,其他区间的数据可以正常访问。

三、通过虚拟映射解决一致性hash算法分配不均的问题。
假设现在只有三个节点,a、b、c,a 是0节点,b是1节点,c是2节点。那么这时候a节点的数据远远大于b、c节点的数据。
在这里插入图片描述
通过建立虚拟节点将a1节点映射到a节点,b1、b2节点映射到b节点,将c1、c2映射到c节点,就可以解决数据分片不均的问题。
在这里插入图片描述

http://www.lryc.cn/news/30798.html

相关文章:

  • Java分布式解决方案(一)
  • 设备树系统学习(二)设备树的节点和属性
  • 【数据结构】二叉树的基本操作中的一些易错点
  • 在线图书借阅网站( Python +Vue 实现)
  • 不平衡数据集的建模的技巧和策略
  • 3. 算法效率
  • 仪表放大器放大倍数分析-运算放大器
  • laravel8多模块、多应用和多应用路由
  • 【Java学习笔记】6.Java 变量类型
  • Promise对象状态属性 工作流程 Promise对象的几个属性
  • webgpu思考obj携带属性
  • 设计模式(只谈理解,没有代码)
  • 06、Eclipse 中使用 SVN
  • Zookeeper3.5.7版本——客户端命令行操作(命令行语法)
  • 2023.03.05 学习周报
  • java Spring JdbcTemplate配合mysql实现数据批量修改
  • 《算法分析与设计》笔记总结
  • 序列化与反序列化概念
  • 【Java并发编程】CountDownLatch
  • 【iOS】Blocks
  • Java Volatile的三大特性
  • Android Compose——一个简单的Bilibili APP
  • 二叉树的最近公共祖先【Java实现】
  • 关闭应用程序遥测,禁止Windows收集用户信息
  • 【备战面试】每日10道面试题打卡-Day4
  • 热乎的面经——初出茅庐
  • 数据库中各种锁汇总
  • p76 - Python 开发-内外网收集 Socket子域名DNS
  • QCC51XX--eFush Key加密
  • nginx http模块