2

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

  • 协调C器注册交易节点/app/tx
  • 为每个相关方注册处理节点/app/tx/%d (Ni)
  • 在每个相关方节点上设置观察者Ni
  • 通知每个Ni人新的交易tx
  • Ni检查其节点是否已创建
  • Ni将事务设置为 prepare()/abort()
  • C从各方接收结果并决定中止/继续
  • 如果继续,每个Ni执行查询
  • NC我用 ok/fail通知
  • C决定中止|提交
  • C通知大家结果。
  • tx已承诺

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

4

1 回答 1

0

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

  • Coordinator C 注册交易节点 /app/tx
  • 协调器通知客户有关交易
  • 当在其下创建节点时,协调器在 /app/tx 上设置 WATCH
  • 每个客户端创建一个临时节点 /app/tx/node_i 并决定准备/中止
  • 客户端在节点上设置监视
  • Coorindator 在等待超时或创建所有节点后决定提交/中止
  • 协调器更改每个客户端提交/中止的临时节点的值
  • 客户端提交/中止事务
  • 客户端将节点值更新为已确认
于 2017-05-20T18:26:50.870 回答