白话解析:一致性哈希算法 consistent hashing

  • A+
所属分类:linux基础  基础知识

 

在了解一致性哈希算法之前,最好先了解一下缓存中的一个应用场景,了解了这个应用场景之后,再来理解一致性哈希算法,就容易多了,也更能体现出一致性哈希算法的优点,那么,我们先来描述一下这个经典的分布式缓存的应用场景。

场景描述

假设,我们有三台缓存服务器,用于缓存图片,我们为这三台缓存服务器编号为0号、1号、2号,现在,有3万张图片需要缓存,我们希望这些图片被均匀的缓存到这3台服务器上,以便它们能够分摊缓存的压力。也就是说,我们希望每台服务器能够缓存1万张左右的图片,那么,我们应该怎样做呢?如果我们没有任何规律的将3万张图片平均的缓存在3台服务器上,可以满足我们的要求吗?可以!但是如果这样做,当我们需要访问某个缓存项时,则需要遍历3台缓存服务器,从3万个缓存项中找到我们需要访问的缓存,遍历的过程效率太低,时间太长,当我们找到需要访问的缓存项时,时长可能是不能被接收的,也就失去了缓存的意义,缓存的目的就是提高速度,改善用户体验,减轻后端服务器压力,如果每次访问一个缓存项都需要遍历所有缓存服务器的所有缓存项,想想就觉得很累,那么,我们该怎么办呢?原始的做法是对缓存项的键进行哈希,将hash后的结果对缓存服务器的数量进行取模操作,通过取模后的结果,决定缓存项将会缓存在哪一台服务器上,这样说可能不太容易理解,我们举例说明,仍然以刚才描述的场景为例,假设我们使用图片名称作为访问图片的key,假设图片名称是不重复的,那么,我们可以使用如下公式,计算出图片应该存放在哪台服务器上。

hash(图片名称)% N

因为图片的名称是不重复的,所以,当我们对同一个图片名称做相同的哈希计算时,得出的结果应该是不变的,如果我们有3台服务器,使用哈希后的结果对3求余,那么余数一定是0、1或者2,没错,正好与我们之前的服务器编号相同,如果求余的结果为0, 我们就把当前图片名称对应的图片缓存在0号服务器上,如果余数为1,就把当前图片名对应的图片缓存在1号服务器上,如果余数为2,同理,那么,当我们访问任意一个图片的时候,只要再次对图片名称进行上述运算,即可得出对应的图片应该存放在哪一台缓存服务器上,我们只要在这一台服务器上查找图片即可,如果图片在对应的服务器上不存在,则证明对应的图片没有被缓存,也不用再去遍历其他缓存服务器了,通过这样的方法,即可将3万张图片随机的分布到3台缓存服务器上了,而且下次访问某张图片时,直接能够判断出该图片应该存在于哪台缓存服务器上,这样就能满足我们的需求了,我们暂时称上述算法为HASH算法或者取模算法,取模算法的过程可以用下图表示。

白话解析:一致性哈希算法 consistent hashing

但是,使用上述HASH算法进行缓存时,会出现一些缺陷,试想一下,如果3台缓存服务器已经不能满足我们的缓存需求,那么我们应该怎么做呢?没错,很简单,多增加两台缓存服务器不就行了,假设,我们增加了一台缓存服务器,那么缓存服务器的数量就由3台变成了4台,此时,如果仍然使用上述方法对同一张图片进行缓存,那么这张图片所在的服务器编号必定与原来3台服务器时所在的服务器编号不同,因为除数由3变为了4,被除数不变的情况下,余数肯定不同,这种情况带来的结果就是当服务器数量变动时,所有缓存的位置都要发生改变,换句话说,当服务器数量发生改变时,所有缓存在一定时间内是失效的,当应用无法从缓存中获取数据时,则会向后端服务器请求数据,同理,假设3台缓存中突然有一台缓存服务器出现了故障,无法进行缓存,那么我们则需要将故障机器移除,但是如果移除了一台缓存服务器,那么缓存服务器数量从3台变为2台,如果想要访问一张图片,这张图片的缓存位置必定会发生改变,以前缓存的图片也会失去缓存的作用与意义,由于大量缓存在同一时间失效,造成了缓存的雪崩,此时前端缓存已经无法起到承担部分压力的作用,后端服务器将会承受巨大的压力,整个系统很有可能被压垮,所以,我们应该想办法不让这种情况发生,但是由于上述HASH算法本身的缘故,使用取模法进行缓存时,这种情况是无法避免的,为了解决这些问题,一致性哈希算法诞生了。

 

