菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
415
0

两阶段提交协议

原创
05/13 14:22
阅读数 83535

两阶段提交协议

准备阶段:协调者向参与者发起指令,参与者评估自己的状态, 如果参与者评估指令可以完成,则会写redo或者undo日志(Write-Ahead Log的一种),然后锁定资源,执行操作,但是并不提交。

提交阶段:如果每个参与者明确返回准备成功,也就是预留资源 和执行操作成功,则协调者向参与者发起提交指令,参与者提交资源变 更的事务,释放锁定的资源;如果任何一个参与者明确返回准备失败, 也就是预留资源或者执行操作失败,则协调者向参与者发起中止指令, 参与者取消已经变更的事务,执行undo日志,释放锁定的资源。

我们看到两阶段提交协议在准备阶段锁定资源,这是一个重量级的 操作,能保证强一致性,但是实现起来复杂、成本较高、不够灵活,更 重要的是它有如下致命的问题。

阻塞:从上面的描述来看,对于任何一次指令都必须收到明确的 响应,才会继续进行下一步,否则处于阻塞状态,占用的资源被一直锁定,不会被释放

单点故障:如果协调者宕机,参与者没有协调者指挥,则会一直 阻塞,尽管可以通过选举新的协调者替代原有协调者,但是如果协调者 在发送一个提交指令后宕机,而提交指令仅仅被一个参与者接收,并且 参与者接收后也宕机,则新上任的协调者无法处理这种情况。  脑裂:协调者发送提交指令,有的参与者接收到并执行了事务, 有的参与者没有接收到事务就没有执行事务,多个参与者之间是不一致 的。 上面的所有问题虽然很少发生,但都需要人工干预处理,没有自动 化的解决方案,因此两阶段提交协议在正常情况下能保证系统的强一致 性,但是在出现异常的情况下,当前处理的操作处于错误状态,需要管 理员人工干预解决,因此可用性不够好,这也符合CAP协议的一致性和 可用性不能兼得的原理。

 

发表评论

0/200
415 点赞
0 评论
收藏
为你推荐 换一批