【學習背景】
隔了很長一段時間,沒有更新Spring Cloud系列博客了,最近一直在看《重新定義Spring Cloud實戰》一書,發現書中寫了一些深層次的東西,對於之前自己有學習的一些組件,如Eureka、Feign、Ribbon等,在看書的過程中,又有了很多新的收穫。所以,還是想繼續把其他的一些組件學習下,本篇博客學習的組件是Hystrix。
【學習內容】
一. 什麼是Hystrix?
Hystrix是由Netflix開源的一個針對分佈式系統容錯處理的開源組件,旨在隔離遠程系統、服務和第三方庫,阻止級聯故障,在複雜的分佈式系統中實現恢復能力。
二. Hystrix解決哪些問題?
在說明Hystrix可以解決哪些問題之前,先回想一下什麼是服務雪崩效應?舉個簡單的例子,在某系統上線初期,可能沒有很大的用戶量,在一段時間後,客戶量增加,高併發情況下,系統無法訪問,所有服務癱瘓不可用。
爲了避免上述服務雪崩效應的發生,Spring Cloud體系中提供了Hystrix這樣一個組件,支持採用斷路器、服務降級、服務熔斷、服務隔離等方式,保證服務可用。
- 服務降級:在高併發情況下,防止用戶一直等待,使用服務降級方式,即返回一個友好提示給客戶端,不會去處理請求,調用fallback本地方法,目的是爲了用戶體驗。
- 服務熔斷:目的是爲了保護服務,在高併發情況下,如果請求達到了一定極限(可以自己設置閾值),如果流量超出了自己設置的閾值,自動開啓服務保護功能,使用服務降級方式返回一個友好的提示。
- 服務隔離:線程池隔離。每個服務接口都有自己獨立的線程池,每個線程池互不影響。缺點是CPU佔用率高,所以不是所有的接口都需要去採用線程池隔離,關鍵核心接口採用即可。
三. Hystrix使用方法
- 在服務中添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
- 在啓動類上添加啓用斷路器模式
@SpringBootApplication
@EnableHystrix
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
- 在接口方法上添加@HystrixCommand註解和降級fallback
//默認開啓了服務隔離、熔斷、降級
@HystrixCommand(fallbackMethod="defaultUser")
public String getUser(String username) throws Exception {
if(username.equals("spring")) {
return "this is real user";
}else {
throw new Exception();
}
}
/**
* 出錯則調用該方法返回預設友好錯誤
* @param username
* @return
*/
public String defaultUser(String username) {
return "The user does not exist in this system";
}
- 效果:在用戶爲“spring”的情況下訪問,返回結果“this is real user”,否則返回“The user does not exist in this system”
【學習總結】
本篇博客的內容只是對Hystrix的一個初步認識與瞭解,在書中有更多詳細的知識,可以進一步學習瞭解下。