我们来回顾一下使用上述算法会出现的问题。

问题1:当缓存服务器数量发生变化时,会引起缓存的雪崩,可能会引起整体系统压力过大而崩溃(大量缓存同一时间失效)。

问题2:当缓存服务器数量发生变化时,几乎所有缓存的位置都会发生改变,怎样才能尽量减少受影响的缓存呢?

 

其实,上面两个问题是一个问题,那么,一致性哈希算法能够解决上述问题吗?

我们现在就来了解一下一致性哈希算法。

   

一致性哈希算法的基本概念

其实,一致性哈希算法也是使用取模的方法,只是,刚才描述的取模法是对服务器的数量进行取模,而一致性哈希算法是对2^32取模,什么意思呢?我们慢慢聊。

 

首先,我们把二的三十二次方想象成一个圆,就像钟表一样,钟表的圆可以理解成由60个点组成的圆,而此处我们把这个圆想象成由2^32个点组成的圆,示意图如下:

白话解析:一致性哈希算法 consistent hashing

圆环的正上方的点代表0,0点右侧的第一个点代表1,以此类推,2、3、4、5、6……直到2^32-1,也就是说0点左侧的第一个点代表2^32-1 

我们把这个由2的32次方个点组成的圆环称为hash环。

 

那么,一致性哈希算法与上图中的圆环有什么关系呢?我们继续聊,仍然以之前描述的场景为例,假设我们有3台缓存服务器,服务器A、服务器B、服务器C,那么,在生产环境中,这三台服务器肯定有自己的IP地址,我们使用它们各自的IP地址进行哈希计算,使用哈希后的结果对2^32取模,可以使用如下公式示意。

hash(服务器A的IP地址) %  2^32

通过上述公式算出的结果一定是一个0到2^32-1之间的一个整数,我们就用算出的这个整数,代表服务器A,既然这个整数肯定处于0到2^32-1之间,那么,上图中的hash环上必定有一个点与这个整数对应,而我们刚才已经说明,使用这个整数代表服务器A,那么,服务器A就可以映射到这个环上,用下图示意

白话解析:一致性哈希算法 consistent hashing

同理,服务器B与服务器C也可以通过相同的方法映射到上图中的hash环中

hash(服务器B的IP地址) %  2^32

hash(服务器C的IP地址) %  2^32

通过上述方法,可以将服务器B与服务器C映射到上图中的hash环上,示意图如下

白话解析:一致性哈希算法 consistent hashing

假设3台服务器映射到hash环上以后如上图所示(当然,这是理想的情况,我们慢慢聊)。

 

好了,到目前为止,我们已经把缓存服务器与hash环联系在了一起,我们通过上述方法,把缓存服务器映射到了hash环上,那么使用同样的方法,我们也可以将需要缓存的对象映射到hash环上。

 

假设,我们需要使用缓存服务器缓存图片,而且我们仍然使用图片的名称作为找到图片的key,那么我们使用如下公式可以将图片映射到上图中的hash环上。

hash(图片名称) %  2^32

映射后的示意图如下,下图中的橘黄色圆形表示图片

白话解析:一致性哈希算法 consistent hashing

