上一篇中我们详细分析了分布式事务,以及分布式事务的两种实现方案,二阶段提交和三阶段提交。他们都是满足了事务的ACID特性。但是,他们都有共同的缺点:同步阻塞,系统性能低以及没有解决数据不一致的问题。那今天我们来学另一种方案,基于消息的实现方式。
01
基于分布式消息的最终一致性方案
在eBay分布式系统中,架构师们解决一致性问题的核心方法论是:将需要分布式处理的事务通过消息的方式进行异步处理,然后根据业务规则自行进行失败重试。现在,我们知道了需要有个核心组件,那就消息中间件,通过消息中间件进行分布式系统中各个消息的传递动作如下图:

我同样以我们用户电商购物下单为例,期间涉及到订单系统、支付系统、仓库系统,他们彼此的协作时序图如下:

然后,我们看看它基于消息的最终一致性方案,整个流程是这样的:

所以,基于分布式消息最终一致性方案,一样是依据分布式系统中所有事务均成功则整个交易流程才成功的原则。其实,在我们大部分互联网项目中在应对分布式事务的时候,都会先牺牲下少许的数据不一致,来做成最终数据一致性的方案,遵从的是BASE理论。
02
什么是BASE理论
既然说到了消息最终一致性遵从BASE理论,我觉得有必要将BASE理论科普下。
BASE:全程是,Basically Avaliable(基本可用),Soft state(软状态),Eventually consistent(最终一致性)三个短语的缩写,来自eBay的架构师提出。
现在,我们将上篇(不好意思,懂分布式事务的你真的很了不起,上篇)中的二阶段提交、三阶段提交以及今天所说的基于分布式消息的最终一致性方案,基于其各自相关特点做一比较。

最后,我们再整体回顾下分布式事务的三种实现方式,整理个思维导图,帮助大家根据自己的业务进行合理的选择哪一种方案来实现自己公司的分布式事务:

总结,今天分享了分布式事务基于分布式消息最终一致性的方案,该方案是遵从BASE理论,并将BASE理论做了科普,然后对比了上篇将的二阶段提交和三阶段提交,这三种方案均是可以被用在生产的,看自己的项目进行选择,二阶段和三阶段是强制性算法,所以,你的项目如果对于一致性比较严格就才去这这方案;而消息最终一致性是可以容忍系统的部分不一致的,但是最终是一致的,比如上面我讲的我们公司的案例就是这样的使用了最终一致性方案。
下一集预告:就是把我们的分布式锁的开发方案给大家分享,敬请期待哈
关于架构师修炼
本号旨在分享一线互联网各种技术架构解决方案,分布式以及高并发等相关专题,同时会将作者的学习总结进行整理并分享。
更多技术专题,敬请期待