服務(wù)雪崩:
????多個微服務(wù)之間調(diào)用的時候,假如微服務(wù)A調(diào)用微服務(wù)B和微服務(wù)C,微服務(wù)B和微服務(wù)C又調(diào)用其他的微服務(wù),這就是所謂的 【扇出】,如果扇出的鏈路上某個微服務(wù)的調(diào)用響應(yīng)時間過長或者不可用,對微服務(wù)A的調(diào)用就會占用越來越多的系統(tǒng)資源,進而引起系統(tǒng)崩潰,所謂的【雪崩效應(yīng)】。
對于高流量的應(yīng)用來說,單一的后端依賴可能會導(dǎo)致所有服務(wù)器上的所有資源都在幾秒鐘內(nèi)飽和。比失敗更糟糕的是,這些應(yīng)用程序還可能導(dǎo)致服務(wù)之間的延遲增加,備份隊列,線程和其他系統(tǒng)資源緊張,導(dǎo)致整個系統(tǒng)發(fā)生更多的級聯(lián)故障,這些都表示需要對故障和延遲進行隔離和管理,以便單個依賴關(guān)系的失敗,不能取消整個應(yīng)用程序或系統(tǒng)。
Hystrix:
? ? Hystrix是一個用于處理分布式系統(tǒng)和延遲和容錯的開源庫。在分布式系統(tǒng)里,許多依賴不可避免的會調(diào)用失敗,比如超時,異常等。Hystrix能保證在一個依賴出問題的情況下,不會導(dǎo)致整體服務(wù)失敗,避免級聯(lián)故障,以提高分布式系統(tǒng)的彈性。
? ? 【斷路器】本身是一種開關(guān)裝置,當某個服務(wù)單元發(fā)生故障之后,通過斷路器的故障監(jiān)控(類似熔斷保險絲),向調(diào)用方返回一個服務(wù)預(yù)期的,可處理的備選響應(yīng)(FallBack),而不是長時間的等待或者拋出調(diào)用方法無法處理的異常,這樣就可以保證了服務(wù)調(diào)用方的線程不會被長時間不必要的占用,從而避免了故障在分布式系統(tǒng)中的蔓延,乃至雪崩。

設(shè)置失敗備選方法(失敗后回調(diào)某方法)

第一步:導(dǎo)入依賴
<dependency>
? ? <groupId>org.springframework.cloud</groupId>
? ? <artifactId>spring-cloud-starter-hystrix</artifactId>
? ? <version>1.3.5.RELEASE</version>
</dependency>
第二步:添加熔斷的支持(在啟動類上添加注解@EnableCircuitBreaker)
第三步: 可以編寫備選方法
第四步:在方法上添加注解@HystrixCommand【設(shè)置失敗后的備選方法】

注:備選方法的返回值一定要與原方法一直,否則會報錯。