你是否学习了微服务架构Spring Cloud、Dubbo,但是分布式事务却没有了解过?
你是否尝试学习了分布式的概念,但是学习完却还不知所以然,一头雾水?
你是否尝试使用了TXLCN、Fescar/Seata,但是却不知道它们的原理?
你不努力让自己过上想要的生活, 以后就会用大把的时间去应付自己不想要的生活。
记得几年前 ,那时候微服务Spring Cloud也刚出来没多久,我有幸,在早期就了解了Spring Cloud,学习了Spring Cloud中的各个组件:注册中心Eureka、服务消费Ribbon、Feign、网关Zuul/Gateway、配置中心config等等。
学习完之后,感觉自己都膨胀了,也凑巧有一个面试机会,也是就去挑战了一下。在问到微服务架构相关的都回答的比较顺畅,但是在问到:微服务中的分布式事务是怎么解决的,瞬间就蒙圈了,在面试中直接回答不会,也不好,于是乎,就回答说:这块是别的同事设计的,自己不是很清楚怎么落地实施的。很明显这样的回答,自己都不满意,所以这次面试,也就不了而终了。
知之为知之,不知为不知,是知也。对于不懂的知识,就要敢于发问,不懂装懂,似懂非懂,都是在无形中,让自己退步了。
1.01和0.99,到底相差多少。表面看起来只是相差了0.02,实在是微乎其微,不足道哉。但是当与365乘方后,结果却是天差地别。
对于分布式事务,如果要学习的话,那么都要学习什么呢?
基础概念-初入江湖
磨刀不误砍柴工,要对于分布式具体的方案有一个透彻的了解,那么基础概念就是你第一步要了解的,一开始的时候,都需要了解什么呢?
(1)事务的基本概念:什么是事务?本地事务?数据库事务?分布式事务?
(2)事务的四大特性ACID:事务的四大特性、四大特性在数据库层面是怎么体现的。
(3)分布式产生的场景。
(4)分布式事务的理论:CAP理论、BASE理论。
2PC/3PC-征战沙场
有了基本理论知识的加持,就可以开始学习具体的方案了,分布式提出的方案一就是两阶段提交2PC,那么对于TCC要学习什么呢?
(1)概念:要了解什么是2PC/3PC?
(2)方案原理:XA方案、Seata方案、TXLCN的lcn方案。
(3)实战:对于方案还是要进行实际操作下,才能有一个感官的认知。
TCC-勇者无敌
对于2PC中的方案的,是在实际项目还是使用的比较多的,但是如果碰到不同数据源的问题,那么2PC可能就无能为力了(2PC的分布式事务解决方案大多依赖于本地事务),那么如果在项目中有mysql、redis、mongodb的话,那么2PC就无法控制这个流程的分布式事务了,但是TCC方案就是一种不太依赖本地事务的方案。
(1)概念:要了解什么是TCC ?
(2)TCCC的异常处理:幂等性、空回滚、悬挂的产生原因以及怎么处理。
(3)TCC的常用框架:了解TCC的常用框架,如何使用TXLCN的TCC进行实战。
可靠消息最终一致性-所向披靡
上面的方案基本上都是使用同步的思路,就是整个事务在同一个请求当中,A服务通过远程调用B服务,A服务需要B服务执行完成之后才能进行返回,有些流程中,我们可能不关心当下下个服务的执行情况,比如用户注册送积分。
送积分的这个事情就可以使用异步的方式进行操作,我们的核心就是确保用户能够注册成功,减少用户的等待时间,那么我们就可以:用户填写完信息,发起注册流程,注册流程在异步通知积分服务进行积分操作,在这个异步的过程中,要确保消息能够送达到积分服务,也要确保积分服务能够接收到消息,这就是可靠消息最终一致性要解决的问题。
那在学习可靠消息最终一致性的解决方案的话,都需要学习什么呢?
(1)概念:了解清楚什么是可靠消息最终一致性。
(2)可靠消息最终一致性的方案:通过本地消息表和RocketMQ进行可靠消息最终最终一致性的方案有什么区别,以及怎么使用RocketMQ进行实战。
最大努力通知-叱咤风云
在学会了可靠消息最终一致性之后,在学习最大努力通知,那么转换思路问题了,只要稍微转换下可靠消息最终一致性的代码就是最大努力通知了。
以上这些就是要学习分布式事务要了解的技术知识,一方面是自己学习,逐个攻克各个知识点,另外一方面就是站在前人的肩膀上进行学习。
博主对于这块知识也录制了相应的课程,如果有需要的可以进行报名学习,感谢大家的支持。
知识大纲
使用技术
付出行动,升职涨薪从此开始!!!
为自己的人生负责,为自己的梦想买单,快点进「阅读原文」上课了哦~
分布式事务解决方案「手写代码」:http://t.cn/AieNUirK