【愚公系列】2022年04月 .NET架构班 040-分布式中间件 ShardingSphere-Proxy之分布式事务
【摘要】 前言随着互联网的快速发展,软件系统由原来的单体应用转变为分布式应用。 分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。本地事务begin transaction; //1.本地数据库操作:张三减少金额 //2.本地数据库操作:李四增加金额commit tran...
前言
随着互联网的快速发展,软件系统由原来的单体应用转变为分布式应用。 分布式系统会把一个应用系统拆分为可独立部署的多个服务,因此需要服务与服务之间远程协作才能完成事务操作,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务。
本地事务
begin transaction;
//1.本地数据库操作:张三减少金额
//2.本地数据库操作:李四增加金额
commit transation;
分布式事务
begin transaction;
//1.本地数据库操作:张三减少金额
//2.远程调用:让李四增加金额
commit transation;
当远程调用让李四增加金额成功了,由于网络问题远程调用并没有返回,此时本地事务提交失败就回滚了张三减少金额的操作,此时张三和李四的数据就不一致了。因此在分布式架构的基础上,传统数据库事务就无法使用了,张三和李四的账户不在一个数据库中甚至不在一个应用系统里,实现转账事务需要通过远程调用,由于网络问题就会导致分布式事务问题。
一、ShardingSphere-Proxy之分布式事务
商品表product,如果在3307添加商品数据,数据会添加到product_0和product_1中,这个时候,一个一个添加肯定是没有问题的,但是如果批量添加数据到product_0和product_1,如果product_0成功了,product_1失败了,会导致数据不一致。如何解决数据一致性问题
方案:使用分布式事务
1.server.yaml配置分布式事务
rules:
- !AUTHORITY
users:
- root@%:root
- sharding@:sharding
provider:
type: ALL_PRIVILEGES_PERMITTED
- !TRANSACTION
defaultType: XA
providerType: Atomikos
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)