handoff

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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用来处理节点宕机的情况下提高写的高可用,不过,这个方法在某些分布式系统中也可以用来实现无损升级,思路相同。 

以上是关于handoff的主要内容,如果未能解决你的问题,请参考以下文章