分布式事务如何在两阶段提交前进行更新操作?

问题描述 投票:0回答:0

大多数关于两阶段提交的讨论只谈如何提交,而没有谈及如何在提交前更新/删除/插入数据。这些操作是否也涉及两个阶段?他们需要协调员登录吗?如果它们甚至在到达两阶段提交阶段之前就失败了,会发生什么?以下是我的猜测,它们正确吗?

  1. 更新操作将由客户端发出,发送给协调器。然后协调器将其调度到相关的分区节点去执行,并等待它们的响应。收到响应后,协调器准备好接受来自客户端的下一个操作。此操作只有一个阶段。

  2. 分区节点将在内存中执行此操作,然后记录此操作,因为它可能会在失败时撤消/重做它。但是协调器根本不需要记录它,因为协调器不管理数据并且不能直接撤销/重做任何事情。

  3. 如果分区节点执行失败,它会通知协调器,然后协调器会在其条目中记录中止,并要求所有参与的分区节点中止此事务。然后所有分区节点根据日志回滚事务。

  4. 如果一切顺利,那么我们进入两阶段提交。协调器向分区节点发送准备消息,分区节点通常会同意(投赞成票),记录准备好并确认协调器,然后协调器提交。分区节点可能不同意(投反对票)的原因可能是资源耗尽、被另一个事务中止、验证失败(在基于验证的协议或快照隔离的情况下)。

我尝试在互联网上搜索,并询问 chatGPT。但找不到令人信服的答案。我想阅读实现代码会有所帮助,但我没有时间这样做。

distributed-transactions two-phase-commit
© www.soinside.com 2019 - 2024. All rights reserved.