【Spring Cloud】Hystrix實現服務保護

【學習背景】

隔了很長一段時間,沒有更新Spring Cloud系列博客了,最近一直在看《重新定義Spring Cloud實戰》一書,發現書中寫了一些深層次的東西,對於之前自己有學習的一些組件,如Eureka、Feign、Ribbon等,在看書的過程中,又有了很多新的收穫。所以,還是想繼續把其他的一些組件學習下,本篇博客學習的組件是Hystrix。

【學習內容】

一. 什麼是Hystrix?

Hystrix是由Netflix開源的一個針對分佈式系統容錯處理的開源組件,旨在隔離遠程系統、服務和第三方庫,阻止級聯故障,在複雜的分佈式系統中實現恢復能力。

二. Hystrix解決哪些問題?

在說明Hystrix可以解決哪些問題之前,先回想一下什麼是服務雪崩效應?舉個簡單的例子,在某系統上線初期,可能沒有很大的用戶量,在一段時間後,客戶量增加,高併發情況下,系統無法訪問,所有服務癱瘓不可用。

爲了避免上述服務雪崩效應的發生,Spring Cloud體系中提供了Hystrix這樣一個組件,支持採用斷路器、服務降級、服務熔斷、服務隔離等方式,保證服務可用。

  • 服務降級:在高併發情況下,防止用戶一直等待,使用服務降級方式,即返回一個友好提示給客戶端,不會去處理請求,調用fallback本地方法,目的是爲了用戶體驗。
  • 服務熔斷:目的是爲了保護服務,在高併發情況下,如果請求達到了一定極限(可以自己設置閾值),如果流量超出了自己設置的閾值,自動開啓服務保護功能,使用服務降級方式返回一個友好的提示。
  • 服務隔離:線程池隔離。每個服務接口都有自己獨立的線程池,每個線程池互不影響。缺點是CPU佔用率高,所以不是所有的接口都需要去採用線程池隔離,關鍵核心接口採用即可。

三. Hystrix使用方法

  1. 在服務中添加依賴
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  1. 在啓動類上添加啓用斷路器模式
@SpringBootApplication
@EnableHystrix
public class ConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(ConsumerApplication.class, args);
	}

}
  1. 在接口方法上添加@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"; 
  }
  1. 效果:在用戶爲“spring”的情況下訪問,返回結果“this is real user”,否則返回“The user does not exist in this system”

【學習總結】

本篇博客的內容只是對Hystrix的一個初步認識與瞭解,在書中有更多詳細的知識,可以進一步學習瞭解下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章