前置知识 三阶段提交

简介: 【8月更文挑战第11天】

单库拆分为分库分表之后,一个巨大的挑战就是本地事务变成了分布式事务。事实上,即使没有分库分表,在微服务架构之下我们也还是会面临分布式事务的问题。

#
分布式事务既可以是纯粹多个数据库实例之间的分布式事务,也可以是跨越不同中间件的业务层面上的分布式事务。前表一般是分库分表中间件提供支持,后者一般是独立的第三方中间件提供支持,比如Seata。在面试的时候,要根据上下文确定面试官问你的分布式事务是哪一类。

先介绍分布式事务中几个比较常用的协议

三阶段提交协议是在两阶段协议地基础上进行地改进,三阶段提交协议引入了一个额外阶段来确保执行事务之前有足够的资源,减少两阶段协议引起的事务失败的可能

在两阶段协议里面,比较容易出现的一个情况就是参与者在准备阶段辛辛苦苦把Redo,Undo写好,结果另外一个参与者说自己这边执行不了事务,要回滚。那么这个参与者就白费功夫了。

因此在两阶段提交的基础上,三阶段提交引入了一个新阶段,协调者会先问一下参与者能不能执行这个事务。所以,整个三阶段提交协议的三个阶段是这样的

  1. 第一阶段CanCommit:协调者问一下各个参与者能不能执行事务。参与者这时候一般是检查一下自己有没有足够的资源。
  2. 第二阶段PreCommit:类似两阶段提交的第一个阶段,执行事务但是不提交
  3. 第三阶段Commit:直接提交或回滚

目前来看,三阶段提交协议并没有两阶段提交协议使用得那么广泛,原因有两个:一是两阶段提交协议已经足以解决大部分问题了,二是三阶段提交得收益和它得复杂度比起来,性价比有点低

目录
相关文章
|
1月前
分布式事务的两阶段提交和三阶段提交分别有什么优缺点?
【9月更文挑战第9天】两阶段提交(2PC)和三阶段提交(3PC)是解决分布式系统事务一致性的机制。2PC实现简单,保证强一致性,但存在同步阻塞、单点故障和数据不一致风险。3PC通过引入超时机制减少阻塞时间,降低单点故障影响,但复杂性增加,仍可能数据不一致,并有额外性能开销。
|
2月前
|
算法
两阶段提交
【8月更文挑战第11天】
35 1
|
2月前
|
设计模式 运维 测试技术
提交阶段
提交阶段
29 0
|
3月前
|
中间件 数据库
|
5月前
|
运维 Kubernetes 测试技术
云效产品使用报错问题之webhook触发失败,代码路径或者代码分支未匹配,如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
存储 算法 关系型数据库
对比两阶段提交,三阶段提交做了哪些改进?
在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。在关系型数据库中,由于存在事务机制,可以保证每个独立节点上的数据操作满足 ACID。但是,相互独立的节点之间无法准确的知道其他节点中的事务执行情况,所以在分布式的场景下,如果不添加额外的机制,多个节点之间理论上无法达到一致的状态。 在分布式事务中,两阶段和三阶段提交是经典的一致性算法,那么两阶段和三阶段提交的具体流程是怎样的,三阶段提交又是如何改进的呢?
104 0
|
5月前
|
传感器 自然语言处理 自动驾驶
自动执行与反馈
自动执行与反馈
31 1
|
中间件 Java 调度
Seata两阶段提交AT模式详解
Seata两阶段提交AT模式详解
628 0
Seata两阶段提交AT模式详解
|
存储 算法 NoSQL
分布式事务两阶段提交和三阶段提交有什么区别?
分布式事务两阶段提交和三阶段提交有什么区别?
238 0
分布式事务两阶段提交和三阶段提交有什么区别?
【JavaP6大纲】分布式事务篇:两阶段提交(2PC)
【JavaP6大纲】分布式事务篇:两阶段提交(2PC)
111 0