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不能改变程序执行结果。
consistent hash结果一样的哈希算法,经线上验证了正确性。把握住以下几点,就可以保证两个算法结果一样。
以下可以保证构造出来的hash环是一致的:
1. hash环的节点数目、虚拟节点的数目、实际节点的数目
2. 虚拟节点的key的拼装方式
3. 计算虚拟节点存储位置的hash算法
4. 真实节点的信息(数目及ip:port,保证输入一致)
以下保证查询过程一致:
6.查询的hash算法一致,可以保证相同的key映射到相同的虚拟节点。
7.提高性能的bucket不能改变程序执行结果。
相关文章推荐
- 基于代码生成器的J2EE智能开发框架 JEECG
- php 屏蔽notice
- github 预览html
- haproxy (3)
- 自适应html,在调整一下html,做成淘宝
- 微信公众号无线群发接口使用实例
- ubuntu 14 谷歌拼音输入法
- websocket
- 享元模式
- Linux中将网络管理器由NetworkManager切换为systemd-network
- win10输入法切换不了怎么办?win10无法切换输入法现象的解决方法
- OPENCV249 编译静态库(含CUDA,OPENCL)
- C语言编程优化运行速度
- IOS技术调研
- SQL笔记(5)_第五章 操作数据
- Pycharm5注册方式
- 关于“创业者与VC见面的10个不成文细节点”
- Ubuntu关闭图形界面
- 定时且周期性的任务研究I--Timer
- ASP.NET repeater添加序号列的方法