我有一个关于在 zookeeper 集群中实现两阶段提交协议以协调多个客户端连接之间的某些事务的问题。现在我有以下想法:
- 协调
C
器注册交易节点/app/tx
- 为每个相关方注册处理节点
/app/tx/%d (Ni)
- 在每个相关方节点上设置观察者
Ni
- 通知每个
Ni
人新的交易tx
Ni
检查其节点是否已创建Ni
将事务设置为 prepare()/abort()C
从各方接收结果并决定中止/继续- 如果继续,每个
Ni
执行查询 N
C
我用 ok/fail通知C
决定中止|提交C
通知大家结果。tx
已承诺
但我不确定这是一个正确的方向吗?而且我不确定如何在 python kazoo 或任何其他语言(Java)中实现这一点?如果您可以通过提供片段或纠正我的算法来帮助我,那会很好吗?另外,如何扩展这个协议以实现 Zookeeper 间的通信?比如说,我们维护多个不同的 Zookeeper 集群,这些集群被包装到区域或任何其他抽象实体中,我们希望使用两阶段提交在特定区域上执行此类显式事务?