- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分布式事物管理以及解决方案
1、什么是分布式事务
分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别
位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的
操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布
式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为
了保证不同数据库的数据一致性。
2、分布式事务的产生的原因
2.1、数据库分库分表
当数据库单表一年产生的数据超过1000W,那么就要考虑分库分表,具体分库分表的
原理在此不做解释,以后有空详细说,简单的说就是原来的一个数据库变成了多个数据库。
这时候,如果一个操作既访问01库,又访问02库,而且要保证数据的一致性,那么就要
用到分布式事务。
2.2、应用SOA化
所谓的SOA化,就是业务的服务化。比如原来单机支撑了整个电商网站,现在对整个
网站进行拆解,分离出了订单中心、用户中心、库存中心。对于订单中心,有专门的数据库
存储订单信息,用户中心也有专门的数据库存储用户信息,库存中心也会有专门的数据库存
储库存信息。这时候如果要同时对订单和库存进行操作,那么就会涉及到订单数据库和库存
数据库,为了保证数据一致性,就需要用到分布式事务。
以上两种情况表象不同,但是本质相同,都是因为要操作的数据库变多了!
3、事务的ACID特性
3.1、原子性(A)
所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有
中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行
过一样。
3.2、一致性(C)
事务的执行必须保证系统的一致性,就拿转账为例,A有 500元,B有 300元,如果
在一个事务里A成功转给B50元,那么不管并发多少,不管发生什么,只要事务执行成功
了,那么最后A账户一定是450元,B账户一定是350元。
3.3、隔离性(I)
所谓的隔离性就是说,事务与事务之间不会互相影响,一个事务的中间状态不会被其他
事务感知。
3.4、持久性(D)
所谓的持久性,就是说一单事务完成了,那么事务对数据所做的变更就完全保存在了数
据库中,即使发生停电,系统宕机也是如此。
4、分布式事务的应用场景
4.1、支付
最经典的场景就是支付了,一笔支付,是对买家账户进行扣款,同时对卖家账户进行加
钱,这些操作必须在一个事务里执行,要么全部成功,要么全部失败。而对于买家账户属于
买家中心,对应的是买家数据库,而卖家账户属于卖家中心,对应的是卖家数据库,对不同
数据库的操作必然需要引入分布式事务。
4.2、在线下单
买家在电商平台下单,往往会涉及到两个动作,一个是扣库存,第二个是更新订单状态,
库存和订单一般属于不同的数据库,需要使用分布式事务保证数据一致性。
5、常见的分布式事务解决方案
5.1、基于XA协议的两阶段提交
XA 是一个分布式事务协议,由Tuxedo提出。XA 中大致分为两部分:事务管理器和
本地资源管理器。其中本地资源管理器往往由数据库实现,比如Oracle、DB2这些商业数
据库都实现了XA接口,而事务管理器作为全局的调度者,负责各个本地资源的提交和回滚。
XA实现分布式事务的原理如下:
总的来说,XA协议比较简单,而且一旦商业数据库实现了XA协议,使用分布式事务
的成本也比较低。但是,XA也有致命的缺点,那就是性能不理想,特别是在交易下单链路,
往往并发量很高,XA无法满足高并发场景。XA目前在商业数据库支持的比较理想,在mysql
数据库中支持的不太理想,mysql的XA 实现,没有记录 prepare阶段日志,主备切换回
导致主库与备库数据不一致。许多nosql也没有支持XA ,这让XA的应用场景变得非常狭
隘。
5.2、消息事务+最终一致性
所谓的消息事务就是基于消息中间件的两阶段提交,本质上是对消息中间件的一种特殊
利用,它是将本地事务和发消息放在了一个分布式事务里,保证要么本地操作成功成功并且
对外发消息成功,要么两者都失败,开源的RocketMQ就支持这一特性,具体原理如下:
1、A系统向消息中间件发送一条预备消息
2、消息中间件保存预备消息并返回成功
3、A执行本地事务
4、A发送提交消息给消息中间件
通过以上4步完成了一个消
原创力文档


文档评论(0)