分布式缓存学习笔记(八)—— 节点再平衡

上一章实现了缓存服务集群。当集群的容量逐渐不能满足系统要求时,我们需要对其扩容,扩容的方法是增加新的节点。然而新增节点一开始是空的,而老节点几乎是满的,此时我们就需要节点再平衡,将老节点上的缓存迁移一部分到新节点上。

本章将讨论节点再平衡的技术细节并实现节点再平衡的功能。

节点再平衡的技术细节

当新节点加入集群时,需要被迁移的缓存由一致性数列计算得出。假设原来的集群有n个节点,总共缓存了K个键,那么平均每个节点上有 K/n 个键。现在新加入 m 个节点,那么当再平衡结束后,平均每个节点上应有 K/(n+m)个键。也就是说,每个节点平均有 K/n-K/(n+m)个键需要被移到新节点上。那么总共就有n*(K/n-K/(n+m)),也就是m*K/(n+m)个键需要被移到m个新节点上,正好每个新节点平均接收K/(n+m)个键。这意味着不可能有任何键是从老节点转移到另一个老节点上。(事实上,我们从图7-3 和图 7-4 上也可以看出,在数列环上新增节点只会让原本要落到后置位某个老节点上的键落到新节点上,绝不会落到其他老节点上)。

要实现节点再平衡,我们只需要在集群加入新节点后,在每个老节点上遍历其缓存的所有键,用一致性散列计算找出需要被迁移的键,将它们复制到对应的新节点上,最后从本节点删除即可。

节点再平衡的接口

REST接口
我们会在 HTTP服务上实现节点再平衡功能的接口
POST /rebalance
客户端通过HTTP的POST方法访问该接口,通知缓存节点开始再平衡过程。该接口始终返回HTTP 代码200 OK。收到请求的服务端会在一个新的goroutine中运行再平衡函数。

小结

当集群加入新节点时,管理员可以在老节点上运行再平衡,将缓存容量负载分给新节点一部分。这个步骤并不是必需的,因为遍历键值对也需要花费 CPU 和网络资源,所以如果新加入的节点相比集群总结点数较少,而集群缓存容量并不紧张,管理员可以不运行再平衡。

总的来说,运行再平衡的时机取决于以下几点:

  • 新加入的节点数量较多,会导致较大比例的键重新映射到新节点上;
  • 老节点缓存容量已经见顶,贩须释放空间:
  • 缓存永不超时。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值