最近有在阿里实习的同学在工作中用到了一致性哈希,我决定学习一下。
一致性哈希的步骤,可以简单理解为以下几步:
1.是把[0,2^32-1]虚拟成一个闭环,如下图(图引sparkliang的专栏
):
![circle space](https://i-blog.csdnimg.cn/blog_migrate/1b18d45f6b7a9b251868f006bc3e9055.jpeg)
2.将节点(一般是IP)通过hash函数哈希后,映射到圆环上的某一点位置。(图引sparkliang的专栏)
3.把Cache映射到圆环上成为Cache节点,再把之前的IP节点映射到Cache上。(图引sparkliang的专栏)
![cache](https://i-blog.csdnimg.cn/blog_migrate/1099f5ea8306869d7a70cfc629afa3ec.jpeg)
4.虚拟Cahce:当Cache数量较少时,会导致Cache之间的负载不均衡。所以使用虚拟Cache技术,将一个Cache节点进行多个hash映射,
例如
hash(cache1#1);
hash(cache1#2);
hash(cache1#3);
然后形成同一个节点的多个虚拟节点,通过增加一次Cache查找过程,使负载更加均衡。
并且:
a) 在某个Cache挂掉后,可以让其负载相对均匀的分摊给其他Cache。
b) 在添加某个新Cahce之后,对整体的影响不大。