前言
最近因为流量的激增给数据库跟redis 造成了一些压力,mysql、redis也偶尔出现慢查询,服务出了假死,大量线程处于Waiting状态,都在等待某个方法执行完成。
分析原因
- mysql性能出现了瓶颈
- 请求第三方的网络有延迟,响应很慢,拖垮了服务
解决方案 使用Hystrix降级
服务降级简单就是服务A(也可以是方法)调用(本地调用或者远程调用)服务B,B发生了异常,或者超时严重的时候,大量请求进来就会导致服务A假死 ,系统来不及处理了,如果服务B对于A来说 是可以失败的 。比如商品信息的时候商品的标签服务队购买下单是不受影响的。我们就可以在标签服务异常或者超时的时候 不设置标签的信息 。从而保护主要业务的正常流程。
第一步在POM文件中引入Hystrix依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
第二步使用@EnableHystrix 注解开启降级
@EnableHystrix
@SpringBootApplication
public class Application{
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
第三步在被调用方法上添加注解
@HystrixCommand(commandKey = "processVideoDataCore",
commandProperties = {
@HystrixProperty(name = "execution.timeout.enabled", value = "true"),
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1500"),
},
fallbackMethod = "fullBackProcessVideoDataCore"
)
第四步实现异常回调方法,要求回调方法的传参数跟被调用的方法一直名称为注解 fallbackMethod = “fullBackProcessVideoDataCore” 属性所制定的