一致性hash问题

举报
西魏陶渊明 发表于 2022/09/25 01:53:32 2022/09/25
【摘要】 # 一、介绍 一致性哈希主要解决的问题,是互联网中的热点问题,及当cache环境改变,能动态感知,避免继续向已经坏掉的空间,插入新值. # 二、不一致会有什么问题? # 2.1 缓存的例子 有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上...

# 一、介绍

一致性哈希主要解决的问题,是互联网中的热点问题,及当cache环境改变,能动态感知,避免继续向已经坏掉的空间,插入新值.

# 二、不一致会有什么问题?

# 2.1 缓存的例子

有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法计算 object 的 hash

求余算法: hash(Object) % N

有多个cache: cache[0] cache[1] cache[2] cache[3], 然后要

  • put 4%4 insert 到cache[0]=A

  • put 1%4 insert 到cache[1]=B

  • put 2%4 insert 到cache[2]=C

  • put 3%4 insert 到cache[3]=D

假如cache[0] A节点突然挂了,此时获取cache[0]会有问题,put 5%3(本来4个节点-1一个节点) insert cache[2] ,之前是插入C,但是之后cache[2]=D,此时,一台错误会对全局产生影响.(因为cache的位置都发生了变化),这样就不能维护hash算法的单调性,可能之前已经插入了,但是后面就要覆盖.

cache[0]=A

  • cache[0]=B
  • cache[1]=C
  • cache[2]=D

# 2.3 数据迁移例子

假如有10条数据,3个节点,如果按照取模的方式。

总结: 数据在增加了一个节点后,3,4,5,6,7,8,9都需要做搬迁,成本太高了

那么采用一致性hash后怎么样呢?

# 2.3.1 一致性hash如何处理?

对 a b c 分别做哈希映射

当大于228都存203节点,于是就维护了一个圆形,即所有数据都能找到其节点了

当新加入节点d,可以算出d的hash

node d: 216

对数据进行迁移(其实只影响209~216之间的数,即达到了我们的目的)

# 三、总结

一致性hash的算法,就是不去确定唯一的下标,而是将节点先形成一个hash环,每次获取当前hash最近的节点。这样就算挂了一个节点,影响也是最小的

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/125858039

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。