分布式事务,一种保守玩法
2PC,是分布式事务的一种常见实践。
分布式事务为什么难?
在分布式环境下,每个节点都可以知晓自己操作的成功或者失败,却无法知道其他节点操作的成功或失败。当一个分布式事务跨多个节点时,保持事务的原子性与一致性,是非常困难的。
什么是两阶段提交?
二阶段提交2PC(Two phase Commit)是一种,在分布式环境下,所有节点进行事务提交,保持一致性的算法。
它通过引入一个协调者(Coordinator)来统一掌控所有参与者(Participant)的操作结果,并指示它们是否要把操作结果进行真正的提交(commit)或者回滚(rollback)。
为什么叫两阶段提交?
顾名思义,2PC分为两个阶段。
第一个阶段,投票阶段(voting phase):参与者通知协调者,协调者反馈结果。
画外音:可以理解为单机事务的trx.exec()。
第二个阶段,提交阶段(commit phase):收到参与者的反馈后,协调者再向参与者发出通知,根据反馈情况决定各参与者是否要提交还是回滚。
画外音:可以理解为单机事务的 trx.commit() 或者 trx.rollback()。
举个栗子:
甲乙丙丁四人要组织一个会议,需要确定会议时间,不妨设甲是协调者,乙丙丁是参与者。
投票阶段
(1)甲发邮件给乙丙丁,通知明天十点开会,询问是否有时间;
(2)乙回复有时间;
(3)丙回复有时间;
(4)丁迟迟不回复,此时对于这个事务,甲乙丙均处于阻塞状态,算法无法继续进行;
提交阶段
(1)协调者甲将收集到的结果通知给乙丙丁;
画外音:什么时候通知,以及反馈结果如何,在此例中取决与丁的时间与决定,
假设丁回复有时间,则通知commit;
假设丁回复没有时间,则通知rollback;
(2)乙收到通知,并ack协调者;
(3)丙收到通知,并ack协调者;
(4)丁收到通知,并ack协调者;
画外音:如果甲没有收到所有ack,则分布式事务迟迟不会结束,下一轮投票则迟迟不会开展。
两阶段提交有什么缺陷?
2PC在执行过程中,所有节点都处于阻塞状态,所有节点所持有的资源(例如数据库数据,本地文件等)都处于封锁状态。
典型情况为:
(1)某一个参与者回复消息之前,所有参与者以及协调者都处于阻塞状态;
(2)在协调者发出消息之前,所有参与者都处于阻塞状态;
另外,如有协调者或者某个参与者出现了崩溃,为了避免整个算法处于一个完全阻塞状态,往往需要借助超时机制来将算法继续向前推进。
总的来说,2PC是一种比较保守并且低效的算法,分布式事务真的很难做。
福利来了!!!
玄姐免费直播,三天搞定分布式事务架构。
事件:分布式事务架构方案
人物:奈学教育CEO,玄姐
时间:7.07-7.09(三天干货)20:00
分享提纲是什么?
DAY1(7.7)
(1)分布式事务的本质(同步业务场景、异步业务场景);
(2)分布式事务设计普适方法论(DB/MQ/Redis实践方法、分类);
(3)异步业务场景分布式事务设计与实践(异步消息/事务消息/本地消息/2PC/3PC);
DAY2(7.8)
(1)异步业务场景分布式事务设计与实践(分布式锁幂);
(2)同步业务场景分布式事务设计与实践(TCC/SAGAS/Seata);
DAY3(7.9)
(1)线上综合案例分布式事务实战(阿里电商业务场景);
有资料吗?(近千元资料,免费送)
如何参加免费的训练营,领取价值千元的大礼包?
扫码获取直播地址,免费领资料
分布式事务,P8之路,玄姐与你同行。
阅读原文,参与直播。
- 不到最后,你永远不知道会发生什么
- 除了解析域名,DNS还能干吗?
- 用户中心,1亿数据,架构如何设计?
- 我C,MySQL双主架构,原来能这么玩
- 帖子中心,1亿数据,架构如何设计?
- Java集合
- 【分布式】分布式锁都有哪些实现方案?
- C++在C的基础上改进了哪些细节
- sed之查找替换
- 《Django Web应用开发实战》学习笔记 9- 文件上传及下载
- 面试官:了解二叉树吗,平衡二叉树,红黑树?
- C语言学习Day20
- Thinkphp6中where条件中字段与字段比较条件的写法
- Git代码提交操作,以及git push提示failed to push some refs"XXX"
- 植物肉品牌「Hey Maet」实现多品类产品落地,为国内提供健康饮食方式
- 你一直没什么钱,可能是穷人思维害了你
- 传苹果iPhone 12关键芯片短缺;越南拟解除支付宝、微信支付限制;滴滴正式进军新西兰丨Going Global 周报
- 超适合打工人的变形椅,10多种坐姿随意切换,最高承重180公斤 | 海外黑科技
- Python之使用pip安装三方库Error:Could not find a version that satisfies the requirement <package>(from versions: none),No matching distribution found for <package>
- 7-10倍写入性能提升:剖析WiredTiger数据页无锁及压缩黑科技