梦想还是要有的,万一忘了咋办?

0%

一致性hash

分布式系统存在一个问题,机器增加、减少时,之前存放的数据就会全部失效。因为你按照新的n值取模计算出的机器编号和当时计算得肯定不等,也就意味着大部分缓存会失效。hash环(一致性hash)可以尽可能的减少缓存失效的数目。

理论

哈希环
hash环(一致性哈希)需要经过2次哈希:

  • 将服务器节点hash到这个环上
  • 把keyhash到这个环上,顺时针找到离自己最近的一个服务器。

增加节点

哈希环增加服务器

1、添加服务器4
2、计算新增服务器在环上的位置,C4
3、将C4到C2之间的数据 由C3服务器迁移到C4;
4、其他数据不变

摘除节点

哈希环摘除节点

1、下线服务器4
2、C2-C4环上用户数据需要迁移到C3服务器。
3、此时有个问题 服务器异常下线数据如何迁移??一次性哈希用作缓存时可以不考虑数据丢失问题。新数据会放到新的对应服务器内。但如果做分布式存储呢?

数据倾斜

哈希环数据倾斜
1、服务器较少的时候很难出现均匀分布在环上。
2、这时会造成数据不均,某一台机器压力过大。
3、可以增加虚拟节点解决此问题。
哈希环虚拟节点
1、确定虚拟节点规则,比如 ip1_1,ip1_2
2、一台服务器对应多态虚拟节点,虚拟节点可以比较均匀的分布在环上

数据可靠性

假如我们使用场景不是缓存服务,不允许数据丢失,我们可以做数据冗余,为了简单做2份冗余。
hash环数据冗余