在现在的分布式盛行的年代,分布式事务永远都是绕不开的一个话题,今天就谈谈分布式事务相关的一致性与实战解决方案。数据库
1、为何须要分布式事务服务器
因为近十年互联网的发展很是迅速,不少网站的访问量愈来愈大,集中式环境已经不能知足业务的须要了,只能按照业务为单位进行数据拆分(包含:垂直拆分与水平拆分),以及按照业务为单位提供服务,从早期的集中式转变为面向服务加构的分布式应用环境。框架
举一个经典的例子,阿里的淘宝网站随着访问量愈来愈大,只能按照商品、订单、用户、店铺等业务为单位进行数据库拆分,以及按照业务为单位提供服务接口。异步
这个时候,为了完成一个简单的业务功能,好比:购买商品后扣款,有可能须要横跨多个服务,涉及用户订单、商品库存、支付等多个数据库,而这些操做又须要再同一个事务中完成,这就涉及到了分布式事务。分布式
本质上来讲,分布式事务就是为了保证不一样资源服务器的数据一致性。性能
2、分布式的一致性理论网站
最先加州大学伯克利分校Eric Brewer教授提出一个分布式系统特性的CAP理论。spa
一、CAP理论的不可能三角中间件
(1)一致性(Consistency)blog
(2)可用性(Availability)
(3)分区容错性(Partition tolerance)
在分布式系统中,是不存在同时知足一致性Consistency、可用性Availability和分区容错性Partition Tolerance三者的。
一句话总结:一致性、可用性和分区容错再分布式事务中不可兼得。再绝大多数的场景,都须要牺牲强一致性来换取系统的高可用性,系统每每只须要保证最终一致性。这也是后来发展出来的BASE理论的基础
二、BASE理论
(1)Basically Available(基本可用)
(2)Soft State(柔软状态)
(3)Eventually consistent(最终一致性)
BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的结论,是基于CAP定理逐步演化而来的,其核心思想是即便没法作到强一致性(Strong consistency),但每一个应用均可以根据自身的业务特色,采用适当的方式来使系统达到最终一致性(Eventual consistency)
3、分布式事务的解决方案
一、基于XA协议的两阶段提交2PC(2-phase commit)
XA是一个分布式事务协议,XA中大体分为两部分:事务管理器和本地资源管理器,其中本地资源管理器每每由数据库实现,而事务管理器做为全局的调度者,负责各个本地资源的提交和回滚。
大体的流程:
(1)第一阶段是表决阶段,全部参与者都将本事务可否成功的信息反馈给协调者;
(2)第二阶段是执行阶段,协调者根据全部参与者的反馈,通知全部参与者,步调一致地再全部分支上提交或者回滚。
优缺点:
尽可能保证了数据的强一致性,实现成本较低,在各大主流数据库都有本身的实现,存在单点故障问题、性能问题、跨数据库问题。
二、事务补偿TCC模式
TCC方案实际上是两阶段提交的一种改进,将整个业务逻辑的每一个分支显式的分红了Try、Confirm、Cancel三个操做。
优缺点:
对于代码有侵入性,下降了锁冲突,提升了吞吐量,缺点是有时候并无那么好实现。
案例:
蚂蚁金服的DTS(prepare、commit、rollback)
三、消息队列最终一致性方案
经过异步解耦的方式,经过第三种中间件
案例:
RocketMQ、BabbitMQ等都可实现,RocketMQ还有专门的事务型消息,新版的kafka也有。
总之,分布式系统中事务更多的是对CAP权衡,在实际应用中,根据业务要求、开发人员状况以及所用框架的不一样进行调整。
好了,今天的知识就先分享到这里了。