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

2024-06-25 07:27:12 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

但我不确定这是不是一个正确的方向?我不知道如何用python-kazoo或任何其他语言(Java)实现这一点?如果你能帮我提供代码片段或者修正我的算法就好了? 另外,如何扩展这个协议来实现动物园管理员之间的通信?比方说,我们维护多个不同的zookeeper集群,这些集群被包装到区域或任何其他抽象实体中,我们希望使用两阶段提交在特定区域上执行这种显式事务?在


Tags: app区域协议客户端节点集群preparezookeeper
1条回答
网友
1楼 · 发布于 2024-06-25 07:27:12

基于2PC using Zk的算法的一个重要调整是

  • 协调器C注册事务节点/app/tx
  • 协调器通知客户有关事务
  • 当在/app/tx下创建节点时,协调器将设置监视
  • 每个客户机创建一个epimeral node/app/tx/node_i,并决定准备/中止
  • 客户端在节点上设置监视
  • Coorindator在等待超时或创建所有节点后决定提交/中止
  • Coordinator更改每个客户端的ephimeral节点的值以进行提交/中止
  • 客户端提交/中止事务
  • 客户端将节点值更新为已确认

相关问题 更多 >