您的位置:首页 > 其它

consistent-hash —— 如何保证不同算法的consistent-hash结果一样

2015-11-27 11:47 309 查看
互联网后台分布式开发过程中经常用到 consistent-hash 算法,有的是在开源软件中(比如nginx、jedis等),有时候需要自己实现。而在灰度上线过程中,有时候需要新旧两个系统同时存在,在某些场景会出现需要保证不同的两个一致性hash算法算出来的结果一致的需求。不同指的是两个算法可能是用不同语言、或者不同的算法实现(treemap or 数组二分查找等实现方式)。笔者在广告后台的开发过程中遇到过此需求,自己实现了一个与nginx
consistent hash结果一样的哈希算法,经线上验证了正确性。把握住以下几点,就可以保证两个算法结果一样。

以下可以保证构造出来的hash环是一致的:

1. hash环的节点数目、虚拟节点的数目、实际节点的数目

2. 虚拟节点的key的拼装方式

3. 计算虚拟节点存储位置的hash算法

4. 真实节点的信息(数目及ip:port,保证输入一致)

以下保证查询过程一致:

 6.查询的hash算法一致,可以保证相同的key映射到相同的虚拟节点。

 7.提高性能的bucket不能改变程序执行结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: