天天看點

高并發之降級和熔斷

當使用者請求 A、P、H、I 四個服務擷取資料時,在正常流量下系統穩定運作,如果某天系統進來大量流量,其中服務 I 出現 CPU、記憶體占用過高等問題,結果導緻服務 I 出現延遲、響應過慢,随着請求的持續增加,服務 I 承受不住壓力導緻内部錯誤或資源耗盡,一直不響應,此時更糟糕的是其他服務對 I 有依賴,那麼這些依賴 I 的服務一直等待 I 的響應,也會出現請求堆積、資源占用,慢慢擴散到所有微服務,引發雪崩效應。

基本的容錯模式

常見的容錯模式主要包含以下幾種方式:

1.主動逾時:Http請求主動設定一個逾時時間,逾時就直接傳回,不會造成服務堆積

2.限流:限制最大并發數

3.熔斷:當錯誤數超過門檻值時快速失敗,不調用後端服務,同時隔一定時間放幾個請求去重試後端服務是否能正常調用,如果成功則關閉熔斷狀态,失敗則繼續快速失敗,直接傳回。(此處有個重試,重試就是彈性恢複的能力)

4.隔離:把每個依賴或調用的服務都隔離開來,防止級聯失敗引起整體服務不可用

5.降級:服務失敗或異常後,傳回指定的預設資訊

高并發之降級和熔斷

服務降級

由于爆炸性的流量沖擊,對一些服務進行有政策的放棄,以此緩解系統壓力,保證目前主要業務的正常運作。它主要是針對非正常情況下的應急服務措施:當此時一些業務服務無法執行時,給出一個統一的傳回結果。

服務熔斷

熔斷這一概念來源于電子工程中的斷路器(Circuit Breaker)。在網際網路系統中,當下遊服務因通路壓力過大而響應變慢或失敗,上遊服務為了保護系統整體的可用性,可以暫時切斷對下遊服務的調用。

服務熔斷與服務降級比較

服務熔斷對服務提供了proxy,防止服務不可能時,出現串聯故障(cascading failure),導緻雪崩效應。

服務熔斷一般是某個服務(下遊服務)故障引起,而服務降級一般是從整體負荷考慮。

1.共性:

目的 -> 都是從可用性、可靠性出發,提高系統的容錯能力。

最終表現->使某一些應用不可達或不可用,來保證整體系統穩定。

粒度 -> 一般都是服務級别,但也有細粒度的層面:如做到資料持久層、隻許查詢不許增删改等。

自治 -> 對其自治性要求很高。都要求具有較高的自動處理機制。

2.差別:

觸發原因 -> 服務熔斷通常是下級服務故障引起;服務降級通常為整體系統而考慮。

管理目标 -> 熔斷是每個微服務都需要的,是一個架構級的處理;而服務降級一般是關注業務,對業務進行考慮,抓住業務的層級,進而決定在哪一層上進行處理:比如在IO層,業務邏輯層,還是在外圍進行處理。

實作方式 -> 代碼實作中的差異。

服務熔斷恢複需注意的問題