技術/楊33
Hystrix是一個用於處理分佈式系統的延遲和容錯的開源庫。在分佈式系統裡,由於網絡原因或者自身原因,服務並不能保證100%可用,假如某個服務出現問題,這個服務再次被請求就會出現線程阻塞,請求的數量越來越多,把線程池資源消耗完畢,服務就會出現癱瘓,由於微服務的服務與服務之間存在依賴性,所以故障會傳播,最終整個微服務體系癱瘓,這就是“雪崩”效應。
Hystrix能夠保證某個服務出問題的情況下,不會導致整體服務失敗,避免級聯故障,以提高分佈式系統的彈性。
某個服務發生故障時,通過Hystrix的故障監控,向調用方返回一個符合預期的、可處理的備選響應,而不是長時間的等待或者拋出調用方無法處理的異常。這樣就保證了服務調用方的線程不會被長時間、不必要的佔用,從而避免了故障在分佈式系統中的蔓延,乃至雪崩。
一、服務降級、服務熔斷、服務限流
- 服務降級
服務不可用、代碼異常、接口等待時間長的時候,不讓客戶端等待,立刻返回一個友好的提示。
- 服務熔斷
達到服務的最大訪問能力後,直接拒絕再次被訪問,然後調用服務降級的方法返回友好提示。
- 服務限流
秒殺高併發等操作,限制一定時間內可以訪問多少服務,有序進行。
二、Java中如何使用Hystrix
Hystrix都是在服務消費者的模塊進行斷路器的相關配置。
1、pom.xml文件依賴包引入
<code> org.springframework.cloud spring-cloud-starter-netflix-hystrix /<code>
2、主啟動類必須添加註解@EnableCircuitBreaker,激活服務降級。
3、fallbackMethod參數指定系統出現問題,服務降級調用的方法名,@HystrixProperty註解可以約定該方法被調用的時間限制,比如超過3秒,就使用服務降級,調用友好提示的方法。
<code>/** * 系統正常提供的方法 * @return */ @HystrixCommand(fallbackMethod = "handler", commandProperties = { @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "3000") }) public String test() { return "系統目前正常"; } /** * test()方法出現問題後被調用 * @return */ public String handler() { return "系統繁忙,請稍後再試!"; }/<code>
還可以這是全局的服務降級註解@DefaultProperties(defaultFallback = "handler"),對所有方法提供統一的服務異常處理提示。
作者:楊33,北京互聯網公司在職Java開發,專注分享寫作乾貨。歡迎關注我,期待你的點贊評論。