Friday, April 23, 2021

System design: Hinted handoff | baidu.com -> Chinese article | Sloppy quorum

 

浅谈hinted handoff

这片文章主要包含以下内容

  • 什么是hinted handoff
  • hinted handoff with Cassandra
  • hinted handoff with dynamo


什么是hinted handoff

先讲一个小故事:小明想回家,但是忘记带家里的钥匙了,于是跑到邻居家去吹空调等着妈妈下班回来。小明妈妈回来了,打开了门,于是小明就回家了。

这个流水账的故事和hinted handoff有什么关系呢?

小明回家---把某个数据存到某个节点A

小明没有带钥匙---访问的这个节点A发生了故障

小明跑到邻居家里---hinted handoff把这个数据先存到其他的一个临时的节点B上

小明妈妈回来打开了门,小明进家门---之前故障的节点A恢复了,把之前存在临时节点B上的数据重新写回到恢复的这个节点A上


hinted handoff在Cassandra中的应用

Cassandra里面又一个参数可以配置,当Consistency levels这个参数设置为any的时候,

源文档是这么说

A write must be written to at least one node. If all replica nodes for the given partition key are down, the write can still succeed after a hinted handoff has been written. If all replica nodes are down at write time, anANYwrite is not readable until the replica nodes for that partition have recovered.

1、如果所有的节点挂了,还是可以使用hinted handoff来保证写入的成功(等到节点恢复之后,再把数据写到节点)

2、如果所有的节点在写的时候都挂了,在副本节点恢复之前都是不可读的


dynamo中的Hinted Handoff

sloppy quorum是想和strict quorum 做一个比较 其实是想描述一个严格的quorum协议以及一个不那么严格的quorum协议。一个strict quorum指定了write或者read的时候必须操作指定的N个节点,如果发生了节点failure或者网络失败,为了保证可用性,就衍生出了sloppy quorum,所以sloppy quorum就是把要write的数据写找另外一个地方(另外一个地方)存起来,等到目标节点恢复之后,再从另外的这个地方把数据放到这个原来的目标节点

在dynamo中需要把w设置为1,并且声称只要集群中有1个节点是存活的,写就能成功;如果都挂了,就不能保证写入成功。

本质上,Hinted Handoff只能保证node的短暂失效。那么如果一个节点永久失效了呢?是怎么来处理呢?是用anti-entropy的思想,用了merkle tree来实现

Merkle trees minimize the amount of data that needs to be transferred for synchronization and reduce the number of disk reads performed during the anti-entropy process

未完待续

No comments:

Post a Comment