SpringCloud 學習筆記8--SpringCloud 之 Hystrix服務保護框架( 服務降級、熔斷、限流)

摘自:螞蟻課堂學習視頻:http://www.mayikt.com/course/video/2392

一、微服務高可用技術

       大型複雜的分佈式系統中,高可用相關的技術架構非常重要。它中有一個非常重要的環節,就是如何將分佈式系統中的各個服務打造成高可用的服務,從而以應對分佈式系統環境中的各種各樣的問題,避免整個分佈式系統被某個服務的故障給拖垮。

     比如:服務間的調用超時、服務間的調用失敗。解決這些問題就涉及到高可用分佈式系統中的很多重要的技術,

    包括:

        資源隔離、限流與過載保護、熔斷、優雅降級、容錯、超時控制、監控運維等。

 

二、服務降級、熔斷、限流

1、服務降級

     在高併發情況下,防止用戶一致等待,使用服務降級方式(直接返回一個友好的提示給客戶端,調用fallback方法)。如果調用其他接口超時的時候(默認是1秒時間),即在1秒中沒有及時響應時,默認情況下,業務邏輯是可以執行的,但代碼會直接執行服務降級的方法返回結果。

2、服務熔斷

     熔斷機制目的是爲了保護服務在高併發的情況下,如果請求達到一定極限(可以自己設置閾值),如果流量超出了設置閾值,然後直接拒絕訪問,保護當前服務。使用服務降級方式返回一個友好提示,服務熔斷和服務降級一起使用。

3、服務隔離

    因爲默認情況下,只有一個線程池會維護所有的服務接口,如果大量的請求訪問同一個接口,達到tomcat線程池默認極限,可能會導致其他服務無法訪問。

    解決服務雪崩效應:使用服務隔離機制(線程池方式和信號量)。

    (1)線程池方式實現隔離的原理:

                    相當於每個接口(服務)都有自己獨立的線程池,因爲每個線程池互不影響,這樣的話就可以解決服務雪崩效應。每               個服務接口都有自己獨立的線程池,每個線程池互不影響。缺點:CPU佔用率非常高。

    (2)信號量隔離:

                     使用一個原子計數器(或信號量)來記錄當前有多少個線程在運行,當請求進來時,先判斷計數器的數值,若超過設                置的最大線程個數則拒絕該請求,若不超時則通行,這時候計數器+1,請求返回成功後,計數器-1.

 

4、Hystrix簡單介紹

          Hystrix是國外知名的視頻網站Netflix所開源的非常流行的高可用架構框架。Hystrix能夠完美的解決分佈式系統架構中打造高可用服務面臨的一系列技術難題。它具有自我保護的能力,它是通過如下機制解決雪崩效應問題。

         在微服務架構中,我們把每個業務都拆分成單個服務模塊,然後當有業務需求的時候,服務間可相互調用,但是,由於網絡原因或其他一些因素,有可能出現服務不可用的情況,當某個服務出現問題時,其他服務如果繼續調用這個服務,就有可能出現線程阻塞,但如果同時有大量的請求,就會造成線程資源被用完,這樣就可能會導致服務癱瘓,由於服務間會相互調用,很容易造成蝴蝶效應導致整個系統宕掉,因此,就提出了用斷路器來解決這一問題。

       (1)資源隔離:

                包括線程池隔離和信號量隔離,限制調用分佈式服務的資源使用,某一個調用的服務出現問題不會影響其他服務的調用。

       (2)降級機制:

                 超時降級、資源不足時(線程或信號量)降級,降級後可以配合降級接口返回託底數據。

        (3)熔斷:

                 當失敗率達到閥值自動觸發降級(如因網絡故障/超時造成的失敗率高),熔斷器觸發的快速失敗會進行快速恢復。

         (4)緩存:提供了請求緩存、請求合併實現。

5、Hystrix有兩種方式配置保護服務,通過註解和接口形式

(1)註解形式:

        @HystrixCommand(fallbackMethod=“方法名”) :fallbackMethod方法的作用:服務降級執行。

        @HystrixCommand默認開啓線程池隔離方式,默認開啓服務降級執行方法、默認開啓服務熔斷機制。    

相關配置如下:

(1)pom.xml添加依賴:

     	<!-- hystrix斷路器 -->
  	<dependency>
  		<groupId>org.springframework.cloud</groupId>
  		<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  	</dependency>


(2)application.properties添加配置:

##開啓hystrix斷路器
feign.hystrix.enabled=true

##hystrix禁止服務超時時間
hystrix.command.default.execution.timeout.enabled=false

 

發佈了29 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章