论坛首页 综合技术论坛

总结一致性哈希(Consistent Hashing)

浏览 27159 次
精华帖 (0) :: 良好帖 (5) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-03-24  
楼上的小伙子不错  很谦虚啊 赞一个 javaeye啥时候整体氛围能这样啊。。。
0 请登录后投票
   发表时间:2010-03-24  
lishuaibt 写道
楼上的小伙子不错  很谦虚啊 赞一个 javaeye啥时候整体氛围能这样啊。。。

我相信会好的。哈哈
0 请登录后投票
   发表时间:2010-03-28   最后修改:2010-03-28
J-catTeam 写道
seraphim871211 写道
J-catTeam 写道
seraphim871211 写道
J-catTeam 写道
1.一致性hash仅仅是为了不去做数据迁移,但是随之机器的增加会越来越不可用。而且本身的消耗也会增大


这个的依据是什么?


你好
一致性hash,假设本来应该落在B点的数据,在A,B之间加一台机器,平均有一半的数据会无效。并且A到加的机器点上的数据在B上已经没有用,怎么去清理。随着机器的越来越多,不命中的概率也会越来越多。
虽然说最常用的hash取模不可避免的需要做数据迁移,但是可以选择时间点,比如半夜两点。这个时候访问肯定会很少。
不对的请指教



如果是C、A之间加入节点B,那原来落在CB之间的数据不再找A,而是找B了,这部分数据在A确实是失效。但你说的这个是纯理论。实际中加入B节点之后,CB间的数据(原来命中A上)会逐渐保存到B上(而不是不命中的时候什么都不做),同时A上的数据随着新到数据增加,原来那部分失效数据通过LRU算法将逐渐淘汰掉。所以我觉随着机器增加,不命中的概率不会大幅波动。

事实上,一致性hash就是用来解决存储节点增加导致的命中降低问题的。
实际例子:日本mixi也是逐渐增加到200台以上的memcached服务器集群,用的就是这种方法,并没有你说的问题。

谢谢 ·我只是单纯从理论上做了解释,并没有考虑到很多实际情况。


不觉得有矛盾吗?如果一个问题理论上就不能解决,但实际上是解决了,那肯定是我们对理论理解有偏差。

通常的状态是理论上可以解决,但是由于各种实际情况才会解决不了。
0 请登录后投票
   发表时间:2010-03-28   最后修改:2010-03-28
cx6445 写道
J-catTeam 写道
seraphim871211 写道
J-catTeam 写道
seraphim871211 写道
J-catTeam 写道
1.一致性hash仅仅是为了不去做数据迁移,但是随之机器的增加会越来越不可用。而且本身的消耗也会增大


这个的依据是什么?


你好
一致性hash,假设本来应该落在B点的数据,在A,B之间加一台机器,平均有一半的数据会无效。并且A到加的机器点上的数据在B上已经没有用,怎么去清理。随着机器的越来越多,不命中的概率也会越来越多。
虽然说最常用的hash取模不可避免的需要做数据迁移,但是可以选择时间点,比如半夜两点。这个时候访问肯定会很少。
不对的请指教



如果是C、A之间加入节点B,那原来落在CB之间的数据不再找A,而是找B了,这部分数据在A确实是失效。但你说的这个是纯理论。实际中加入B节点之后,CB间的数据(原来命中A上)会逐渐保存到B上(而不是不命中的时候什么都不做),同时A上的数据随着新到数据增加,原来那部分失效数据通过LRU算法将逐渐淘汰掉。所以我觉随着机器增加,不命中的概率不会大幅波动。

事实上,一致性hash就是用来解决存储节点增加导致的命中降低问题的。
实际例子:日本mixi也是逐渐增加到200台以上的memcached服务器集群,用的就是这种方法,并没有你说的问题。

谢谢 ·我只是单纯从理论上做了解释,并没有考虑到很多实际情况。


不觉得有矛盾吗?如果一个问题理论上就不能解决,但实际上是解决了,那肯定是我们对理论理解有偏差。

通常的状态是理论上可以解决,但是由于各种实际情况才会解决不了。

不觉得有多大矛盾哈,我说的理论上的缺陷,那位朋友说的对理论上缺陷的在实际中扩展和解决
0 请登录后投票
   发表时间:2010-04-01  
seraphim871211 写道
J-catTeam 写道
seraphim871211 写道
J-catTeam 写道
1.一致性hash仅仅是为了不去做数据迁移,但是随之机器的增加会越来越不可用。而且本身的消耗也会增大


这个的依据是什么?


你好
一致性hash,假设本来应该落在B点的数据,在A,B之间加一台机器,平均有一半的数据会无效。并且A到加的机器点上的数据在B上已经没有用,怎么去清理。随着机器的越来越多,不命中的概率也会越来越多。
虽然说最常用的hash取模不可避免的需要做数据迁移,但是可以选择时间点,比如半夜两点。这个时候访问肯定会很少。
不对的请指教



如果是C、A之间加入节点B,那原来落在CB之间的数据不再找A,而是找B了,这部分数据在A确实是失效。但你说的这个是纯理论。实际中加入B节点之后,CB间的数据(原来命中A上)会逐渐保存到B上(而不是不命中的时候什么都不做),同时A上的数据随着新到数据增加,原来那部分失效数据通过LRU算法将逐渐淘汰掉。所以我觉随着机器增加,不命中的概率不会大幅波动。

事实上,一致性hash就是用来解决存储节点增加导致的命中降低问题的。
实际例子:日本mixi也是逐渐增加到200台以上的memcached服务器集群,用的就是这种方法,并没有你说的问题。


我觉得上述情况不一定会出现。如果节点A的数据因为过期失效后,被淘汰。新数据也会继续插入到A上,数据的key是hash得到的。不会因为是新数据就会插入到后续的节点上。从统计上来说,数据的分布还是平均的。为了进一步避免数据分布不均匀可以使用虚拟节点,不一定要一台物理机器对应一个key。
0 请登录后投票
   发表时间:2010-04-20  
虚拟节点跟hash算法可以把哈希失效减到最小,相对与普通hash方法数据迁移时的问题,还是可以接收的....
当然 也是相对来说,如果系统缓存数据量比较稳定,简单的hash取模方法也是十分合适的.
0 请登录后投票
   发表时间:2010-04-20  
我一直都有一个疑问:就是一旦某台cache server崩溃了(数据量大,或者访问量大)。 数据迁移到下一个节点,导致下一个节点挂掉,如此下去,最后所有崩溃。

这个就不如固定的点的好。
0 请登录后投票
   发表时间:2010-04-25   最后修改:2010-04-25
xiaoyu 写道
我一直都有一个疑问:就是一旦某台cache server崩溃了(数据量大,或者访问量大)。 数据迁移到下一个节点,导致下一个节点挂掉,如此下去,最后所有崩溃。

这个就不如固定的点的好。

这个也是理论上的。
cache客户端使用非同步方式上传数据
cache客户端使用超时失败策略检索数据
cache中的object是软引用或是虚引用。
所以在访问大时会出现大量GC,
使客户端命中失败,节点不会挂掉。
作过700次秒的多线程访问
2 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics