Open-Falcon更换hash算法
背景
原生的open-falcon使用一致性哈希来进行存储的分片。其使用到的一致性哈希算法库是github.com/stathat/consistent
这个库使用了CRC32作为hash算法。CRC32用于一致性哈希时,结果是非常不均匀的。
而且open-falcon只使用500个虚拟节点,统计进到graph的点数速度,标准差结果甚至到了15k+。
更换hash算法成为当务之急。
我们将CRC32 + 500虚拟节点
,变成了murmur3 + 10000虚拟节点
, 看官可能觉得在跑着业务的系统上,难度很高,而实际上整个过程简单的一逼
方案
得益于open-falcon的自动扩容(即graph的merge逻辑), 更换hash算法不过是另外一种意义上的扩容罢了,整个过程如下:
- 更改transfer和query的一致性哈希算法。graph merge逻辑部分的hash算法和虚拟节点个数保持不变
- 开启graph的merge开关
- 上线graph
- 同时上线transfer和query
- 关闭graph merge开关,重新上线graph
经统计,进到graph的点数速度标准差结果变为原来的1/10
完成了。
-EOF-