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

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


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也有。

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



money.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/480007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++很难学?这个ACM金牌大佬可不这么认为!

C作为一门底层可操作性很强的语言,广泛应用于游戏开发、工业和追求性能、速度的应用。比如腾讯,无论游戏,还是微信,整个鹅厂后台几乎都是 C 开发,对 C 开发者的需求非常大。但问题是C入门和精通都比较困难,…

数据结构--位图 BitMap

文章目录1. 位图2. 位图代码3. 布隆过滤器 Bloom Filter4. 总结1. 位图 我们有1千万个整数,整数的范围在1到1亿之间。如何快速查找某个整数是否在这1千万个整数中呢? 当然,这个问题可以用散列表来解决。可以使用一种特殊的散列表&#xff0…

领域应用 | 企业效益最大化的秘密:知识图谱

本文转载自公众号:TigerGraph。凡是有关系的地方都可以用知识图谱。知识图谱知识图谱是用节点和关系所组成的图谱,为真实世界的各个场景直观地建模,运用“图”这种基础性、通用性的“语言”,“高保真”地表达这个多姿多彩世界的各…

国家一级职业资格证书 计算机类有哪些

当前bai,计算机证书考试多种du多样,水平参差不齐。比较正规且得到社会zhi认可的dao计算机证书考试有以下几种:全国计算机应用软件人员水平考试、计算机等级考试、计算机及信息高新技术考试、计算机应用水平测试和各种国外著名大计算机公司组织…

阿里P8架构师谈:分布式系统全局唯一ID简介、特点、5种生成方式

什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。 如在金融、电商、支付、等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数据库的自增ID显然不能满足…

朴素贝叶斯算法--过滤垃圾短信

文章目录1. 基于黑名单过滤2. 基于规则过滤3. 基于概率统计过滤4. 总结上一节我们讲到,如何用位图、布隆过滤器,来 过滤重复数据。今天,我们再讲一个跟过滤相关的问题,如何过滤垃圾短信?1. 基于黑名单过滤 可以维护一…

2020深度文本匹配最新进展:精度、速度我都要!

文 | QvQ编 | 兔子酱在过去的几年里,信息检索(IR)领域见证了一系列神经排序模型的引入,这些模型多是基于表示或基于交互的,亦或二者的融合。然鹅,模型虽非常有效,尤其是基于 PLMs 的排序模型更是增加了几个数量级的计算…

开源开放 | Gowild 狗尾草“七律”知识图谱进入 OpenKG,开放 8000 万中文百科知识三元组数据...

项目网站: https://ai.gowild.cn/kgOpenKG发布地址: http://openkg.cn/dataset/7lore狗尾草科技:https://www.gowild.cn1.七律开放知识图谱简介作为人工智能技术的重要分支,知识图谱自2012年被提出并成功应用后,就获得了迅速发展,…

向量空间 Vector Space -- 推荐系统

文章目录1. 算法解析2. 基于相似用户做推荐3. 基于相似歌曲做推荐4. 总结音乐App的功能越来越强大,不仅可以自己选歌听,还可以根据你听歌的口味偏好, 给你推荐可能会喜爱的音乐,有时候,推荐的还非常适合你的口味。1. 算…

阿里P8架构师谈:分布式事务的解决方案,以及原理、总结

分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务各方面与大家进行介绍。 事务 1.1 什么是事务 数据库…

美团NLP中心算法实习生内推啦!

星标/置顶小屋,带你解锁最萌最前沿的NLP、搜索与推荐技术部门介绍搜索与NLP部是美团人工智能技术研发的核心团队,致力于打造高性能、高扩展的搜索引擎和领先的自然语言处理核心技术和服务能力,依托搜索排序,NLP(自然语…

B+树 -- MySQL数据库索引

文章目录1. 定义清楚问题2. 尝试学过的数据结构解决问题3. 改造二叉查找树来解决问题4. 总结为了加速数据库中数据的查找速度,我们常对表中数据创建索引。数据库索引是如何实现的呢?底层使用的是什么数据结构和算法呢? 1. 定义清楚问题 如何…

创建python的虚拟环境(图文教程),并使用。

创建python的虚拟环境 第一步:打开anaconda命令行,即打开anaconda prompt。 base的主环境切换到虚拟环境nlp (base) C:\Users\user>conda env list 查看环境列表 (base) C:\Users\user>conda create -n nlp python 创建一个虚拟环境&#xff0…

领域应用 | 到底什么时候使用图数据库?

本文转载自公众号:TigerGraph。图数据库作为近两年快速发展的新型数据受到了市场极大的关注。但对于很多行业而言,图数据库还是一个很新的概念,企业管理人员和技术人员面临着同样的问题:企业的业务适不适合使用图?到底…

常用的后端性能优化六种方式:缓存化+服务化+异步化等

后端优化的六种方法: 1.硬件升级 硬件问题对性能的影响不容忽视。 举一个例子:一个DB集群经常有慢SQL报警,业务排查下来发现SQL都很简单,该做的索引优化也都做了。后来DBA同学帮忙定位到问题是硬件过旧导致,将机械硬…

有钱可以多任性?OpenAI提出人肉模型训练,文本摘要全面超越人类表现!

文 | 小轶背景三个多月前,OpenAI的GPT-3在NLP界掀起轩然大波。就在上周,视金钱如粪土的OpenAI团队又在文本摘要方面推出了最新力作,全方位超越人类表现。其亮点在于:以人类偏好替代自动化评测方法(如ROUGE、BLUE&#…

数据挖掘第一次作业

我先大概写了写,还有一些读过的论文没有往上放,一些论文之间的联系线条没有搞出来。 就先这样吧!有空再搞,我现在想去玩板子啦!

A*搜索算法--游戏寻路

文章目录1. 算法解析2. 总结仙剑奇侠传这类MMRPG游戏中,有人物角色 自动寻路功能。当人物处于游戏地图中某位置时,点击另一个相对较远的位置,人物就会自动地绕过障碍物走过去。这个功能是怎么实现的呢?1. 算法解析 这是一个非常典…

阿里P8架构师谈:应用后端+移动端的性能优化指标,以及性能优化方法

性能优化专题 阿里P8架构师谈:MySQL数据库的索引原理、与慢SQL优化的5大原则 阿里P8架构师谈:Web前端、应用服务器、数据库SQL等性能优化总结 大型网站Web前端优化最佳实践,以及最全优化工具集锦 阿里P8架构师谈:多线程、架构、…

无主题

厦门月亮少 20191003 之前突然遇到个bug,解决好久无果,开始干点别的事情,大约四天后的今天,我打开程序想解决一下,然后,调试半天无果,妈妈突然微信和我聊天了,聊完以后往终端一瞥&a…