支持热点情况下的一致性hash? #649

@THCloud

Description

https://github.com/brpc/brpc/blob/master/docs/cn/consistent_hashing.md

这个文档里介绍了一致性hash,其中介绍的缓存问题几乎与线上的生产环境是完全一致的。散列hash的缺点和一致性hash的优点也基本介绍的很完全。

不过我会感觉,一致性hash有可能存在的问题,就是流量热点:大部分流量如果爆发到一个range,请求有可能会打到集中的几个server上,从而形成负载不均衡问题。所以是否有可能,实现一个基于权重的一致性hash?

我的一些想法:

  • client如何探测到热点?
    结合这个 https://github.com/brpc/brpc/blob/master/docs/cn/lalb.md lalb。基于lalb中的这个weight计算,统计到server端当前的负载情况
  • 假设1能够做到探测热点,接下来怎么做?
    想法是让热点区间尽可能摊到能多的server去承担压力。根据weight探测到热点的server,在实际hash的时候,分配到的range区间会缩短。相应的,其他的server会增大各自的区间。
  • 如何避免cache颠簸?
    这个没想好。能想到的方法就是减少range变动的周期,实现一个定时的range重计算。
  • 戈神看看对于这个问题有没有什么意见或者想法。目前希望能对这个有一些方案,着手搞一下。