zoukankan      html  css  js  c++  java
  • 两阶段提交协议

    两阶段提交协议

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

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

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

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

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

  • 相关阅读:
    牛客多校第一场 A Equivalent Prefixes 单调栈(笛卡尔树)
    HDU多校第三场 Hdu6606 Distribution of books 线段树优化DP
    (待写)
    Hdu6586 String 字符串字典序贪心
    2019HDU多校第一场1001 BLANK (DP)(HDU6578)
    iOS触摸事件
    iOS获取相册/相机图片-------自定义获取图片小控件
    自定义表情输入框
    iOS版本、iPhone版本、Xcode版本比对
    Swift备忘录
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/14679676.html
Copyright © 2011-2022 走看看