好了,现在服务器与图片都被映射到了hash环上,那么上图中的这个图片到底应该被缓存到哪一台服务器上呢?上图中的图片将会被缓存到服务器A上,为什么呢?因为从图片的位置开始,沿顺时针方向遇到的第一个服务器就是A服务器,所以,上图中的图片将会被缓存到服务器A上,如下图所示。

白话解析:一致性哈希算法 consistent hashing

没错,一致性哈希算法就是通过这种方法,判断一个对象应该被缓存到哪台服务器上的,将缓存服务器与被缓存对象都映射到hash环上以后,从被缓存对象的位置出发,沿顺时针方向遇到的第一个服务器,就是当前对象将要缓存于的服务器,由于被缓存对象与服务器hash后的值是固定的,所以,在服务器不变的情况下,一张图片必定会被缓存到固定的服务器上,那么,当下次想要访问这张图片时,只要再次使用相同的算法进行计算,即可算出这个图片被缓存在哪个服务器上,直接去对应的服务器查找对应的图片即可。

 

刚才的示例只使用了一张图片进行演示,假设有四张图片需要缓存,示意图如下

白话解析:一致性哈希算法 consistent hashing

1号、2号图片将会被缓存到服务器A上,3号图片将会被缓存到服务器B上,4号图片将会被缓存到服务器C上。

   

一致性哈希算法的优点

经过上述描述,我想兄弟你应该已经明白了一致性哈希算法的原理了,但是话说回来,一致性哈希算法能够解决之前出现的问题吗,我们说过,如果简单的对服务器数量进行取模,那么当服务器数量发生变化时,会产生缓存的雪崩,从而很有可能导致系统崩溃,那么使用一致性哈希算法,能够避免这个问题吗?我们来模拟一遍,即可得到答案。

 

假设,服务器B出现了故障,我们现在需要将服务器B移除,那么,我们将上图中的服务器B从hash环上移除即可,移除服务器B以后示意图如下。

白话解析:一致性哈希算法 consistent hashing

在服务器B未移除时,图片3应该被缓存到服务器B中,可是当服务器B移除以后,按照之前描述的一致性哈希算法的规则,图片3应该被缓存到服务器C中,因为从图片3的位置出发,沿顺时针方向遇到的第一个缓存服务器节点就是服务器C,也就是说,如果服务器B出现故障被移除时,图片3的缓存位置会发生改变

白话解析:一致性哈希算法 consistent hashing

 
 

但是,图片4仍然会被缓存到服务器C中,图片1与图片2仍然会被缓存到服务器A中,这与服务器B移除之前并没有任何区别,这就是一致性哈希算法的优点,如果使用之前的hash算法,服务器数量发生改变时,所有服务器的所有缓存在同一时间失效了,而使用一致性哈希算法时,服务器的数量如果发生改变,并不是所有缓存都会失效,而是只有部分缓存会失效,前端的缓存仍然能分担整个系统的压力,而不至于所有压力都在同一时间集中到后端服务器上。

 

这就是一致性哈希算法所体现出的优点。

   

hash环的偏斜

在介绍一致性哈希的概念时,我们理想化的将3台服务器均匀的映射到了hash环上,如下图所示

白话解析:一致性哈希算法 consistent hashing

但是,理想很丰满,现实很骨感,我们想象的与实际情况往往不一样。

白话解析:一致性哈希算法 consistent hashing

在实际的映射中,服务器可能会被映射成如下模样。

白话解析:一致性哈希算法 consistent hashing

聪明如你一定想到了,如果服务器被映射成上图中的模样,那么被缓存的对象很有可能大部分集中缓存在某一台服务器上,如下图所示。

白话解析:一致性哈希算法 consistent hashing

