Java微服务项目-黑马商城学习打卡第5天

微服务保护和分布式事务

一.雪崩问题

微服务调用链路中的某个服务故障,引起整个链路中所有的微服务都不可用,这就是雪崩。
雪崩问题

1.服务保护方案 - 请求限流

请求限流:限制访问微服务的请求的并发量,避免服务因为流量激增出现故障。

2.服务保护方案 - 线程隔离

线程隔离:也叫做舱壁模式,模拟船舱隔板的防水原理。通过限定每个业务能使用的线程数量而将故障办业务隔离,避免故障扩散。

3.服务保护方案 - 服务熔断

服务熔断:由断路器统计请求的异常比例或慢调用比例,如果超出阈值则会熔断该业务,则拦截该接口的请求。熔断期间,所有请求快速失败,全部走fallback逻辑
解决雪崩服务保护技术(出现类似下面“grpc.GrpcClient”错误,发现浏览器也无法访问nacos,先停止nacos服务,在启动就好了,直接试了restart好像不太行)

 ERROR 64524 --- [           main] c.a.n.c.remote.client.grpc.GrpcClient    : Server check fail, please check server 192.168.228.136 ,port 9848 is available , error ={}

4.服务保护技术Sentinel

阿里巴巴开源的一款服务保护框架
(1)按照文档安装sentinel
(2)引入依赖;配置控制台修改yaml文件;
(3)访问cart-service的任意端点,就可以看到簇点链路的监控信息
簇点链路
打开Sentinel的请求方式前缀,把请求方式 + 请求路径作为簇点资源名设置簇点链路

5.请求限流

在簇点链路后面点击流控按钮,即可对其做限流配置,可以利用Jemeter做限流测试,观察结果

6.线程隔离

也是对簇点资源后面的流控按钮操作,不过和限流控制的QPS数不同,此时配置的是并发线程数

7.服务熔断

  • 编写服务降级逻辑:就是服务调用失败后的处理逻辑,根据业务场景,可以抛出异常,也可以返回友好提示或默认数据
  • 异常统计和熔断:统计服务提供方的异常比例,当比例过高表明该接口会影响到其它服务,应该拒绝调用该接口,而是直接走降级逻辑。
    Fallback步骤一步骤二和三(这里注意文档定义的是ItemClientFallback)
    状态
    设置服务熔断

二、分布式事务

分布式事务可能会导致无法遵循ACID的事务特性
分布式事务解决思路:解决分布式事务,各个子事物之间必须能够感知到彼此的事物状态,才能保证状态一致
在这里插入图片描述seata架构

1.部署TC服务

1.1 准备数据库表
1.2 准备配置文件:课前资料准备了一个seata目录,其中包含了seata运行时所需要的配置文件
1.3 docker部署

2.微服务集成Seata

2.1 引入依赖
2.2 改造配置
jicheng
改造配置后重启服务报错如下所示:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
17:48:42:864 ERROR 81148 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'globalTransactionScanner' defined in class path resource [io/seata/spring/boot/autoconfigure/SeataAutoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [io.seata.spring.annotation.GlobalTransactionScanner]: Factory method 'globalTransactionScanner' threw exception; nested exception is java.lang.ExceptionInInitializerError
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:658) ~[spring-beans-5.3.27.jar:5.3.27]

搞了很久没搞出来,感谢评论区大佬和文档注释大佬,下面是解决方法:
以cart-service为例:
右键CartApplication,然后Edit Configuration,然后点击Modify options,然后点击Add VM options,然后输入:

--add-opens=java.base/java.lang=ALL-UNNAMED
其他服务同理(我一开始直接在Springboot添加的好像没起作用,不行的试试一个一个服务搞)

2.3 添加数据库表
seata的客户端在解决分布式事务的时候需要记录一些中间数据,保存在数据库中。因此我们要先准备一个这样的表

3. XA模

XA模式优缺点实现XA对于配置文件seata的配置可以直接去nacos里面修改
测试的时候如果在cart-service没有看到回滚的输出记录,可以去seata日志看,输入docker logs -f seata查看回滚日志记录
回滚日志记录

4.AT模式

AT模式区别测试AT:
把seata的nacos的配置更改为AT模式(默认是AT),重启服务
和上面一样的测试步骤也能看到下单失败和回滚的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值