亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

首頁 慕課教程 Spring Cloud Hystrix Spring Cloud Hystrix Hystrix 服務快速失敗概念講解與實操(一)

Hystrix 服務快速失敗概念講解與實操(一)

1. 前言

在之前的小節中,我們對服務容錯與服務降級的定義做了詳盡的介紹,同時,也在 Spring Cloud 中實現了 Hystrix 的服務容錯與服務降級,這只是 Hystrix 最主要的一個特性,接下來讓我們來看一下 Hystrix 的其他特性 - 服務快速失敗。

服務快速失敗分為普通版本和斷路器版本,在本節中,我將對 Hystrix 中提供的普通版本的服務快速失敗的定義做詳細的介紹,在介紹完定義之后,我們會通過一段代碼示例,來在 Spring Cloud 中實現普通版本的 Hystrix 的服務快速失敗。

本節主要內容:

  • 什么是服務快速失??;

  • Hystrix 服務快速失敗實操。

2. 什么是服務快速失敗

在介紹服務快速失敗之前,我們需要首先了解一個概念,那就是雪崩效應,那么什么是雪崩效應呢?

雪崩效應,是一種微服務項目間出現的一種不良現象,一般是指:由一個微服務發生故障之后,影響到了其他微服務的正常運行,或者說,當一個微服務發生故障不能正常運行時,所導致的其他微服務也跟著受影響,導致其他的微服務也不能正常運行。

假設現在有 4 個微服務,分別用服務 A 、服務 B 、服務 C 、服務 D 表示,并且,服務 B 的運行依賴于服務 A ,服務 C 的運行依賴于服務 B ,服務 D 的運行也依賴于服務 B , 這 4 個微服務之間的正常運行關系如下圖所示:

假想微服務架構

為了驗證雪崩效應,現在,我們假設服務 B 由于外界因素發生了宕機現象,那么此時的服務 B 由于沒有任何保護措施,所以服務 B 無法正常運行。

由于服務 B 不能正常運行,所以,導致依賴于服務 B 的服務 C 和服務 D 都不能繼續正常運行了,如下圖所示:

雪崩效應產生原理

Tips:
1. 在實際工作中,在正式開發項目之前,應該就可能會出現雪崩現象的因素展開集中討論,并將討論結果以書面文件形式進行存儲,這樣一來,在真正發生雪崩現象時,可以及時啟用應急方案;
2. 在開發微服務項目時,我們應該盡最大可能的去避免雪崩現象的發生,因為雪崩現象除了會影響業務的正常開展之外,也會影響我們的資源消耗。

在了解了什么是雪崩效應之后,接下來我們來看一下什么是服務快速失敗。

服務快速失敗,就微服務而言,是指:當微服務之間發生雪崩現象時,在程序中通過采用某種技術方法或手段,來將引起雪崩效應的微服務快速處理,其處理的最終目的是要保證該微服務不會導致其他后續的微服務出現故障。

說白了,服務快速失敗就是當微服務發生故障時,所采取的一個兜底的方案,該方案的執行會迅速終止發生故障的微服務的繼續運行,且可以保證后續微服務的正常運行,具體如下圖所示:

服務快速失敗的作用

在上圖中,我們可以看到,發生故障的服務 B,由于采用了服務快速失敗機制,導致在發生故障時采取了快速失敗措施,且同時也保證了服務 C 和服務 D 的正常運行(至于如何保證的服務 C 和服務 D 的正常運行,就涉及到了源碼層面,由于該知識不符合本套課程的初衷,所以這里不予介紹)。

Tips:
1. 服務快速失敗幾乎稱為了每個微服務項目中必不可少的措施,所以,我們在開發微服務項目時,一定要采用服務快速失敗機制,來保證我們項目的正常運行;
2. 理解什么是雪崩效應是理解什么是服務快速失敗的前提概念,同學們一定要對這兩個概念有所了解才行。

3. Hystrix 實現服務快速失敗

在了解了什么是服務快速失敗之后,讓我們來看看,在 Spring Cloud 中如何使用 Hystrix 來實現服務快速失敗吧。

這里我們還以之前的 hello 方法來做講解,首先需要我們在項目中開啟 Hystrix :

@SpringBootApplication
@EnableHystrix
public class DemoApplication {

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

}

此段代碼已經在之前做過介紹,這里不再贅述。

在開啟 Hystrix 之后,我們來看我們的 hello 方法:

@RequestMapping(value = "hello", method = RequestMethod.GET)
@HystrixCommand(fallbackMethod = "helloFail")
@ResponseBody
public String hello() throws InterruptedException {
    Thread.sleep(1000);
    return "helloWorld";
}

public String helloFail() {
    return "helloFailed";
}

在此段代碼中,我們同樣使用了 HystrixCommand 注解,并聲明了 fallbackMethod 屬性。

假設該段代碼就位于我們上述的服務 B 中,且此時服務 B 發生了故障,導致訪問服務 B 的 hello 方法,無法返回正常的影響。

由于服務 B 配置了服務快速失敗,那么,我們在訪問服務 B 的 hello 方法時,會返回由 fallbackMethod 屬性所返回的兜底的響應,在實際業務中,helloFail 返回的則是兜底的業務數據,以保證后續的微服務可以正常運行。

4. 視頻演示

5. 小結

本節內容概覽

本小節通過圖文并茂的方式,從什么是雪崩效應,到什么是 Hystrix 的服務快速失敗,最后再到我們在 Spring Cloud 中服務快速失敗的實現,詳細介紹了雪崩效應的產生原因、產生現象,以及服務快速失敗的通用實現手段,旨在幫助同學們可以很清晰的理解什么是雪崩效應,以及由雪崩效應所引起的服務快速失敗現象。