天天看點

深度解析微服務高并發流量服務降級、限流、熔斷、流量效果控制

作者:程式員進階碼農II

基礎知識

本篇主要介紹服務降級、限流、熔斷、流量效果控制等概念,解讀Sentinel的一些特性,并通過對Sentinel性能壓測介紹Sentinel的性能表現。

本篇内容主要包括以下幾個方面。

• 服務降級、限流、熔斷、流量效果控制。

• Sentinel的特性。

• Sentinel性能壓測。

服務降級、限流、熔斷、流量效果控制

限流,是指控制服務在機關時間内的流入流量,也就是控制服務在機關時間内處理的請求總數。

熔斷,是指當下遊服務突然變得不可用或者不穩定時,服務可以自動切斷與下遊服務的互動,進而保證自身可用。就像保險絲一樣,當電流異常升高到一定數值時,保險絲就會熔斷以切斷電流。

流量效果控制,是指控制流量以達到某種效果,如控制每毫秒隻放行一個請求以達到勻速通過的效果。常見的流量效果控制有勻速通過、冷啟動。

服務降級,表示臨時暫停一些不是那麼重要的服務,以釋放更多資源給重要的服務使用;也表示暫時由計劃A改為計劃B,計劃A為正常提供的服務,計劃B為臨時提供的服務,如快速響應“系統忙碌,請稍後再試”的提示。

常見的服務降級實作方式有限流降級、熔斷降級、開關降級。

限流降級

假設服務A需要依賴服務B完成用戶端的一次請求,如圖1.1所示。這時通過壓測預測服務B單節點1秒内所能處理的最大并發請求數為200個,若為服務B配置限流門檻值為200 QPS,則當1秒内服務B接收的請求數超過200個時,超出的請求就會被服務B拒絕。

深度解析微服務高并發流量服務降級、限流、熔斷、流量效果控制

圖1.1 限流降級

對于超出門檻值的流量除直接拒絕外,還可以采取一些政策以處理更多的請求,即流量效果控制。例如,均速排隊這種方式主要用于處理間隔性突發的流量,如某一秒有大量的請求到來,而接下來的幾秒都處于空閑狀态,這時我們希望系統能夠在接下來的空閑時間内逐個處理這些請求,而不是在第一秒直接拒絕多餘的請求。

熔斷降級

假設服務A需要依賴服務B完成用戶端的一次請求,那麼服務A如果能夠感覺服務B的狀态,在服務B不行的時候不再請求服務B,就能確定服務A自身不會受服務B的影響。如何知道服務B到底行不行呢?

如圖1.2所示,假設1秒内向服務B發送230個請求,結果有30個請求發生逾時異常或響應異常,根據這個數字就可以預測後續請求也大機率不能被服務B正常處理。服務B已經處理不過來了,那麼後續的請求就沒有必要再發送了,因為發送出去也會顯示異常。

深度解析微服務高并發流量服務降級、限流、熔斷、流量效果控制

圖1.2 熔斷降級

當然,服務B不會一直不行,當服務B恢複之後,服務A也應該能感覺到,是以熔斷需要以一個時長為周期,如1秒。這個周期也被稱為時間視窗。每個時間視窗都要重新計算請求總數、異常總數這些名額資料,這樣熔斷就會在下一個周期自動恢複。

熔斷降級的常見降級政策如下。

(1)在每秒請求異常數超過多少時觸發熔斷降級。

(2)在每秒請求異常錯誤率超過多少時觸發熔斷降級。

(3)在每秒請求平均耗時超過多少時觸發熔斷降級。

提示:請求異常數越多、請求異常錯誤率越大或請求平均耗時越長,都說明服務的處理能力在下降。

開關降級

開關降級也是服務降級的一種實作方式。開關降級用于在有限的硬體條件下,提升系統核心功能的并發處理能力,以最少的硬體成本應對流量高峰。

電商項目開發涉及較多開關降級。一般在“大促活動”之前,都會通過開關方式将一些無關緊要的業務接口變成“不可用”。常見的實作方式是使用Redis控制服務降級的開關,如圖1.3所示,在服務A收到服務B的請求時,先從Redis擷取開關配置,若開關打開,則直接拒絕請求,并響應一個表示目前服務降級的狀态碼給調用者。

深度解析微服務高并發流量服務降級、限流、熔斷、流量效果控制

圖1.3 開關降級

控制服務降級開關的方式可以是人工控制,也可以是定時任務,即在某個時段開啟、某個時段關閉。

提示:定時任務控制服務降級開關的方式适合固定時間段請求突增的場景,例如,點外賣的高峰期在中午,就可以在上午11:00左右打開開關,在下午1:30之後關閉開關。

本文給大家講解的内容是深度解析微服務高并發基礎知識:服務降級、限流、熔斷、流量效果控制

  1. 下篇文章給大家講解的内容是度解析微服務高并發基礎知識:Sentinel的特性
  2. 感謝大家的支援!

繼續閱讀