實際業務場景下服務容錯與服務降級實戰
1. 前言
在上一章中,我們對 Hystrix 中的所有的微服務治理特性都做了學習和了解,同時我也通過 demo 樣例的形式,來對每一個特性都做了代碼實現,可是這些代碼并不是我們真實業務場景下的代碼,只能用來學習特性所用。
為了將我們所學習和了解到的微服務治理特性應用于真實項目中,于是規劃了 4 節在實際業務場景下 Hystrix 微服務治理特性的應用內容,希望可以通過這 4 節的介紹,大家可以了解到如何在實際項目中去應用這些特性。
在本節中,我將為大家介紹真實業務場景下,服務容錯與降級的應用方法,及代碼實現。
本節主要內容:
-
服務容錯與降級真實業務場景描述;
-
業務場景實現思路分析與實操。
2. 服務容錯與降級真實業務場景描述
業務場景描述
有這樣一個真實的業務場景:在某大廠的用戶業務模塊下,存在一個用戶注冊服務接口,在正常流量下,請求該用戶注冊服務接口,不會出現任何問題,業務可以正常開展。但是,在遇到某活動舉辦時,當再次請求該用戶注冊服務接口時,該服務接口就會報服務處理異常,我們需要做的就是用服務容錯與降級的概念來解決這種異常現象。
問題原因分析
在解決問題之前,我們首先來分析一下這種問題產生的原因。
在遇到某活動舉辦時,當再次請求該用戶注冊服務接口時,由于此時的請求流量較正常情況下的多,即此時的請求流量可能是正常情況下請求流量的幾倍,甚至更多,我們的服務在處理請求時,一方面出現了服務處理堆積的現象;另一方面,當我們的服務器或數據庫不能繼續處理更多的請求時,沒有給用戶一個合理地提示,直接讓程序報出了異常。
以上兩方面就是產生該異常的原因,第一方面我們使用服務容錯與降級無法解決,只能使用高并發相關的知識,通過限流來解決,但是第二方面我們可以使用服務容錯與降級的概念來解決,接下來就讓我們看一下如何解決吧。
3. 業務場景實現思路分析與實操
實現思路分析
鑒于上述業務場景中所描述的問題,我們可以在該用戶注冊服務上,通過添加 Hystrix 的服務容錯與降級的注解,再結合相關配置項來實現該用戶注冊服務的容錯與降級。
在為該用戶注冊服務配置了容錯與降級之后,當在大流量情況下,如果我們的服務器或數據庫不能繼續處理更多的請求時,此時會給用戶一個提示,并且拒絕處理后續的服務請求。
由于我們的本套課程不涉及 Open Feign ,所以這里為大家介紹以注解形式配置服務容錯與降級。
實操
@RequestMapping("register.do")
@ResponseBody
@HystrixCommand(fallbackMethod = "register_failed")
public CommonResponse<String> register(@RequestBody User user){
return userService.register(user);
}
public CommonResponse<String> register_failed(){
return CommonResponse.errorResponse("服務拒絕處理,請聯系系統管理員");
}
代碼解釋
第 3 行,我們使用 HystrixCommand 注解的 fallbackMethod 屬性,來為用戶注冊服務添加容錯與降級,此時,當該服務出現上述業務場景問題時,就會返回 register_failed 方法所對應的響應,并且后續服務不會繼續處理。
Tips:
1. 配置服務容錯與降級時,首先需要清楚對應服務下都可能會出現哪些問題,出現這些問題的產生原因主要是什么,我們只有在清楚了這些錯誤產生的原因之后,我們才能合理地去編寫服務容錯與降級時的響應結果,這點同學們需要注意。
2. 在實際項目開發中,基本上每個承載大流量的接口服務都會配置服務容錯與降級,這種配置方式可能在微服務項目中已經成為了一種習慣。
4. 小結

本小節以一個真實業務場景下的服務,為大家介紹了如何在真實業務場景下配置 Hystrix 的服務容錯與降級,并且做了代碼實操,針對容易出現問題的地方,也做了注意事項的補充,希望同學們可以對真實業務場景,服務容錯與降級的應用方法有所了解。