服務雪崩
高併發情況下,大量的請求堆積在一個服務上,超過服務線程池(默認爲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 "馬哥在忙,等一下";
}