一篇文章彻底搞懂“分布式事务”

简介: 分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免。

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

本篇文章将通过详解分布式事务的一致性,以及分布式事务实战解决方案,帮助大家搞懂分布式事务,推荐收藏。

01 为什么需要分布式事务

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

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

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

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

02 分布式的一致性理论

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

1.CAP 理论的不可能三角

2

一致性(Consistency)

可用性(Availability)

分区容错性(Partition tolerance)

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

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

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

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

2.BASE 理论

3

Basically Available(基本可用)

Soft state(柔软状态)

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

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

03 分布式事务的解决方案

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

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

大致的流程:

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

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

优缺点

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

2.事务补偿TCC模式

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

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

优缺点

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

案例

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

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

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

案例

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

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

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

如果觉得有用,请点赞支持下,送BAT架构专题合集500+,私信回复【架构】即可领取。
_jpeg

我是陈睿Mike,专注分享:BAT架构技术干货连载+BAT面试真题及答案等纯技术干货,更多干货分享,前往我的博客查看。

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

相关文章
|
7月前
|
存储 关系型数据库 MySQL
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
676 0
|
6月前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
248 0
|
4月前
|
NoSQL Java Redis
Redis字符串数据类型之INCR命令,通常用于统计网站访问量,文章访问量,实现分布式锁
这篇文章详细解释了Redis的INCR命令,它用于将键的值增加1,通常用于统计网站访问量、文章访问量,以及实现分布式锁,同时提供了Java代码示例和分布式锁的实现思路。
155 0
|
7月前
|
安全 区块链 UED
带你读《自主管理身份:分布式数字身份和可验证凭证》精品文章合集
带你读《自主管理身份:分布式数字身份和可验证凭证》精品文章合集
|
7月前
|
存储 分布式计算 负载均衡
干翻Hadoop系列文章【01】:Hadoop前瞻之分布式知识
干翻Hadoop系列文章【01】:Hadoop前瞻之分布式知识
|
存储 消息中间件 Java
【Spring Cloud】新闻头条微服务项目:分布式文件系统MinIO实现文章页面存取
主要介绍了MinIO的功能特点以及为什么要用MinIO,并且还介绍了如何封装MinIO为工具快速进行使用
448 0
【Spring Cloud】新闻头条微服务项目:分布式文件系统MinIO实现文章页面存取
|
资源调度 分布式计算 自然语言处理
EDAS之分布式任务调度SchedulerX系列文章
分布式任务调度SchedulerX2.0文章列表总览
603 1
|
消息中间件 运维 Cloud Native
分布式架构设计与技术分析 | 开发者社区精选文章合集(三十)
系统学习分布式架构设计对于技术人的成长非常关键,对于云原生开发者而言如何设计出符合云原生设计哲学的应用往往离不开分布式系统知识与方法论的运用。如何设计出高弹性、可配置、可分布、高性能、高容错、更安全、更韧性、快交付的原生应用往往是衡量开发者水准的重要参考。
分布式架构设计与技术分析 | 开发者社区精选文章合集(三十)
学习分布式不会BASE理论?看这篇文章保证能理解
分布式系统中除了CAP理论,还有一个不得不说的BASE理论,这不仅是面试中常问的一个知识点,也是在学习分布式系统时候一个绕不过去的基础。
119 0
|
NoSQL 算法 安全
一篇文章带你解读Redis分布式锁的发展史和正确实现方式
一篇文章带你解读Redis分布式锁的发展史和正确实现方式