我是如何基于二阶段递交及悲观锁实现分布式事务的
由于框架一开始的定位就是需要支持强一致性分布式存储,所以如何实现分布式事务成为一个大挑战。作者学习了CockroachDB及TiDB等数据库的实现方式后,决定参考TiDB的实现方式,但不同于使用乐观方式而是采用悲观锁方式,遇到事务冲突采用排队的方式而不是重启事务。
一、二阶段(2PC)递交流程:
参考下图举例说明一下流程:
1. 业务服务开始事务,其所在的节点作为事务协调者新建一个事务实例(使用HLC作为事务开始时间戳);
2. 协调者将命令1加入事务命令列表(如果是第一个命令则作为事务主记录),同时向表1的RaftLeader发送命令,表1状态机处理命令时上锁成功后返回(包含当前节点的HLC);
3. 同步骤2,但记录事务主记录是哪个,用于检测事务状态;
4. 业务服务处理完后通知协调者递交事务,协调者选取所有事务参与者节点最大的HLC作为事务递交时间戳;
推荐阅读
- 小鱼人|如何在新赛季稳定上分?善于抓失误的小鱼人,值得认真练上一波
- 阴阳师|阴阳师SR川猿强度如何 是否值得抽卡 改变斗技环境 大佬的新玩具
- 手机游戏|梦幻西游手游:活力如何换金币 一切都已给出 就看你的选择
- 华佗|三国杀:两位\奶爸\,朱治与华佗比,强度如何呢?
- 亲朋上分|《亲朋上分》266391亲朋下分亲朋上下分永劫无间崔三娘技能介绍 崔三娘如何获得更多技能
- s6|金铲铲之战:S6双城传说如何才能快速上手?基础知识很关键
- |冰雪传奇:平民玩家四转后如何打金
- 穿越火线|CF:传说武器再度上新,那王者、炫金该如何发展?
- 打野|打野已经被削到几乎不能再削了,到底如何平衡打野位置?
- 电子竞技|新华社对话明凯、阿布,探讨电竞选手是如何炼成的?宁王无辜躺枪