一篇文章彻底搞懂“分布式事务”
分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免。
本篇文章将通过详解分布式事务的一致性,以及分布式事务实战解决方案,帮助大家搞懂分布式事务,推荐收藏。
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------

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Real World CTF x 阿里云:全球首创真实环境 500万等你来战
2019 年 12 月 7-8 日,长亭科技举办的 2019 Real World CTF 国际网络安全大赛将在北京隆重开启,Real World CTF x 阿里云首次联合举办云安全挑战赛。 阿里云安全挑战赛 是全球范围内首次也是唯一 将公有云真实售卖级产品 融入赛题设计的赛事 总奖金池高达 500 万 单项奖金 60 万破历史记录 为了此次比赛,阿里云首次开放真实的线上运行环境,并挑选 ECS(云服务器)、RDS for MySQL(数据库)、MaxCompute(大数据计算服务)三款云上核心产品接受选手挑战。阿里云安全除了保障云平台安全,提供用户丰富的安全产品和解决方案之外,同样也肩负着云产品安全的重任,内部建立 SPLC 将安全植入在整个产品生命周期中,这次的比赛将进一步检验云产品的安全性,借助更广泛的力量快速提升安全水平,为用户提供更
- 下一篇
最强整理:一线互联网移动架构师筑基必备技能之Java篇
移动架构师筑基必备技能 一、深入Java泛型 泛型的作用与定义通配符与嵌套泛型上下边界RxJava中泛型的使用分析 二、注解深入浅出 2.1 自定义注解 自定义注解与元注解注解参数与默认值 2.2 注解的使用 APT,编译时注解处理器插桩,编译后处理筛选反射,运行时动态获取注解信息 2.3 Retrofit中的注解 三、并发编程 3.1 线程共享和协作 CPU核心数,线程数,时间片轮转机制解读synchronized、Lock、volatile、ThreadLocal如何实现线程共享Wait,Notify/NotifyAll,Join方法如何实现线程间协作 3.2 站在巨人肩上操作CAS CAS的原理CAS带来的ABA问题之原子操作类的正确使用实战 3.3 仅会用线程池是不够的 Callbale、Future和FutureTask源码解读线程池底层实现分析线程池排队机制手写线程池实战Executor框架解读实战 3.4 Android AsyncTask原理解析 四、数据传输与序列化 4.1 Serializable原理 4.2 Parcelable接口原理解析 4.3 Json 五、...
相关文章
文章评论
共有0条评论来说两句吧...