1. 程式人生 > 其它 >SpringCloud Alibaba-5-服務容錯

SpringCloud Alibaba-5-服務容錯

1. 微服務架構中高併發帶來的問題

在微服務架構中,我們將業務拆分成一個個的服務,服務與服務之間可以相互呼叫,

但是由於網路原因或者自身的原因,服務並不能保證服務的100%可用。

如果單個服務出現問題,呼叫這個服務就會出現網路延遲,此時若有大量的網路湧入,會形成任務堆積,最終導致服務癱瘓。






2. 服務雪崩效應

在分散式系統中,由於網路原因或自身的原因,服務一般無法保證 100% 可用。

如果一個服務出現了問題,呼叫這個服務就會出現執行緒阻塞的情況,此時若有大量的請求湧入,就會出現多條執行緒阻塞等待,進而導致服務癱瘓。

由於服務與服務之間的依賴性,故障會傳播,會對整個微服務系統造成災難性的嚴重後果,這就是服務故障的 “雪崩效應” 。






3. 服務雪崩常見容錯方案

常見的容錯思路有隔離、超時、限流、熔斷、降級這幾種。

  • 隔離
    指將系統按照一定的原則劃分為若干個服務模組,各個模組之間相對獨立,無強依賴。
    當有故障發生時,能將問題和影響隔離在某個模組內部,而不擴散風險,不波及其它模組,不影響整體的系統服務。
    常見的隔離方式有:執行緒池隔離和訊號量隔離

  • 超時
    指在上游服務呼叫下游服務的時候,設定一個最大響應時間,如果超過這個時間,下游未作出反應,就斷開請求,釋放掉執行緒。

  • 限流
    指限制系統的輸入和輸出流量以達到保護系統的目的。
    為了保證系統的穩固執行,一旦達到的需要限制的閾值,就需要限制流量並採取少量措施以完成限制流量的目的。

  • 熔斷
    指當下遊服務因訪問壓力過大而響應變慢或失敗,上游服務為了保護系統整體的可用性,可以暫時切斷對下游服務的呼叫。
    這種犧牲區域性,保全整體的措施就叫做熔斷。

  • 降級
    指為服務提供一個託底方案,一旦服務無法正常呼叫,就使用託底方案。






4. 常見的容錯元件

  • Hystrix
    Hystrix是由Netflix開源的一個延遲和容錯庫,用於隔離訪問遠端系統、服務或者第三方庫,防止級聯失敗,從而提升系統的可用性與容錯性。

  • Sentinel
    阿里巴巴開源的一款斷路器實現,本身在阿里內部已經被大規模採用,非常穩定。






5. Hystrix快速入門

PS:Hystrix已經不維護了。

https://www.cnblogs.com/itlihao/p/14521694.html






6. Sentinel快速入門-整合Sentinel

6.1 什麼是Sentinel

Sentinel (分散式系統的流量防衛兵) 是阿里開源的一套用於服務容錯的綜合性解決方案。

以流量為切入點, 從流量控制、熔斷降級、系統負載保護等多個維度來保護服務的穩定性。


Sentinel 分為兩個部分:

  • 核心庫(Java 客戶端)不依賴任何框架/庫,能夠運行於所有 Java 執行時環境,同時對 Dubbo /Spring Cloud 等框架也有較好的支援。

  • 控制檯(Dashboard)基於 Spring Boot 開發,打包後可以直接執行,不需要額外的 Tomcat 等應用容器。

6.2 微服務整合Sentinel

新增依賴

  <dependency>  
    <groupId>com.alibaba.cloud</groupId>  
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  </dependency>

安裝Sentinel控制檯






7. Sentinel的概念和功能

7.1 基本概念

  • 資源
    Sentinel的資源就是指Sentinel要保護的東西(它可以是 Java 應用程式中的任何內容,可以是一個服務,也可以是一個方法,甚至可以是一段程式碼。)。

  • 規則
    Sentinel的規則就是指定義如何進行保護資源。

作用在資源之上, 定義以什麼樣的方式保護資源,主要包括流量控制規則、熔斷降級規則以及系統保護規則。

  • 功能
    Sentinel的主要功能就是容錯,主要體現在如下三個方面:
    1. 流量控制

    2. 熔斷降級
      當檢測到呼叫鏈路中某個資源出現不穩定的表現,例如請求響應時間長或異常比例升高的時候,則對這個資源的呼叫進行限制,讓請求快速失敗,避免影響到其它的資源而導致級聯故障。
      Sentinel 對這個問題採取了兩種手段:通過併發執行緒數進行限制Sentinel 通過限制資源併發執行緒的數量,來減少不穩定資源對其它資源的影響。當某個資源出現不穩定的情況下,例如響應時間變長,對資源的直接影響就是會造成執行緒數的逐步堆積。當執行緒數在特定資源上堆積到一定的數量之後,對該資源的新請求就會被拒絕。堆積的執行緒完成任務後才開始繼續接收請求。通過響應時間對資源進行降級除了對併發執行緒數進行控制以外,Sentinel 還可以通過響應時間來快速降級不穩定的資源。當依賴的資源出現響應時間過長後,所有對該資源的訪問都會被直接拒絕,直到過了指定的時間視窗之後才重新恢復。

    3. 系統負載保護






8. Sentinel快速入門-實現介面的限流






9. Sentinel規則