服务雪崩
高并发情况下,大量的请求堆积在一个服务上,超过服务线程池(默认为tomcat自带的线程池)处理的最大线程数,导致其他服务没有
线程进行接受请求
服务降级
对于等待线程处理的请求,返回一个友好的提示(如:当前访问人数太多,或有多少人排队等)。防止用户一直等待(调用fallBack方法)
服务熔断
对并发请求的数量设置一个阈值,超过阈值就会拒绝访问,对请求执行服务的降级。
服务隔离机制
默认情况下,只有一个线程池会维护所有的服务接口,如果大量的请求访问同一个接口,达到tomcat 线程池默认极限,可能会导致其他
服务无法访问,将高并发的接口使用额外的线程池去实现线程数量的扩容处理,接口之间的并发互不影响
服务限流
对接口访问进行限制,常用服务限流算法令牌桶、漏桶。计数器也可以进行粗暴限流实现。
Hystrix环境搭建
maven
<!-- hystrix断路器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
开启Hystrix断路器
feign:
hystrix:
enabled: true
#### hystrix禁止服务超时时间
hystrix:
command:
default:
execution:
timeout:
enabled: false
启动
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
public class OrderServiceApp{
public static void main(String[] args) {
SpringApplication.run(OrderServiceApp.class, args);
}
}
服务降级处理
@RequestMapping("/hystrix")
@HystrixCommand(fallbackMethod = "waitReq")
public String hystrix(){
System.out.println("hystrix:" + Thread.currentThread().getName());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "服务保护机制";
}
// 友好提示
public String waitReq(){
return "马哥在忙,等一下";
}
欢迎大家和帝都的雁积极互动,头脑交流会比个人埋头苦学更有效!共勉!
公众号:帝都的雁