背景

原生的open-falcon使用一致性哈希来进行存储的分片。其使用到的一致性哈希算法库是github.com/stathat/consistent
这个库使用了CRC32作为hash算法。CRC32用于一致性哈希时,结果是非常不均匀的。
而且open-falcon只使用500个虚拟节点,统计进到graph的点数速度,标准差结果甚至到了15k+。
更换hash算法成为当务之急。

我们将CRC32 + 500虚拟节点,变成了murmur3 + 10000虚拟节点, 看官可能觉得在跑着业务的系统上,难度很高,而实际上整个过程简单的一逼

方案

得益于open-falcon的自动扩容(即graph的merge逻辑), 更换hash算法不过是另外一种意义上的扩容罢了,整个过程如下:

  1. 更改transfer和query的一致性哈希算法。graph merge逻辑部分的hash算法和虚拟节点个数保持不变
  2. 开启graph的merge开关
  3. 上线graph
  4. 同时上线transfer和query
  5. 关闭graph merge开关,重新上线graph

经统计,进到graph的点数速度标准差结果变为原来的1/10

完成了。

-EOF-