很多时候,我们用习惯了一个东西,会忘记当初设计它使用它的初衷,以及我们需要解决的问题。
就像数据库事务,很多人都习惯了它的存在,听过了它的传说,以及它解决了很多问题。以至于很多人进行数据库操作不用事务包裹就不舒服的地步。但是翻开了来说,你每一次事务用得对吗?需要吗?它到底给你解决了什么问题?有想过吗?
如果你没有深思熟虑这个问题,问到事务给解决的问题,我想绝大部分的人,第一反应肯定是:两条SQL要么同时成功、要么同时失败啊。 事务可不仅仅是这一点点功能。
这就切入到我们今天的话题:我们分布式事务设计的初衷是什么?我们要解决的问题是什么?我可以很直接的说:分布式事务系统就是多个RPC调用(单机事务)要么同时成功,要么同时失败的统一处理系统。 而不是真正去实现分布式事务,是的,不是真正的实现分布式事务或许分布式事务需要打上引号。
下面我将从为什么分布式事务的目的是这个,以为怎么实现分布式事务两个大的方向组织这个系列的文章,起重点主要为什么是这个,关于为什么目的是这个我们将从1.事务的历史,2.Innodb事务实现的简要概述,3.常见的分布式事务解决方案的本质三个方面一步步的描述这个结论。至于怎么实现在理解常见分布式事务原理之后,弄懂一个关键点:怎么让服务可靠之外就没有任何问题了。
为啥分布式事务的目的只是解决要么同时成功要么同时失败
事务的历史
- 讲讲事务系统和文件系统的区别
- 讲讲ACID到底是个啥
- 讲讲隔离等级又是什么
Innodb事务实现的简要概述
- 讲讲ACID的实现
- 讲讲隔离等级的实现以及锁机制
- 讲讲最终一致性这个伪概念
常见的分布式事务解决方案的本质
- 事务维度业务调用类型的划分
- 讲讲 JTA 以及 XA
- 讲讲所谓可靠消息
- 讲讲TCC
- 讲讲不吹牛是个好东西的阿里GTS
怎么实现呀要么同时成功要么同时失败
前面的如果讲透彻了,其实怎么实现反而是件简单的事情,这里面最重要的是怎么建立可靠的日志,怎么在各种宕机以后还能实现我们的目标。
最终希望这个系列的文章对大家有好处。