原文视频链接:https://www.bilibili.com/video/BV18E411x7eT?from=search&seid=11303564036825263144
springCloud中文文档:https://www.bookstack.cn/read/spring-cloud-docs/docs-index.md
springCloud中文网:https://www.springcloud.cc
1,Hystrix服务降级
1.1,hystrix简介
1.2,hystrix作用
-
服务降级
比如当某个服务繁忙,不能让客户端的请求一直等待,应该立刻返回给客户端一个备选方案 -
服务熔断
当某个服务出现问题,卡死了,不能让用户一直等待,需要关闭所有对此服务的访问,然后调用服务降级 -
服务限流
限流,比如秒杀场景,不能访问用户瞬间都访问服务器,限制一次只可以有多少请求
1.3,使用hystrix,服务降级
一般服务降级,都是放在客户端
1.3.1,pom文件
feign依赖自带了hystrix
1.3.2,配置文件
feign:
hystrix:
enabled: true
1.3.3,主启动类添加直接,启用hystrix
1.3.4,与feign结合
它的运行逻辑是:
当请求过来,首先还是通过Feign远程调用pay模块对应的方法
但是如果pay模块报错,调用失败,那么就会调用PayMentFalbackService类的
当前同名的方法,作为降级方法
第一步,Payservice接口是远程调用pay模块的,我们这里创建一个类实现service接口,在实现类中统一处理异常
第二步,修改配置文件:添加:
feign:
hystrix:
enabled: true
第三步,让PayService的实现类生效:
1.4,使用服务熔断
断路器的打开和关闭,是按照一下5步决定的
1,并发此时是否达到我们指定的阈值
2,错误百分比,比如我们配置了60%,那么如果并发请求中,10次有6次是失败的,就开启断路器
3,上面的条件符合,断路器改变状态为open(开启)
4,这个服务的断路器开启,所有请求无法访问
5,在我们的时间窗口期,期间,尝试让一些请求通过(半开状态),如果请求还是失败,证明断路器还是开启状态,服务没有恢复
如果请求成功了,证明服务已经恢复,断路器状态变为close关闭状态
1.4.1,Hystrix所有可配置的属性
以后需要什么属性,查看这个类即可(HystrixCommandProperties.class)
1.4.2,总结
当断路器开启后:
其他参数:
熔断整体流程:
1请求进来,首先查询缓存,如果缓存有,直接返回
如果缓存没有,--->2
2,查看断路器是否开启,如果开启的,Hystrix直接将请求转发到降级返回,然后返回
如果断路器是关闭的,
判断线程池等资源是否已经满了,如果已经满了
也会走降级方法
如果资源没有满,判断我们使用的什么类型的Hystrix,决定调用构造方法还是run方法
然后处理请求
然后Hystrix将本次请求的结果信息汇报给断路器,因为断路器此时可能是开启的
(因为断路器开启也是可以接收请求的)
断路器收到信息,判断是否符合开启或关闭断路器的条件,
如果本次请求处理失败,又会进入降级方法
如果处理成功,判断处理是否超时,如果超时了,也进入降级方法
最后,没有超时,则本次请求处理成功,将结果返回给controller
1.5,Hystrix服务监控
1.5.1,HystrixDashboard介绍
1.5.2,如何使用HystrixDashboard(服务端):
pom文件
配置文件
主启动类
1.5.3,如何使用HystrixDashboard(客户端):
pom文件
客户端主启动类添加
1.5.4,监控web界面分析