一:hash(哈希)
先用下图理解下,hash是什么

hash
a. 对象: 计算机语言中的任何东西(如:字符串,基础数据类型等)
b. hash算法: 是一种计算机的算法。可以把对象转换成具有统一特征的结果.(hash 算法可以有很多种实现方式)
c. 结果:一个整数.(假设: 结果的范围是0 到 2^32)
d. 总结:
1.任何一个对象 经过hash算法后 就会产生一个 整数(范围: 0-2^32)
2.同一个对象 经过N次hash计算(同一种算法)后,产生的结果是同一个 结果
3.不同对象 有可能 产生的结果是相同的。
4.根据结果 无法 推导出 原始对象。
二:一致性hash
假设:我们要把0-2^32这个区间范围划分给2个人。
张三: [0-2^16)
李四: [2^16-2^32)
在总体上看,这两人的范围还是比较均匀。
但在局部看,就不均匀。如:0-2^16 全是张三的。
那么如何局部也比较均匀呢?
把0-2^32这个范围分成更 多个微小的范围(如:10).
那么再把每个微小范围(如:[10-20])平均分给张三([10-15]),李四([16-20]).
这样就可以在整体,局部 都更加均匀的来分布张三和李四的范围了。
这也就是一致性hash 的核心思想.
三: 一致性hash 应用场景
1. 把客户端请求依据IP地址分配到2台服务器上。那就可以把ip地址用hash 计算,在根据一致性hash 思想来分配。
四: 一致性hash 优点
1. 一致性hash 和 hash 取余数 相比.
hash 取余数(hashmap):如果hashmap 的数组长度要发生变化,hashmap 中所有值的位置都要发生变化.
一致性hash 变化较小。