基於springcloud搭建項目-Hystrix篇(五)


1、概述

(1)、首先要知道分布式系統面臨的問題
復雜分布式體系結構中應用程序有數十個依賴關系,每個依賴關系在某些時候將不可避免的失敗

(2)、服務雪崩

多個服務之間相互調用的時候,假設微服務A調用微服務B和微服務C,微服務B和微服務C又調用其他的微服務,這既是所謂的“扇出”。如果扇出的鏈路上某個微服務的調用響應時間過長或者不可用,對微服務A的嗲用就會占用原來越多的系統資源,今兒引起系統崩潰,所謂的“雪崩效應”。


(3)、對於高流量的應用來說,單一的后端依賴可能會導致所有服務器上的所有資源都在幾秒鍾內飽和。比失敗更糟糕的是,這些應用程序還可能導致服務之間的延遲增加,備份隊列,線程和其他系統資源緊張,導致整個系統發生更多的級聯故障。這些都表示需要對故障和延遲進行隔離和管理,以便單個依賴關系的失敗,不能取消整個應用程序或系統。

●是什么

Hystrix是一個用於處理分布式系統的延遲和容錯的開源庫,在分布式系統里,許多依賴不可避免的會調試失敗,比如超時、異常等,Hystrix能夠保證在一個依賴出現問題的情況下,不會導致整個服務失敗,避免級聯故障,以提高分布式系統的彈性。

“斷路器”本身是一種開關裝置,當某個服務開關發生故障之后,通過斷路器的故障監控(類似熔斷保險絲),向調用方返回一個符合預期的、可處理的備選響應(fallback),而不是長時間的等待或者拋出調用方無法處理的異常,這樣就保證了服務調用縣城不會被長時間,不必要得占用,從而避免了故障在分布式系統中的蔓延,乃至雪崩

●能干嘛

(1)、服務限流

(2)、服務降級、

整個資源快不夠了,忍痛將某些服務先關掉,待度過難關,再開啟回來。

(3)、服務熔斷

熔斷機制是應對雪崩效應的一種微服務鏈路保護機制
當扇出鏈路的某個微服務不可用或者響應時間太長時,會進行服務的降級,進而熔斷該節點微服務的調用,快速返回“錯誤”的響應信息。當檢測到該節點微服務調用響應正常后恢復調用鏈路。在SpringCloud框架里熔斷機制通過Hystrix實現。Hystrix會監控微服務調用的狀況,當失敗的調用到一定的閾值,缺省是5秒內20次調用失敗就會啟動熔斷機制。熔斷機制的注解是@HystrixCommand

(4)、接近實時的監控

除了隔離依賴服務的調用以外,Hystrix還提供了准實時的調用監控(Hystrix Dashboard),Hystrix會持續的記錄所有通過Hystrix發起的請求的執行信息,並以統計報表和圖形的形式展示給用戶,包括每秒執行多少請求多少成功,多少失敗等。Netfilx通過hystrix-metrics-event-stream項目實現了對以上指標的監控。Spring Cloud也提供了Hystrix Dashboard的整合,對監控內容轉化成可視化界面。

●怎么用

 接上篇的項目,還是三個服務 注冊中心study-eureka(8001),服務提供者study-ms(8003),服務消費者study-web(8002)

第一、在Ribbon消費者中使用

(1)、在消費者pom.xml中添加依賴

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

(2)、在方法上添加注解@HystrixCommand(fallbackMethod = "XXXX")

  study-web的方法如下:

  @HystrixCommand(fallbackMethod = "testError")
    @GetMapping("test")
    public String getHello() {
        return restTemplate.getForObject("http://STUDY-MS/user/test", String.class);
    }

    public String testError() {
        return "hi Hystrix : sorry error!";
    }

(3)、在study-web的啟動類上添加注解@EnableCircuitBreaker

 (4)、分別啟動注冊中心study-eureka,stusy-ms,study-web,訪問http://http://localhost:8002/test

 結果顯示:

(5)、斷開服務者study-ms,訪問http://localhost:8002/test

 第二、在Feign中使用

Feign是自帶斷路器的,@EnableFeignClients中已經默認打開了斷路器功能,所以這里的啟動類上不需要再加@EnableCircuitBreaker注解

只需要在@FeignClient中為fallback參數指定fallback方法。但是,在D版本的Spring Cloud之后,它沒有默認打開

(1)、添加配置feign.hystrix.enabled=true

 (2)、在Feign接口注解@FeignClient上添加fallback,此注解是接口實現類

 (3)實現類上添加熔斷實現

 (3)、分別啟動注冊中心study-eureka,stusy-ms,study-web,訪問http://localhost:8002/queryUser

 (4)、關掉study-ms服務,繼續訪問http://localhost:8002/queryUser

 結果證明斷路器起到了作用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM