分布式事务的全套解决方案

1.事务我们大家都知道就是一组逻辑运算 要么同时成功要么同时失败.
我们在单体项目中通过spring的@transaction 可以控制事务
呢么在分布式系统中事务是怎么控制的呢
2.分布式事务就是说2个服务的调用或者多个服务的调用,他们的操作或者说执行逻辑要么同时成功或者同时失败
在微服务分布式项目中 一个请求进来,落到一个服务上,这个服务可能需要调用多个服务来完成业务逻辑
3. 在分布式系统中,一个请求要完成一整个事情,可能一个服务完不了, 需要多个服务的共同完成.
 比方说下单请求 1.你可能要调用库存服务 减库存
			  2. 需要调用订单服务 创建订单
			  3. 调用用户服务 看有没有权限
			  4. 需要调用积分服务 去加个积分
			  5. 去调用物流服务准备发货

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

https://www.cnblogs.com/dyzcs/p/13780668.html
参考博客
2阶段提交
	分布式事务中引入一个事务协调者的角色,2阶段提交 分2个阶段
	第一个阶段叫做准备或者投票阶段
	2个服务此时只是执行了sql,但是没有做最后的commit, 也就是最终没有落库,这就是第一个阶段要做的事情,就是说我去尝试一下/update 看能否成功 如果可以成功的 我给协调者一个反馈表示成功, 如果不能的话 我也给协调者一个反馈表示不成功,

在这里插入图片描述

2阶段的第一个阶段 每个服务都向协调者反馈同意时候,也就是说2阶段第一阶段执行都没问题的话,呢么第二阶段事务协调者就会下发commit的命令,因为你刚刚执行的sql没有进行commit操作,这次给你下达指令,让你去执行commit 
A服务执行commit B 服务也去执行commit 
执行完毕之后再反馈结果

在这里插入图片描述

这样就完成事务 这就保证了 2个服务要么全部执行 要么都不执行
如果一个请求先调用了a  再调用了b 这样是无法保证要么全部执行 要么全部不执行
中间加个协调者  这样看起来可以保证2个服务的事务

如果在2阶段提交的第一个阶段 有一个服务给协调者反馈失败,或者协调者在规定时间内没有等到参与者的反馈呢么,在第二阶段就会下发rollback指令, 让服务进行回滚操作

在这里插入图片描述
在这里插入图片描述

2阶段提交协议 
2个阶段 第一先去尝试提交 让每个服务先执行一次 不进行commit操作  ,然后你们吧执行的结果反馈给协调者
协调者统一收集你们的结果之后 再决定你们每个服务是提交还是回滚
这就是2阶段提交的整体流程
2阶段提交的缺点
	第一就是单点故障,协调者挂了,服务不知道数据执行完向谁反馈,也没人来发送要么提交/回滚的指令
	第二就是阻塞资源 ,比如说a服务执行insert操作 在第一阶段反馈给协调者 成功, [此时他是不能够释放连接的 ] 第二阶段 协调者下达commit操作,如果他在第一阶段释放了数据库连接, 第二个阶段 协调者下发commit的时候还能正常提交么
第三点就是 TM 在第一阶段 2个服务都给tm 反馈ok, tm向
 serverA 发送一个指令 commit 也向serverB 发送一个指令commit
结果 serverA 收到commit 把数据改了 落库了, 发给serverB 的commit 半路上网络丢了 ,
serverB 就不知道该提交还是回滚
他就会一直等 如果等的话, 程序员发现这个服务卡在这里
重启 , 当重启完毕发现 serverA 数据改了,serverB 数据没改 
所以就会造成数据不一致,这就是2阶段的缺点

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1、课程简介Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。       在本套课程中,我们将全面的讲解Spring Cloud技术栈, 从环境的部署到技术的应用,再到项目实战,让我们不仅是学习框架技术的使用,而且可以学习到使用Spring Cloud如何解决实际的问题。Spring Cloud各个组件相互配合,合作支持了一套完整的微服务架构。- 注册中心负责服务的注册与发现,很好将各服务连接起来- 断路器负责监控服务之间的调用情况,连续多次失败进行熔断保护。- API网关负责转发所有对外的请求和服务- 配置中心提供了统一的配置信息管理服务,可以实时的通知各个服务获取最新的配置信息- 链路追踪技术可以将所有的请求数据记录下来,方便我们进行后续分析- 各个组件又提供了功能完善的dashboard监控平台,可以方便的监控各组件的运行状况2、适应人群有一定的Java基础,并且要有一定的web开发基础。3、课程亮点       系统的学习Spring Cloud技术栈,由浅入深的讲解微服务技术。涵盖了基础知识,原理剖析,组件使用,源码分析,优劣分析,替换方案等,以案例的形式讲解微服务中的种种问题和解决方案l  微服务的基础知识n  软件架构的发展史n  微服务的核心知识(CAP,RPC等)l  注册中心n  Eureka搭建配置服务注册n  Eureka服务端高可用集群n  Eureka的原理和源码导读n  Eureka替换方案Consuln  Consul下载安装&服务注册&高可用l  服务发现与服务调用n  Ribbon负载均衡基本使用&源码分析n  Feign的使用与源码分析n  Hystrix熔断(雪崩效应,Hystrix使用与原理分析)n  Hystrix替换方案Sentinell  微服务网关n  Zuul网关使用&原理分析&源码分析n  Zuul 1.x 版本的不足与替换方案n  SpringCloud Gateway深入剖析l  链路追踪n  链路追踪的基础知识n  Sleuth的介绍与使用n  Sleuth与Zipkin的整合开发l  配置中心n  SpringClond Config与bus 开发配置中心n  开源配置中心Apollo4、主讲内容章节一:1.     微服务基础知识2.     SpringCloud概述3.     服务注册中心Eureka4.     Eureka的替换方案Consul章节二:1.     Ribbon实现客户端负载均衡2.     基于Feign的微服务调用3.     微服务熔断技术Hystrix4.     Hystrix的替换方案Sentinel章节三:1.     微服务网关Zuul的基本使用2.     Zuul1.x 版本的不足和替换方案3.     深入SpringCloud Gateway4.     链路追踪Sleuth与Zipkin章节四:1.     SpringCloud Config的使用2.     SpringCloud Config结合SpringCloud Bus完成动态配置更新3.     开源配置中心Apollo

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值