handoff

本篇文章所说的handoff是指分布式系统中的一种提高写高可用的方法,最早在Dynamo的论文中提出,原名叫hinted handoff。cassandra作为Dynamo对应的开源实现,也实现了这个功能(另一个NoSql: Voldemort也有这个功能,个人觉得只要使用Quorum算法来实现数据冗余的都可以使用hinted handoff来提高写的高可用)。 

Quorum

首先介绍下Quorum(NRW)机制。Quorum机制是分布式系统中常用的用来保证数据冗余和最终一致性的投票算法。N代表总的副本数,R表示读需要的副本数,W表示写需要的副本数。Quorum机制要求必须满足以下两个约束:
(1)W + R > N
(2)W > N/2
第一条规则保证了一个数据副本不会同时被读写。
第二条规则保证了数据的串行化修改。一份数据的多个副本不可能同时被两个写请求修改。
假设N=3,W=2,那么R至少要等于2,才能保证至少可以读到一个最新的数据。这么做的好处是当有节点failover的时候,系统还是可用的,且不会读到脏数据。
Quorum机制存在一个tradeoff,当W越大时,R就可以越小,这样写开销较大,读开销较小。反之,W越小,R就需要越大,这样写开销小,读开销就大。在系统设计时,根据场景需要可以自由调整参数。

Hinted handoff

在Quorum机制的一些场景下,如果某台节点failover了,可能会导致写不可用。举个例子,对于N=3,W=3,R=1的场景,如果宕机一台节点,这个时候所有的写都不可用了。为了避免这种情况对写可用性的影响,在Dynamo的论文中提出了hinted handoff方法,使用了一种’sloppy quorum’机制。
 
假设存在A,B,C,D四个节点,某个副本存在于ABC三个节点中,此时A宕机,那么原先该写入A的副本数据可以暂时写到D上并标记。等A恢复后,D再把为A记的增量数据回传给A。通过这个方法,可以提高写的高可用。
 
hinted handoff用来处理节点宕机的情况下提高写的高可用,不过,这个方法在某些分布式系统中也可以用来实现无损升级,思路相同。 

转载于:https://www.cnblogs.com/ffei/p/7398283.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值