一致性哈希

一致性哈希算法是一种分布式哈希的实现算法,主要就是为了解决在服务器集群中添加或者移除服务器时导致对象映射雪崩的局面;

主要思想是:将原来的映射算法:hash(a) % N 改变为:hash(a) % 2^32-1; 将原来的服务器映射到一张环上,对象映射时,通过映射算法在环上找到一个值,然后以顺时针方向寻找最近的一个服务器节点,将对象值存储到此服务器节点上。

解决服务器删除与添加的问题:

假设服务器节点A删除时,服务器节点B是服务器节点A逆时针的第一个节点;影响的也只是服务器B和服务器A之间的对象映射,其他的对象映射不会受到影响。后续对象的映射调整到服务器C(服务器B顺时针遇到的第一个节点)。

假设在服务器A与服务器B之间加入新的服务器节点X,影响的也就只是服务器A与服务器B之间的对象映射;服务器A和服务器X之间的对象会调整到服务器X上。

 

但是,一致性哈希也会出现极端现象;就是当服务器节点较少时,节点之间距离很小,就会造成部分节点之间距离特别大的情况;当其中的一个节点出现问题时,就会导致大量对象映射失效。其实这也就是哈希环上分布不均匀的问题。这时就引入了虚拟节点的概念,可以把实际的物理服务器节点复制整数倍,分配在哈希环上;当然了,复制的倍数越多,哈希环上分布也就越均匀。

 

最后,补一下哈希冲突的概念和解决方法

哈希冲突:是指哈希函数计算出来的地址已经被别的元素占用了

解决方法:

(1)开放定址法:地址p出现冲突时,给p加上一个增量d1,当p+d1仍然出现冲突时;就给p加上一个增量d2....直接地址不出现冲突为止;

(2)再哈希:就是同时构造多个不同的哈希函数,一个哈希出现冲突;再利用另外一个哈希函数...直到不出现哈希冲突为止;

(3)链地址法:就是将所有相同地址i的元素构造成一个单链表,将单链表的头部指针存在地址i中;

(4)建立公共溢出区:就是简单粗暴的将哈希表分为基本表和溢出表;凡是出现和基本表发生冲突的元素,全部放到溢出表中;

每天都进步一点点,相信春招还有机会!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值