一致性hash

一: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 变化较小。  

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。