zoukankan      html  css  js  c++  java
  • 分布式事务

    1、两阶段

    角色

    协调者
    参与者

    两阶段

    第一阶段

    协调者将任务发送给每一个参与者,参与者执行,但不提交,并把执行结果返回给协调者

    第二阶段

    协调者收到参与者返回的结果,
    如果结果是《全部都返回了可以执行》,此时,协调者向所有参与者发送commit,参与者执行commit,然后把结果返回给协调者
    如果结果是《一个或多个返回不可以执行》,此时,协调者向所有参与者发送rollback,参与者执行rollback,然后把结果返回给协调者

    缺点

    1、执行过程中,所有节点都是事务阻塞的
    2、协调者如果挂了,参与者会一直阻塞下去
    3、如果由于网络原因有个别参与者没有收到commit,那么会导致数据不一致

    特点

    协调者拥有超时机制,即如果在一定时间内没有收到参与者返回的消息则默认失败

    三阶段

    简述

    三阶段针对两阶段的缺点,做出改进,将2PC的第一阶段拆分,并且在协调者和参与者中都引入超时机制。

    第一阶段

    协调者向所有参与者发送任务cancommit请求,询问是否可以执行
    参与者收到任务后,判断是否可以执行,并把结果返回给协调者

    第二阶段

    协调者收到多个参与者的返回结果,
    如果全为yes,则向所有参与者发送precommit,所有参与者执行precommit,并把执行结果返回给协调者
    否则,向所有参与者发送rollback,所有参与者执行rollback,并把执行结果返回给协调者

    第三阶段

    协调者收到多个参与者的返回结果,
    如果全为yes,向所有参与者发送docommit请求,参与者执行docommit,释放资源,并把执行结果返回给协调者
    否则,向所有参与者发送rollback请求,参与者执行rollback,释放资源,并把执行结果返回给协调者

    优劣势

    1、减小了参与者阻塞的范围,在出现单点故障后仍然能达成一致
    2、第三阶段,协调者发送rollback,网络原因导致个别参与者没有收到rollback,则这些参与者超时后会提交,导致数据不一致

  • 相关阅读:
    MySQL集群常见高可用方案(转)
    upsource使用
    Hystrix 使用
    astah UML 先画图、后编程
    java ThreadLocal 使用
    Java基础 Annotation使用
    LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置
    招聘求职学习
    Rotate List 面试题
    vue前台(四点二)
  • 原文地址:https://www.cnblogs.com/jis121/p/11163024.html
Copyright © 2011-2022 走看看