zoukankan      html  css  js  c++  java
  • 2pc和3pc区别

    2pc和3pc区别

    3pc背景:
        2pc协议在协调者和执行者同时宕机时(协调者和执行者不同时宕机时,都能确定事务状态),选出协调者之后 无法确定事务状态,会等待宕机者恢复才会继续执行(无法利用定时器来做超时处理,超时后也不知道事务状态,无法处理,强制处理会导致数据不一致),这段时间这个事务是阻塞的,其占用的资源不会被释放。为了解决这个问题,产生了3PC协议。


    原理:
        3PC增加了一个中间状态,方便判断事务状态,新的协调者不用等宕机者恢复 就能决定事务状态,准确的提交事务或者终止事务。
        1.CanCommit(能否提交)

        2.PreCommit(预提交)
        进入这个状态,说明各执行节点的状态都是canCommit
        3.doCommit(预提交)
        进入这个状态,说明个执行节点的状态都是precommit

        新协调者如果发现有的存活节点的状态是preCommit或doCommit,说明各执行节点的状态肯定都是"可以提交",协调者直接提交事务,能保证数据一致性 。
                   如果发现有的存活节点状态是abort状态,说明事务被中断了,协调者继续中断事务就行。
                   如果发现所有节点都是canCommit,说明各执行节点不会有处于doCommit状态(因为如果有节点是canCommit,不会有节点是canCommit状态),协调者中断事务,能保证数据一致性。

    结论:

        3pc解决了事务状态不可知的问题。不过其对执行者引入超时机制(超时后根据执行器当前状态canCommit or preCommit回滚或者提交事务,释放事务占用的资源),如果发生网络分区,会导致事务数据不一致,虽然提升了系统可用性,不过牺牲了系统一致性,执行者超时这个设计不好。

        2pc 3pc归根到底是选择系统可用性还是选择系统一致性(CAP理论中的抉择问题)

        2pc 一致性好、可用性较低,3pc 一致性较低、可用性高

  • 相关阅读:
    git学习笔记
    angular自定义指令-1
    转 三范式
    CentOS 7 安装NVIDIA驱动实现修改分辨率和扩屏功能
    acm 2034
    acm 2031
    记票统计
    acm 2020 map 逆向输出
    acm 2014
    将输入的字符一个一个读入
  • 原文地址:https://www.cnblogs.com/hubaoxi/p/6867203.html
Copyright © 2011-2022 走看看