分布式事务
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,则这些参与者超时后会提交,导致数据不一致
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)