上图中,1号、2号、3号、4号、6号图片均被缓存在了服务器A上,只有5号图片被缓存在了服务器B上,服务器C上甚至没有缓存任何图片,如果出现上图中的情况,A、B、C三台服务器并没有被合理的平均的充分利用,缓存分布的极度不均匀,而且,如果此时服务器A出现故障,那么失效缓存的数量也将达到最大值,在极端情况下,仍然有可能引起系统的崩溃,上图中的情况则被称之为hash环的偏斜,那么,我们应该怎样防止hash环的偏斜呢?一致性hash算法中使用"虚拟节点"解决了这个问题,我们继续聊。

   

虚拟节点

话接上文,由于我们只有3台服务器,当我们把服务器映射到hash环上的时候,很有可能出现hash环偏斜的情况,当hash环偏斜以后,缓存往往会极度不均衡的分布在各服务器上,聪明如你一定已经想到了,如果想要均衡的将缓存分布到3台服务器上,最好能让这3台服务器尽量多的、均匀的出现在hash环上,但是,真实的服务器资源只有3台,我们怎样凭空的让它们多起来呢,没错,就是凭空的让服务器节点多起来,既然没有多余的真正的物理服务器节点,我们就只能将现有的物理节点通过虚拟的方法复制出来,这些由实际节点虚拟复制而来的节点被称为"虚拟节点"。加入虚拟节点以后的hash环如下。

白话解析:一致性哈希算法 consistent hashing

"虚拟节点"是"实际节点"(实际的物理服务器)在hash环上的复制品,一个实际节点可以对应多个虚拟节点。

从上图可以看出,A、B、C三台服务器分别虚拟出了一个虚拟节点,当然,如果你需要,也可以虚拟出更多的虚拟节点。引入虚拟节点的概念后,缓存的分布就均衡多了,上图中,1号、3号图片被缓存在服务器A中,5号、4号图片被缓存在服务器B中,6号、2号图片被缓存在服务器C中,如果你还不放心,可以虚拟出更多的虚拟节点,以便减小hash环偏斜所带来的影响,虚拟节点越多,hash环上的节点就越多,缓存被均匀分布的概率就越大。

   

好了,一致性哈希算法的原理就总结到这里,如有错误,欢迎赐教,如需转载,请联系作者。

原文链接:白话解析:一致性哈希算法 consistent hashing

 

