分布式事务锁模式之一:租用Lease


分布式系统中群集节点需要对某些资源的独占访问权。但是同时会造成其他节点操作崩溃;其实这些节点可以对资源实现短暂的连接然后断开,这样它们不会无限期地保持对资源的访问。
应用案例:

  • Google的[chubby]服务以类似方式实现了限时租赁机制
  • [zookeeper]会话使用与复制租约相似的机制进行管理。
  • Apache kafka[KIP-631] 提出使用时间限制的租赁管理组成员资格和Kafka经纪人的故障检测。
  • [etcd]提供了有时间限制的租赁工具,客户可以使用该工具来协调其活动以及组成员身份和故障检测。
  • dhcp协议允许连接的设备租用IP地址。具有多个DHCP服务器的故障转移协议的工作方式与此处说明的实现类似。

本文使用代码演示了这种模式的实现,点击标题见原文。
原理:
群集节点可以在有限的时间段内请求租约,租约在一段期限后会到期。如果节点想要延长访问权限,则可以在租约到期之前再更新租约。
使用Consistent Core实现租约机制以提供容错能力和一致性。有与租赁相关的“生存时间time to live”的值。
群集节点可以在Consistent Core创建一个包含租借lease的key,这个租借在领导者和追随者之间复制以提供容错能力。拥有租借lease的节点负责定期刷新它。 客户使用HeartBeatConsistent Core中刷新time to live值。
租借lease是在服务器中的所有Consistent Core节点上创建的,但只有领导者跟踪lease的超时,其他跟从者未跟踪超时。这样做是因为我们需要领导者使用自己的单调时钟来决定租借何时到期,然后让追随者知道租借何时到期。这样可以确保像Consistent Core中的其他任何决定一样,节点也就租约到期达成共识。