分布式事务解决的方案上

来源:哔哩哔哩   时间:2023-06-21 13:22:11

今天将重点介绍二阶提交、三阶段提交。

一、什么是二阶段提交?


(资料图片仅供参考)

两阶段提交2PC是分布式事务中最强大的事务类型之一,两段提交就是分两个阶段提交:

第一阶段询问各个事务数据源是否准备好。

第二阶段才真正将数据提交给事务数据源。

为了保证该事务可以满足ACID,就要引入一个协调者(Cooradinator)。其他的节点被称为参与者(Participant)。协调者负责调度参与者的行为,并最终决定这些参与者是否要把事务进行提交。

处理流程如下:

阶段一

a) 协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待答复。

b) 各参与者执行事务操作,将 undo 和 redo 信息记入事务日志中(但不提交事务)。

c) 如参与者执行成功,给协调者反馈 yes,否则反馈 no。

阶段二

如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送回滚(rollback)消息;否则,发送提交(commit)消息。两种情况处理如下:

情况1:

当所有参与者均反馈 yes,提交事务

a) 协调者向所有参与者发出正式提交事务的请求(即 commit 请求)。

b) 参与者执行 commit 请求,并释放整个事务期间占用的资源。

c) 各参与者向协调者反馈 ack(应答)完成的消息。

d) 协调者收到所有参与者反馈的 ack 消息后,即完成事务提交。

情况2:

当有一个参与者反馈 no,回滚事务

a) 协调者向所有参与者发出回滚请求(即 rollback 请求)。

b) 参与者使用阶段 1 中的 undo 信息执行回滚操作,并释放整个事务期间占用的资源。

c) 各参与者向协调者反馈 ack 完成的消息。

d) 协调者收到所有参与者反馈的 ack 消息后,即完成事务。

问题

性能问题:所有参与者在事务提交阶段处于同步阻塞状态,占用系统资源,容易导致性能瓶颈。

可靠性问题:如果协调者存在单点故障问题,或出现故障,提供者将一直处于锁定状态。

数据一致性问题:在阶段 2 中,如果出现协调者和参与者都挂了的情况,有可能导致数据不一致。

优点:

尽量保证了数据的强一致,适合对数据强一致要求很高的关键领域。(其实也不能100%保证强一致)。

缺点:

实现复杂,牺牲了可用性,对性能影响较大,不适合高并发高性能场景。

二、什么是三阶段提交?

三阶段提交是在二阶段提交上的改进版本,3PC最关键要解决的就是协调者和参与者同时挂掉的问题,所以3PC把2PC的准备阶段再次一分为二,这样三阶段提交。

处理流程如下 :

阶段一

a) 协调者向所有参与者发出包含事务内容的 canCommit 请求,询问是否可以提交事务,并等待所有参与者答复。

b) 参与者收到 canCommit 请求后,如果认为可以执行事务操作,则反馈 yes 并进入预备状态,否则反馈no。

阶段二

协调者根据参与者响应情况,有以下两种可能。

情况1:

所有参与者均反馈 yes,协调者预执行事务

a) 协调者向所有参与者发出 preCommit 请求,进入准备阶段。

b) 参与者收到 preCommit 请求后,执行事务操作,将 undo 和 redo 信息记入事务日志中(但不提交事务)。

c) 各参与者向协调者反馈 ack 响应或 no 响应,并等待最终指令。

情况2:

只要有一个参与者反馈 no,或者等待超时后协调者尚无法收到所有提供者的反馈,即中断事务。

a) 协调者向所有参与者发出 abort 请求。

b) 无论收到协调者发出的 abort 请求,或者在等待协调者请求过程中出现超时,参与者均会中断事务。

阶段三

该阶段进行真正的事务提交,也可以分为以下两种情况。

情况1:

所有参与者均反馈 ack 响应,执行真正的事务提交

a) 如果协调者处于工作状态,则向所有参与者发出 do Commit 请求。

b) 参与者收到 do Commit 请求后,会正式执行事务提交,并释放整个事务期间占用的资源。

c) 各参与者向协调者反馈 ack 完成的消息。

d) 协调者收到所有参与者反馈的 ack 消息后,即完成事务提交。

情况2:

只要有一个参与者反馈 no,或者等待超时后协调组尚无法收到所有提供者的反馈,即回滚事务。

a) 如果协调者处于工作状态,向所有参与者发出 rollback 请求。

b) 参与者使用阶段 1 中的 undo 信息执行回滚操作,并释放整个事务期间占用的资源。

c) 各参与者向协调组反馈 ack 完成的消息。

d) 协调组收到所有参与者反馈的 ack 消息后,即完成事务回滚。

优点:

相比二阶段提交,三阶段提交降低了阻塞范围,在等待超时后协调者或参与者会中断事务。避免了协调者单点问题。阶段 3 中协调者出现问题时,参与者会继续提交事务。

缺点:

数据不一致问题依然存在,当在参与者收到 preCommit 请求后等待 do commite 指令时,此时如果协调者请求中断事务,而协调者无法与参与者正常通信,会导致参与者继续提交事务,造成数据不一致。

关键词:

文章推荐

  • 分布式事务解决的方案上

    今天将重点介绍二阶提交、三阶段提交。一、什么是二阶段提交?两阶段提

    哔哩哔哩 2023-06-21
  • 天天热推荐:2023年6月25上周几的课

    随着端午节假期的临近,网上有关今年端午节放假调休安排也都十分的关注

    货源网 2023-06-21
  • 泗洲庵社区民情恳谈会:改好更要管好 做实做优老旧小区改造“后半篇文章”

    华声在线讯(通讯员:杨霜)湘潭市雨湖区泗洲庵新1、2、3栋建于80年代,

    华声在线 2023-06-21
  • 沃特股份6月21日盘中涨幅达5% 每日快报

    以下是沃特股份在北京时间6月21日11:06分盘口异动快照:6月21日,沃特

  • 全球新消息丨剑灵最高特效配置要求_剑灵配置要求高吗

    你知道剑灵的配置要求吗?什么样的配置可以玩剑灵?下面给大家推荐四组

    互联网 2023-06-21
  • 广告

    X 关闭

    X 关闭

  • 众测
  • more+

    今日热议:盈康生命旗下四川友谊医院正式挂牌成都医学院教学医院

    盈康生命旗下四川友谊医院正式挂牌成都医学院教学医院2022年12月30日09:11中国网财经

    12月29日基金净值:汇添富MSCI中国A50互联互通ETF最新净值0.8015,跌0.52%-每日快看

    12月29日,汇添富MSCI中国A50互联互通ETF最新单位净值为0 8015元,累计净值为0 8015元,较前一交易日下跌0 52%。历史数据显示该基金近1个月上

    全球今亮点!2023杭州春节留杭消费券社保缴纳要求一览

    丨2023杭州春节留杭消费券社保缴纳要求一览(一)缴纳职工社保在杭参保职工(养老险、医保任一险种)。不含机关事业单位人员和国有企业员工。

    陕甘宁有了高铁环线

    29日,银(川)兰(州)高铁全线正式开通运营,位于黄土高原的陕西、甘肃、宁夏三省区迎来了首条高铁环线,老边区凝聚起发展新动能。,2022-12-