weinxin
我的微信公众号
关注"实用运维笔记"微信公众号,当博客中有新文章时,可第一时间得知哦~
朱双印

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:78   其中:访客  42   博主  36

    • avatar ztq 1

      图片a是沿着hash环顺时针查找所在服务器A,如果新增一台服务器B后其hash值映射到图片a顺时针到服务器A范围之内呢?这个时候a的服务器就是B了。

      • avatar ztq 1

        你好,我有这样一个问题,图片a 查找所在服务器是沿着hash环顺时针查找。存储的时候图片a 沿着hash环顺时针查找到服务器A。当增加一台服务器F时,其hash值刚好映射到图片a和服务器A中间了呢,这样图片a查找到的就是服务器F了。

        • avatar 骑猪逛 1

          写的确实通俗易懂,除了在缓存方面的应用,能不能请博主扩展一下其他方面,比如算法实现,算法原理?,有没有其他的例子,读完有种意犹未尽的感觉
          为你点赞

          • avatar 许弋 0

            写的非常好,文中有几处hash环写成了hash换,虽然不影响阅读,可以转载?我会注明地址的

              • avatar 朱双印 Admin

                @许弋 谢谢客官指正,文章中的错误已经修改,转载授权已经发送到留言对应的邮箱,谢谢你的关注,常来呦~亲~

              • avatar jiangjinmvp 0

                博主讲的浅显易懂,如果加上一个demo 就完美了。博主辛苦!

                  • avatar 朱双印 Admin

                    @jiangjinmvp 感谢客官肯定,谢谢客官捧场,常来呦~~亲~

                  • avatar snape 0

                    看了你的场景描述,我终于明白了,谢谢博主。

                      • avatar 朱双印 Admin

                        @snape 能对客官有所帮助我很开心,谢谢你的肯定,常来捧场~~亲~

                      • avatar zhou 1

                        请教个问题:如果B服务器消失了,怎么将B中的数据重新放到C中,是怎么操作的?

                          • avatar 朱双印 Admin

                            @zhou B出故障了,就无法从B上获取对应缓存了,客户端只能去后端服务器上获取对应资源,这时对应资源会再被映射,根据一致性哈希算法缓存到顺时针最近的缓存服务器。

                              • avatar zhou 1

                                @朱双印 后端服务器是什么意思,例如mysql那类吗?那这时候是客户端查询的时候加载数据,做出映射缓存,还是说先全部加载作映射呢?

                            • avatar wuling 0

                              有图有真相,清晰明了;受教了

                                • avatar 朱双印 Admin

                                  @wuling 能帮助到你是最好的,谢谢客官支持,有空常来捧场呦~~

                                • avatar sean 0

                                  确实讲的很好!小白受教了!

                                    • avatar 朱双印 Admin

                                      @sean 客官的肯定是我前进的动力,感谢客官捧场,常来常往呦~~亲~~~

                                    • avatar senninha 0

                                      超级棒,真-白话

                                      • avatar 原野 0

                                        看过一致性hash算法文章里讲的最透彻的一次。

                                          • avatar 朱双印 Admin

                                            @原野 谢谢客官捧场,能够对你有所帮助就是文章的价值,常来捧场呦~~亲~~~

                                          • avatar 明明如月 0

                                            写的很好,希望以后多分享!!

                                            • avatar Rico 1

                                              写的真不错:内容好,文笔棒,赞!

                                                • avatar 朱双印 Admin

                                                  @Rico 瞎说什么大实话 :grin: 不过我喜欢~~客官常来捧场呦~~~

                                                    • avatar Rico 1

                                                      @朱双印 又回来看了一遍,哈哈,真不错,请问博主方便转载嘛?谢谢~

                                                        • avatar Rico 1

                                                          @Rico 博主,这是我转载后的链接:http://blog.csdn.net/justloveyou_/article/details/78313649

                                                    • avatar 孙小五 0

                                                      楼主写得好啊 这才是写的让人看得懂的方式!!

                                                        • avatar 朱双印 Admin

                                                          @孙小五 必须的,保持正确的打开方式,嘿嘿嘿~~~常来捧场呦~~~亲~~~

                                                        • avatar 加速奔跑的蜗牛 0

                                                          楼主写的很幽默,也很好懂哦!我在我的博文中推荐了你的文章,好东西嘛要大力推广

                                                            • avatar 朱双印 Admin

                                                              @加速奔跑的蜗牛 谢谢客官肯定,感谢客官推荐 :mrgreen: 有客官支持博客访问量会提高的 :grin: 常来捧场呦~~亲~~~~

                                                            • avatar 唐家三叔 0

                                                              学到了,谢谢博主

                                                                • avatar 朱双印 Admin

                                                                  @唐家三叔 能对你有所帮助就是最好的,谢谢客官捧场,常来呦~~~

                                                                • avatar 妞妞 2

                                                                  是这张图片吸引我进来的。。 :grin: :grin:
                                                                  评论

                                                                    • avatar 朱双印 Admin

                                                                      @妞妞 人类的天性,释放你自己吧~~骚年~~~ :mrgreen: ~~加油~~

                                                                    • avatar 炫迈来一粒 0

                                                                      写的很好,只是后面的是如何虚拟和虚拟规则,没看懂

                                                                        • avatar 朱双印 Admin

                                                                          @炫迈来一粒 谢谢客官捧场,具体实现部分可以在网上搜索”一致性哈希算法实现”进行参考,客官常来呦~~~

                                                                        • avatar 每天都在写 0

                                                                          说句实话,讲的真的很易懂,适合入门,赞一个!

                                                                          • avatar 没烟 1

                                                                            通俗易懂 赞

                                                                              • avatar 朱双印 Admin

                                                                                @没烟 评论精辟,没毛病,常来呦~~~

                                                                              • avatar 小D 0

                                                                                不错的文章!!!!非常感谢博主 用心写的文章!!

                                                                                  • avatar 朱双印 Admin

                                                                                    @小D 谢谢客官肯定,能对客官有所帮助就是最好的,常来常往呦~亲~~

                                                                                  • avatar coolboy 0

                                                                                    通俗易懂才是好文章, 赞

                                                                                      • avatar 朱双印 Admin

                                                                                        @coolboy 感谢客官的肯定,有空常来捧场呦~亲

                                                                                      • avatar 马龙 0

                                                                                        这才是真正的好文章啊,可惜能找到的人还太少了。通俗易懂,有理有据。要是能再写上实现一致性Hash的数据结构,加上实现的关键逻辑,就更加完美了。给博主32个赞。

                                                                                          • avatar 朱双印 Admin

                                                                                            @马龙 哈哈,谢谢兄弟称赞,你的肯定是我前进的动力,等到我写代码的武艺精进了,我就钻研一下具体实现,常来捧场哟~~~

                                                                                          • avatar cdmonkey 0

                                                                                            这篇文章写得太好了,受益匪浅!!!

                                                                                              • avatar 朱双印 Admin

                                                                                                @cdmonkey 客官的肯定是对我最大的支持,这位客官,常来捧场呦~~~

                                                                                              • avatar yong 2

                                                                                                文章写的真棒,很好理解;在网上搜了几篇文章,都是晦涩难懂(我只想说:啥啥啥,你说的都是啥)。

                                                                                                  • avatar 朱双印 Admin

                                                                                                    @yong 哈哈哈 :mrgreen: ,客官很幽默,能对你有所帮助就好,你的肯定是我的动力,常来捧场哦,亲~~~

                                                                                                  • avatar wisteria 0

                                                                                                    通俗易懂

                                                                                                    • avatar 水煮鱼 0

                                                                                                      写的很不错,看分库分表的时候了解到了一致性hash的概念,找了几个看看。你写这个很清晰易懂。感谢

                                                                                                        • avatar 朱双印 Admin

                                                                                                          @水煮鱼 能够帮助到你就是最好的,客官常来捧场哦~~~~~

                                                                                                        • avatar 华子 0

                                                                                                          非常感谢,看明白了,

                                                                                                            • avatar 朱双印 Admin

                                                                                                              @华子 能帮助到你就好,客官常来捧场呦~~~

                                                                                                            • avatar 宇辰 0

                                                                                                              这就是一个小白想找的文章,大赞,大赞啊!!!!!但是,图片名称是怎么通过hash(test.jpg)就转换成数字的?还有怎么增加的节点没搞明白!!

                                                                                                                • avatar 朱双印 Admin

                                                                                                                  @宇辰 谢谢客官夸奖,客官的疑惑,从别人实现的代码中即可得到答案,在网上搜索”一致性哈希算法的具体实现”即可得到相应代码,但是我并没有实现过这些代码,所以无法给出明确答案,再次感谢你的关注,常来捧场哦客官~~

                                                                                                                • avatar 兴浩 0

                                                                                                                  写的非常形象,我一般都不留言的-_-

                                                                                                                    • avatar 朱双印 Admin

                                                                                                                      @兴浩 你这样夸我我会不好意思的,哈哈~~常来捧场啊这位客官~~

                                                                                                                    • avatar 17岁少年为情所困丶 0

                                                                                                                      楼主写的清晰易懂,而且图给的太好了,一看就明白了,谢谢楼主。

                                                                                                                        • avatar 朱双印 Admin

                                                                                                                          @17岁少年为情所困丶 客气客气~~~这位客官,能对你有所帮助才是最好的,顺便说一句,你的名字很个性啊,其实我也才18~~

                                                                                                                        • avatar 城阙 0

                                                                                                                          好文章,总结的真是好!

                                                                                                                            • avatar 朱双印 Admin

                                                                                                                              @城阙 谢谢客官对这篇文章的肯定,常来呦~~~

                                                                                                                            • avatar july 1

                                                                                                                              讲的好好!一篇篇都在慢慢的看,对我们这些刚入门的很友好!
                                                                                                                              博主再写些基础的,补成个系统了,完全可以去出书啊!

                                                                                                                                • avatar 朱双印 Admin

                                                                                                                                  @july 谢谢这位客官捧场,出书还是差的很远的,把所有的按照系统整合起来也是非常困难的,因为总结一个知识点可能就牵扯一堆知识点,为了尽量明白,一般会按照逻辑顺序先把需要的知识点总结出来,所以更加耗费时间,不过如果这些文章能够对你有所帮助,才是这些文章存在的根本意义,谢谢你的肯定,常来捧场呦,亲~~~

                                                                                                                                • avatar zongheng_ycj 0

                                                                                                                                  想问一下 虚拟节点的生成的生成策略是什么 比方所3台服务器发生偏斜 复制3个虚拟节点 这三个节点又怎么能保证均衡分布呢

                                                                                                                                    • avatar 朱双印 Admin

                                                                                                                                      @zongheng_ycj 不能保证这些节点均衡,所以可以尽量多的复制虚机节点,尽量的均衡,降低偏斜的程度。

                                                                                                                                        • avatar 北溟有鹏 0

                                                                                                                                          @朱双印 写得好好呢,不过还是有几个问题不懂,想请教下。
                                                                                                                                          1.如果新加入几台服务器的跟虚拟节点重合了怎么办?
                                                                                                                                          2.为什么一致性hash算法要取2的32次方为底呢,有什么依据吗?

                                                                                                                                            • avatar 朱双印 Admin

                                                                                                                                              @北溟有鹏 1,从别人实现的代码来看,会先进行判断,但是我并没有实现过这些代码,不过你可以在网上搜索,一致性哈希算法的具体实现,参考对应代码。
                                                                                                                                              2,网上的解释是hash后的值是一个无符号整数,所以取值范围为2的32次方,具体实现中可以不以2的32次方为底,只要在概念上是一个环就行。
                                                                                                                                              3,上述理论我并没有验证过,只是思路,仅供参考,客官常来捧场呦~~~

                                                                                                                                                • avatar 风筝 3

                                                                                                                                                  @朱双印 取2的32次方是有依据的,IPV4最大的数量就是2的32次方,这样就能保证所有的ip地址来取余不会重复。一一对应哈希环上面的正数

                                                                                                                                                    • avatar 朱双印 Admin

                                                                                                                                                      @风筝 666,新知识点get,常来常往呦~~亲~~~

                                                                                                                                            • avatar 寒风 0

                                                                                                                                              研究的是越来越深入了,赞!

                                                                                                                                                • avatar 朱双印 Admin

                                                                                                                                                  @寒风 哈哈,谢谢兄弟捧场,多亏你们支持。

                                                                                                                                                • avatar Aceslup 0

                                                                                                                                                  真心很通俗易懂。赞一个

                                                                                                                                                    • avatar 朱双印 Admin

                                                                                                                                                      @Aceslup 哈哈,谢谢夸奖,写博动力变足了,希望朋友多来捧场

                                                                                                                                                    • avatar 李杨 0

                                                                                                                                                      你好,我想问一下,最后的那一块,图片被分配到被虚拟节点平均之后的位置,你在读取某一张图片的时候,你是根据什么算法去hash,然后去对应到虚拟节点获取图片数据呢?

                                                                                                                                                        • avatar 朱双印 Admin

                                                                                                                                                          @李杨 对应的具体算法我也不甚了解,希望兄弟了解以后可以赐教,相互学习。