分布式协同:解决分布式状态和数据一致性问题:一致性哈希

一致性哈希算法:

背景:

1. 分布式哈希表(DHT) 是 P2P网络 和 分布式存储中常见的一种技术 ,是哈希表的分布式扩展,每台机器只负责承载部分数据,如何通过哈希方式对数据进行 增删改查等数据操作的技术。而"一致性哈希" 就是DHT其中的一种实现方式。
算法步骤:
  1. “一致性哈希”算法 将 (哈希数值空间) 按照(大小)组成一个首尾相接的环状序列。
  2. 对于每台机器,可以根据其 (IP) 和 (端口号)经过 (哈希函数 )映射到 哈希数值空间内。
  3. 每台机器就是环状序列的不同节点。
  4. 注:假设 N 代表机器,i代表哈希空间对应的数值。
  5. 而每台机器负责存储落在一段有序哈希空间内的数据,比如N 14存储 经过哈希后落在6~14范围内的数据。
  6. 同时每个机器节点 记录环中的前趋节点和后继节点的位置,使之成为一个真正的有向环。
路由问题(快速找到数据问题):
低效率解决办法:
  1. 沿着有向环顺序查找,接收到查询请求的节点,获得查询的主键的哈希值 ( j) 之后,判断是否在自身管理范围内,否的话就交给后继节点进行处理。
  2. 直到 某个节点 Nx, x是>=j的最小编号节点。这样,最多遍历所有的节点也能找到 对应的结果。
高效率解决办法:
  1. 为了加快查找速度,在每个节点配置路由表,路由表存储 m 条路由信息(m 为哈希空间的二进制数值比特位长度)。

  2. 其中i 项 (0<=i<=m-1)路由信息表示距离上一个节点的2**i的距离的哈希空间内的节点。
    图演示:
    在这里插入图片描述

    算法执行过程描述:
    1. 输入:从机器节点 N(i)发起初始查询请求,查询主键Key对应的键值,其中H(key)=j 。
    2. 输出:Ni给出Key对应的键值value,或者返回键值不存在的信息 。
    3. 过程:假设当前所在初始节点为Nc,他的后继节点为Ns,要查找的初始节点为Ni,N(i)=j。
      3.1. 判断 c<=j<=s,
      3.2. 如果为True,结束查找,说明key如果存在,一定在Nc的后继节点Ns上,所以Nc发送消息给Ns,要它查找key的值value,Ns将查询结果返回给 Ni。
      3.3. 如果为False,Nc查找其对应 的路由表,找到小于j的最大节点Nh(如果所有节点都>j,则选择 m-1项为Nh),Nc项Nh发送信息,要它帮忙查找,此时Nh为新的Nc节点,接下来重复 步骤2,3即可。
插入新节点问题:

新加入的N(new)节点必须与有向环中的任意一个节点 Nx产生联系,通过上面的路由算法找到H(N(new))的对应哈希值new,可以找到它的后继节点为Ns,假设前趋节点为Np。

算法过程:
	要将N(new)节点 加入,需要后续步骤。
非并发环境:

1.将N(new)的后继节点指为Ns,前继节点置位空值Null。
2. 迁移Ns节点上哈希值小于 new的数据到N(new)节点上。

并发环境:

1.将N(new)的后继节点指为Ns,前继节点置位空值Null。
2. 稳定性检测,并非为新节点加入而设置的,而是所有节点周期性自动完成。 通过稳定性检测可以完成前趋和 后继节点的数据迁移。

	3. 什么是稳定性检测:
		3.1: Nc向Ns询问他的前趋节点Np,一般这样直接到步骤4。
		3.2:  如果Nc是介于 Np和Ns之间,Nc记录Np为其后继节点。
		3.3: 令Nx为Nc的后继节点,Nx可能是Np,亦可能是Ns,取决于步骤2。 如果Nx的前趋节点为Null或者Nc位于Nx和它的前趋节点之间,那么Nc给Nx发送消息告诉 Nx,Nc就是它的前趋节点,Nx将前趋节点设置为 Nc。
		3.4:Nx把哈希值小于c的数据迁移到Nc上。

新加入节点之后 ,原先的路由表还需要更新,因此每个节点还需要周期性检查路由表。

节点离开:
正常离开:可以通知前趋节点和后继节点做一些更新工作,迁移数据 等。
异常离开:往往是机器故障导致的,可以采用机器节点数据多副本的方式。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值