一篇文章完全搞懂“分布式事务”

分布式事务是企业集成中的一个技术难点,也是每个分布式系统架构中都会涉及到的一个东西,特别是在这几年愈来愈火的微服务架构中,几乎能够说是没法避免。面试

本篇文章将经过详解分布式事务的一致性,以及分布式事务实战解决方案,帮助你们搞懂分布式事务,推荐收藏。数据库

01 为何须要分布式事务缓存

因为近十年互联网的发展很是迅速,不少网站的访问愈来愈大,集中式环境已经不能知足业务的须要了,只能按照业务为单位进行数据拆分(包含:垂直拆分与水平拆分),以及按照业务为单位提供服务,从早期的集中式转变为面向服务架构的分布式应用环境。服务器

举一个典型的例子,阿里的淘宝网站随着访问量愈来愈大,只能按照商品、订单、用户、店铺等业务为单位进行数据库拆分,以及按照业务为单位提供服务接口。架构

这个时候 为了完成一个简单的业务功能,好比:购买商品后扣款,有可能须要横跨多个服务,涉及用户订单、商品库存、支付等多个数据库,而这些操做又须要在同一个事务中完,这就涉及到到了分布式事务。并发

本质上来讲,分布式事务就是为了保证不一样资源服务器的数据一致性。框架

02 分布式的一致性理论异步

最先加州大学伯克利分校 Eric Brewer教授提出一个分布式系统特性的CAP理论。分布式

 

1.CAP 理论的不可能三角微服务

一致性(Consistency)

可用性(Availability)

分区容错性(Partition tolerance)

在分布式系统中,是不存在同时知足一致性 Consistency、可用性 Availability和分区容错性 Partition Tolerance三者的。

一句话总结:一致性、可用性和分区容错在分布式事务中不可兼得。

在绝大多数的场景,都须要牺牲强一致性来换取系统的高可用性,系统每每只须要保证最终一致性。

这也是是后来发展出的BASE理论的基础。

2.BASE 理论

Basically Available(基本可用)

Soft state(柔软状态)

Eventually consistent(最终一致性)三个短语的简写。

BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即便没法作到强一致性(Strong consistency),但每一个应用均可以根据自身的业务特色,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

03 分布式事务的解决方案

1.基于XA协议的两阶段提交 2PC(2-phase commit protocol)

XA是一个分布式事务协议,XA中大体分为两部分:事务管理器和本地资源管理器,其中本地资源管理器每每由数据库实现,而事务管理器做为全局的调度者,负责各个本地资源的提交和回滚。

大体的流程:

第一阶段是表决阶段,全部参与者都将本事务可否成功的信息反馈发给协调者;

第二阶段是执行阶段,协调者根据全部参与者的反馈,通知全部参与者,步调一致地在全部分支上提交或者回滚。

优缺点

尽可能保证了数据的强一致,实现成本较低,在各大主流数据库都有本身实现,存在单点故障问题、性能问题、跨数据库问题。

2.事务补偿TCC模式

TCC方案实际上是两阶段提交的一种改进,将整个业务逻辑的每一个分支显式的分红了Try、Confirm、Cancel三个操做。

Try部分完成业务的准备工做,confirm部分完成业务的提交,cancel部分完成事务的回滚,基本原理以下图所示:

优缺点

对代码有侵入性,下降了锁冲突,提升了吞吐量,缺点是有时候并无那么好实现。

案例

蚂蚁金服的DTS(prepare、commit、rollback)

3.消息队列最终一致性方案

经过异步解耦的方式,经过第三方中间件。

案例

RocketMQ RabbitMQ等都可实现,RocketMQ 还有专门的事务型消息,新版的kafka也有。

本文介绍了分布式事务的一些特性和解决方案,分布式事务最初是为解决单服务多数据库资源的场景而诞生的。随着技术的发展,特别是 SOA 分布式应用架构,以及微服务时代的到来,服务变成了基本业务单元。

分布式系统中事务更多的是对CAP权衡,在实际应用中,会根据业务要求、开发人员状况以及所用框架不一样进行调整。

若是以为有用,请点赞支持下,送BAT架构专题合集500+,私信回复【架构】便可领取。

我是Mike 陈睿,专一分享:BAT架构技术干货连载+BAT面试真题及答案等纯技术干货。

------end------

推荐阅读:

Redis缓存和MySQL数据一致性方案详解 

如何解决Redis雪崩、穿透、并发等5大难题   

Redis并发竞争key的解决方案详解 

Redis为何是单线程、及高并发快的3大缘由详解

分布式锁的由来、特色及Redis分布式锁的实现

如何从0到1设计一个类Dubbo的RPC框架 

如何从0到1设计一个MQ消息队列

MQ消息队列的12点核心原理总结     

详解RPC远程调用和消息队列MQ的区别    

阿里45K高级Java岗,必备技能清单

相关文章
相关标签/搜索