• 分布式事务


    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,则这些参与者超时后会提交,导致数据不一致

  • 相关阅读:
    .NET互操作技术杂谈
    VS2008 Remote Debug HOW TO
    Entity Framework一对多关系或一对一关系删除子对象的方法
    Associations in EF Code First: Part 1 – Introduction and Basic Concepts
    如何管理Entity Framework中得事务
    在asp.net mvc3中编译视图文件
    entity framework中对关系使用默认规则与配置
    使用Entity Framework时动态生成lamda表达式
    asp.net mvc 身份验证中返回绝对路径的ReturnUrl
    Entity Framework 事务处理SaveChanges(false)
  • 原文地址:https://www.cnblogs.com/jis121/p/11163024.html
Copyright © 2020-2023  润新知