14 分布式事务之可靠消息队列
你好,我是周志明。
前面几节课,我们谈论了事务处理中的本地事务(单个服务、单个数据源)、全局事务(单个服务、多个数据源)和共享事务(多个服务、单个数据源),这一讲我们将聚焦于事务处理中最复杂的分布式事务(多个服务、多个数据源)。
在开始展开介绍之前,我想先给你强调一下,这里所说的分布式事务(Distributed Transactions),跟DTP模型中所指的“分布式事务”的含义是不一样的:DTP模型所指的“分布式”是相对于数据源而言的,并不涉及服务,这部分内容我们在上节课已经讨论过了;而这里的“分布式”是相对于服务而言的,它特指的是多个服务同时访问多个数据源的事务处理机制,严谨地说,它更应该被称为“在分布式服务环境下的事务处理机制”。
其实在上一讲我们就提到过,为了解决分布式事务的一致性问题,1991年X/Open组织提出了一套XA的事务处理架构。在2000年以前,人们还寄希望于这套事务处理架构能良好地应用在分布式环境中。不过很遗憾,这个美好的愿望今天已经被CAP理论彻底地击碎了。
那么,为什么会出现这种局面呢?就让我们从CAP与ACID的矛盾开始说起吧。
CAP与ACID之间的矛盾
CAP理论又叫Brewer理论,这是加州大学伯克利分校的埃里克 · 布鲁尔(Eric Brewer)教授,在2000年7月“ACM分布式计算原理研讨会(PODC)”上提出的一个猜想。