码迷,mamicode.com
首页 > 编程语言 > 详细

分布式缓存一致性hash算法理解

时间:2017-12-23 15:59:29      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:log   方法   大于   技术架构   虚拟机   顺时针   架构   alt   题解   

今天阅读了一下大型网络技术架构这本苏中的分布式缓存一致性hash算法这一节,针对大型分布式系统来说,缓存在该系统中必不可少,分布式集群环境中,会出现添加缓存节点的需求,这样需要保障缓存服务器中对缓存的命中率,就有很大的要求了:

  采用普通方法,将key值进行取hash后对分布式缓存机器数目进行取余,以集群3台分布式缓存为例子:

    对于数据进行取hash值然后对3其进行取余,余数为0则进入node 0,余数位1则进入node1,余数位2则进入node2.

    如果增加一个节点则对4进行取余,则会将node0中的部分,node1中的部分,node2中的部分分割到node3中,则出现了命中率为75%

    如果增加2个节点的话则对5进行取余,则只有3/5的机器被命中

  普通方法的设计会导致当你的节点添加的数目越多,导致你的命中率越低导致对数据库的操作压力就越大

  

  采用一致性Hash算法:

    构造一个0~2^32的整数环,然后将节点的名称比如说node0对其进行取hash值将其分布在该店上,技术分享图片

然后将key值取hash值后进行比较:

举例:node0的hash值为432323232;node1 hash值为879798098,则如果key1的hash值为559798098,则其大于node0的hashi值,则顺时针旋转,找到了node1则将其存放在node1中的缓存中。

扩容后,将三个变成4个

技术分享图片

在node2和node0中插入一个node3,则导致node2到node1中中原先存放在node1中的数据分成两半,node2-node3部分存放在node3中,node3和node1的存放在node1中,则可以看出node0-node2以及node0-node1中这段没有改变。则也是75%但是还有问题就是node2和node0的负载数是node2的一倍,所以还是得出现解决办法

  引用虚拟的方式:将一个物理分布式缓存服务器分层n个虚拟机,分布在这个圆环周围,由于hash散列的不规则性,他会分布于不同的区域,见下图,如果再次插入新服务器之后,他会在器分布的虚拟机器上不规则的分布于各个点中,则会比较均匀的分布在各个环中,这样影响的可以将上面的问题解决了。

  技术分享图片

根据该书说明,在实践中,一台物理服务器虚拟成150个虚拟服务器节点合适。

分布式缓存一致性hash算法理解

标签:log   方法   大于   技术架构   虚拟机   顺时针   架构   alt   题解   

原文地址:http://www.cnblogs.com/lonecloud/p/8093328.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!