在分布式系统中实现事务一致性
Posted: Mon Jun 16, 2025 3:14 am
在分布式数据库中,可以采用多种技术和协议来实现不同级别的事务一致性:
1.两阶段提交(2PC)
2PC 是一种广泛使用的分布式事务协议,旨在确保跨多个参与者(节点)的原子性。它分为两个阶段运行:
准备阶段(投票阶段):协调器节点向所有参与节点发送“准备”消息。每个参与者在本地执行事务,如果成功,则将其更改写入持久日志(撤消/重做日志),并回复“赞成”。如果参与者无法完成事务,则回复“反对”。
提交阶段(决策阶段):
如果所有参与者都投了赞成票,协调器就会发送“提交”消息。然后,每个参与者都会将更改永久生效,并释放所有锁。
如果哪怕有一个参与者投了反对票,或者协调器等待投票超时,协调器就会发送“回滚”消息。然后,每个参与者都会撤消其更改。
2PC 的挑战:
阻塞:协调器是单点故障。如果它在提交阶段崩溃,参与者可能会无限期地处于阻塞状态,持有锁并阻止其他事务。这被称为“阻塞问题”。
表现:2PC 涉及多个网络轮次和磁 柬埔寨电话营销数据 盘 I/O,导致严重的延迟,尤其是在地理分布的系统中。
单点故障:协调器的失败可能会导致整个分布式事务停止。
2.三阶段提交(3PC)
3PC 尝试通过引入额外的“预提交”阶段来解决 2PC 的阻塞问题。
CanCommit阶段:类似于2PC中的准备阶段。
预提交阶段:如果所有参与者在 CanCommit 阶段都投了赞成票,协调器就会发送一条“预提交”消息。参与者确认已准备好提交,但尚未将更改永久生效。
DoCommit阶段:如果所有参与者都确认预提交,则协调器将发送“do-commit”消息,使更改永久生效。
3PC的挑战:
复杂性和延迟增加:3PC 增加了更多的消息和网络轮次,与 2PC 相比进一步增加了延迟。
仍然不是完全非阻塞:虽然在某些情况下它可以减少阻塞,但在某些网络分区条件下 3PC 仍然会阻塞。
实践中不太常见:由于其复杂性以及在实际分布式系统中相对于 2PC 的优势有限,3PC 较少被采用。
1.两阶段提交(2PC)
2PC 是一种广泛使用的分布式事务协议,旨在确保跨多个参与者(节点)的原子性。它分为两个阶段运行:
准备阶段(投票阶段):协调器节点向所有参与节点发送“准备”消息。每个参与者在本地执行事务,如果成功,则将其更改写入持久日志(撤消/重做日志),并回复“赞成”。如果参与者无法完成事务,则回复“反对”。
提交阶段(决策阶段):
如果所有参与者都投了赞成票,协调器就会发送“提交”消息。然后,每个参与者都会将更改永久生效,并释放所有锁。
如果哪怕有一个参与者投了反对票,或者协调器等待投票超时,协调器就会发送“回滚”消息。然后,每个参与者都会撤消其更改。
2PC 的挑战:
阻塞:协调器是单点故障。如果它在提交阶段崩溃,参与者可能会无限期地处于阻塞状态,持有锁并阻止其他事务。这被称为“阻塞问题”。
表现:2PC 涉及多个网络轮次和磁 柬埔寨电话营销数据 盘 I/O,导致严重的延迟,尤其是在地理分布的系统中。
单点故障:协调器的失败可能会导致整个分布式事务停止。
2.三阶段提交(3PC)
3PC 尝试通过引入额外的“预提交”阶段来解决 2PC 的阻塞问题。
CanCommit阶段:类似于2PC中的准备阶段。
预提交阶段:如果所有参与者在 CanCommit 阶段都投了赞成票,协调器就会发送一条“预提交”消息。参与者确认已准备好提交,但尚未将更改永久生效。
DoCommit阶段:如果所有参与者都确认预提交,则协调器将发送“do-commit”消息,使更改永久生效。
3PC的挑战:
复杂性和延迟增加:3PC 增加了更多的消息和网络轮次,与 2PC 相比进一步增加了延迟。
仍然不是完全非阻塞:虽然在某些情况下它可以减少阻塞,但在某些网络分区条件下 3PC 仍然会阻塞。
实践中不太常见:由于其复杂性以及在实际分布式系统中相对于 2PC 的优势有限,3PC 较少被采用。