一致性Hash
通常情况下,比如单机、但节点的应用中普通的Hash算法完全可以胜任。但是随着分布式部署的,多节点的情况下,就需要考虑节点的增加、减少所带来的Hash不一致的问题。
不一致就会导致导致数据和节点路由匹配不上,同时为了一致还要考虑节点的数据倾斜问题等,这就是一致性Hash要实现的内容
一致性hash算法通过一个叫作一致性hash环的数据结构实现。这个环的起点是0,终点是2^32 - 1,并且起点与终点连接,环的中间的整数按逆时针分布,故这个环的整数分布范围是[0, 2^32-1]
- 将对象放置到Hash环 hash(ojb)
- 将机器放置到Hash环 hash(node)
- 为对象选择机器:将对象和机器都放置到同一个hash环后,在hash环上顺时针查找距离这个对象的hash值最近的机器,即是这个对象所属的机器。
【数据倾斜】
一致性哈希算法引入了虚拟节点机制,即对每一个物理服务节点映射多个虚拟节点,将这些虚拟节点计算哈希值并映射到哈希环上,当请求找到某个虚拟节点后,将被重新映射到具体的物理节点。虚拟节点越多,哈希环上的节点就越多,数据分布就越均匀,从而避免了数据倾斜的问题。
https://developer.aliyun.com/article/1082388
https://segmentfault.com/a/1190000021199728