哈希——一致性哈希算法

考察点:哈希算法
参考回答: 先构造一个长度为 2^32 的整数环(这个环被称为一致性 Hash 环),根据节点名称的 Hash 值(其分布为[0, 2^32-1])将服务器节点放置在这个 Hash 环上,然后根据数据的 Key 值计算得 到其 Hash 值(其分布也为[0, 2^32-1]),接着在 Hash 环上顺时针查找距离这个 Key 值的 Hash 值最近的服务器节点,完成 Key 到服务器的映射查找。 这种算法解决了普通余数 Hash 算法伸缩性差的问题,可以保证在上线、下线服务器的情况 下尽量有多的请求命中原来路由到的服务器。
解读:一个哈希环中长度为2^32,若干个服务器尽可能平均的放入到这个环中(实际情况是不能平均),但有4个指标可以衡量放置的好坏:平衡性,单调性,分散性,负载。固定好服务器的位置后,将实际的对象通过哈希算法,计算出所对应的key值(理解是key值应该为2的32次方-1中的某一个值),然后将这个key值散列到哈希环上,通过顺时针查找的方式,找到最近的服务器。在这样的部署环境中,hash环是不会变更的,因此,通过算出对象的hash值就能快速的定位到对应的机器中,这样就能找到对象真正的存储位置了。虚拟节点”的hash计算可以采用对应节点的IP地址加数字后缀的方式。
例如假设NODE1的IP地址为192.168.1.100。引入“虚拟节点”前,计算 cache A 的 hash 值:
Hash(“192.168.1.100”);
引入“虚拟节点”后,计算“虚拟节”点NODE1-1和NODE1-2的hash值:
Hash(“192.168.1.100#1”); // NODE1-1
Hash(“192.168.1.100#2”); // NODE1-2

参考:https://blog.youkuaiyun.com/cb_lcl/article/details/81448570

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值