欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

浅谈:分布式事务

程序员文章站 2022-04-29 13:54:13
在如今的分布式盛行的年代,分布式事务永远都是绕不开的一个话题,今天就谈谈分布式事务相关的一致性与实战解决方案。 一、为什么需要分布式事务 由于近十年互联网的发展非常迅速,很多网站的访问量越来越大,集中式环境已经不能满足业务的需要了,只能按照业务为单位进行数据拆分(包含:垂直拆分与水平拆分),以及按照 ......

在如今的分布式盛行的年代,分布式事务永远都是绕不开的一个话题,今天就谈谈分布式事务相关的一致性与实战解决方案。

一、为什么需要分布式事务

由于近十年互联网的发展非常迅速,很多网站的访问量越来越大,集中式环境已经不能满足业务的需要了,只能按照业务为单位进行数据拆分(包含:垂直拆分与水平拆分),以及按照业务为单位提供服务,从早期的集中式转变为面向服务加构的分布式应用环境。

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

浅谈:分布式事务

 

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

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

二、分布式的一致性理论

最早加州大学伯克利分校eric brewer教授提出一个分布式系统特性的cap理论。

1、cap理论的不可能三角

浅谈:分布式事务

 

(1)一致性(consistency)

(2)可用性(availability)

(3)分区容错性(partition tolerance)

在分布式系统中,是不存在同时满足一致性consistency、可用性availability和分区容错性partition tolerance三者的。

一句话总结:一致性、可用性和分区容错再分布式事务中不可兼得。再绝大多数的场景,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证最终一致性。这也是后来发展出来的base理论的基础

2、base理论

浅谈:分布式事务

 

(1)basically available(基本可用)

(2)soft state(柔软状态)

(3)eventually consistent(最终一致性)

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

三、分布式事务的解决方案

 1、基于xa协议的两阶段提交2pc(2-phase commit)

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

浅谈:分布式事务

 

 大致的流程:

(1)第一阶段是表决阶段,所有参与者都将本事务能否成功的信息反馈给协调者;

(2)第二阶段是执行阶段,协调者根据所有参与者的反馈,通知所有参与者,步调一致地再所有分支上提交或者回滚。

优缺点:

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

2、事务补偿tcc模式

tcc方案其实是两阶段提交的一种改进,将整个业务逻辑的每个分支显式的分成了try、confirm、cancel三个操作。

 浅谈:分布式事务

 

 优缺点:

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

案例:

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

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

通过异步解耦的方式,通过第三种中间件

浅谈:分布式事务

 

 案例:

rocketmq、babbitmq等均可实现,rocketmq还有专门的事务型消息,新版的kafka也有。

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

好了,今天的知识就先分享到这里了。