繁体   English   中英

如何在Zookeeper集群中实现2pc?

[英]How to implement 2pc in Zookeeper cluster?

我有一个关于在Zookeeper群集中实施两阶段提交协议以协调多个客户端连接之间的某些事务的问题。 现在,我有以下想法:

  • 协调器C注册事务节点/app/tx
  • 每个参与方的注册处理节点/app/tx/%d (Ni)
  • 在每个参与方节点Ni上设置观察者
  • 通知每个Ni有关新交易的tx
  • Ni检查其节点是否已创建
  • Ni将交易设置为prepare()/ abort()
  • C收到各方的结果,并决定中止/继续
  • 如果继续,则每个Ni执行查询
  • N我以“确定/失败”通知C
  • C决定中止|提交
  • C通知所有人有关结果。
  • tx

但是我不确定这是正确的方向吗? 我不确定如何在python kazoo或任何其他语言(Java)中实现此功能? 如果您可以通过提供摘要或纠正我的算法来为我提供帮助,那将是很好的选择? 另外,如何扩展此协议以实现动物之间的通信? 说,我们维护多个不同的Zookeeper集群,这些集群被包装到区域或任何其他抽象实体中,并且我们希望使用两阶段commit?在特定区域上执行此类显式事务。

使用Zk对基于2PC的算法进行的重要调整是,

  • 协调器C注册事务节点/ app / tx
  • 协调员将交易通知客户
  • 在/ app / tx下创建节点时,协调器在/ app / tx上设置WATCH
  • 每个客户端都会创建一个临时节点/ app / tx / node_i,并决定是否准备/中止
  • 客户端在节点上设置监视
  • Coorindator在等待超时或创建的所有节点后决定提交/中止
  • 协调器为每个客户端更改临时节点的值以提交/中止
  • 客户提交/中止交易
  • 客户端将节点值更新为已确认

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM