试了一下一致性哈希(consistent hashing)

普通的一致性哈希(consistent hashing)是这样,在哈希环上为client顺时针选取最近一个server:

 

普通一致性哈希

 

 

 

在某个paper上看到一种变形,具体哪个paper忘了,它是这么做的,就是选取前后两个server,每个client对应两个server,而不是一个:

 

一直哈希变形1

 

 

 

为了写代码方便,最后实现的是这种:

 

最后实现的

 

 

为一个client配两个server,是为了提高可用性,万一连一个连不上,可以连第二个。

 

 

一开始还担心分布不均衡,不过试了一下,最后效果还比较满意,挺均衡的。

 

 

用了之后明显感受到以下好处:

 

  • 多个独立进程可以得到相同的哈希结果。
  • server的CPU负载更轻,因为缓存命中率高了。
  • server对后端存储压力减小,减少很多重复读取。
  • 定位问题更容易,因为可以确定client上的东西 会分布到哪两个server上。

 

 

有一点注意的是,最好不要使用随机生成的ID作为key哈希,而使用相对比较固定的,比如IP,或者IP+端口这些。可以让集群的数据和负载分布保持稳定。不然,随机生成的ID一变,可能就会有比较大的波动,造成负载高或是对后端存储压力高。

 

 

 

-------------------------------------------------------------------------------------------------

更多博文请订阅RSS,更多微博请关注@千里孤行Nerd

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值