一個故事理解限流熔斷降級

老_张發表於2024-09-12

無論是系統架構範疇,還是前幾年效能測試和最佳化領域,大家都很喜歡講三高(高併發高效能高可用),其中經常會出現這幾個專業術語:快取、限流、熔斷、降級。

這些聽起來很高大上的技術術語,到底是什麼,在什麼場景使用,它的作用又是什麼,很多同學感覺雲裡霧裡不太理解。

一個故事理解技術要點第三篇,這篇文章我們來聊聊在穩定性保障領域中經常出現的那些技術術語。

故事案例

先看下面這個故事案例:

假設你去銀行取錢,你是使用者,銀行是一個軟體系統。

直接在櫃檯取錢,相當於應用直接訪問銀行金庫(資料庫)。櫃檯數量有限(連線池),人稍微多一些,就會給櫃檯處理業務壓力。所以很多銀行對於小額存取款,都會引導使用者去ATM機(快取)

但是櫃檯和ATM機數量有限,所以需要在大廳設定使用者休息等待區(緩衝區)。使用者進入銀行後刷卡取號(佇列),進入休息等待區等候叫號,銀行按叫號順序處理業務。

假設週末來銀行辦理業務的人數過多,大堂經理(排程)會引導多餘的使用者去其他營業廳辦理業務(限流),或者透過網上銀行自助辦理(分流),再或者改天來辦理業務(熔斷),降低銀行的業務處理壓力。

銀行除了存取款,還有貸款業務,但貸款業務需要的材料手續多,業務複雜,流程長。如果來辦理業務的人數過多,則可以設定貸款業務只在週三辦理(降級),其他時間只辦理存取款業務。

好了,故事講完了,這就是關於快取限流熔斷降級的比喻形式,是不是很形象。

服務治理

在系統架構設計範疇,大家都希望系統具備“三高”的特性。因為只有系統具備高效能高可用高擴充套件性,才能應對複雜的業務流程,承載更多的使用者訪問。

“三高”只是架構設計實現的目標,要保障這個目標達成,自然少不了技術手段。一般將這些技術手段統稱為服務治理,或者流量治理。而流量治理,則可以歸結到服務穩定性保障領域。

在保障服務穩定性方面,流量治理的主要目的有如下幾種:

  • 效能最佳化:透過流量路由、負載均衡等技術手段,確保系統資源高效利用,降低時延,避免擁塞。
  • 可用性保障:透過限流、降級、熔斷等手段,確保核心業務和應用服務可以再高負載下也可以正常執行。
  • 故障容錯恢復:在系統出現異常或當機時,透過流量重定向手段快速摘除異常流量,並將請求路由到正常服務或備份機房上面,實現業務止血、故障轉移和自我恢復,保障系統業務的持續可用性。
  • 降本增效:透過效能最佳化、服務排程和流量控制,降低軟硬體成本,並透過線上應急響應機制和日常演練,提高處理問題的整體效率。

術語解析實踐

1、限流

限流其實很好理解,畢竟系統的處理能力是有限的,限流則是對超過系統處理能力的流量進行控制。

一句戶概括限流:控制訪問應用的流量在系統承載範圍內。

限流的主要目的是為了提升系統整體可用性,同時平衡使用者體驗和成本支出。

在實踐中,執行限流有如下三點可參考的經驗:

  • 在業務請求入口(閘道器)限流,避免內部互相呼叫放大流量。
  • 限流是個演進狀態,從連線池、IP、指定SQL到更細的層級粒度做限流。
  • 每個呼叫層都做限流,每個應用先保證自己可用,對其他依賴呼叫要做到“零信任”。

2、熔斷

在微服務系統中,一個服務可能會依賴多個服務,同時被其他服務依賴。以電商業務的訂單服務為例,它會依賴庫存商品和支付服務,同時也會被個人中心等服務依賴。

如果訂單服務出現異常或者故障,如果不進行針對性處理,則會影響整個業務系統的正常運轉,最後造成雪崩效應。

簡單理解,所謂熔斷就是保障系統和服務在過載或異常場景下系統正常執行的技術手段

以電商雙十一大促為例,常見熔斷案例有如下兩種:

  • 雙十一零點的前半小時, 動態推送,把日誌關掉。
  • 流量高峰來臨或者應用叢集出問題時,留一臺機器觀察錯誤和異常的日誌。

3、降級

所謂降級,簡單理解就是在系統面臨高負載時,人為將一些不重要或優先順序不高的業務功能臨時下線,降低系統壓力,同時多出的這部分資源去支撐更核心的業務處理。

如果用一句話概括降級,則是強依賴透過熔斷做緊急處理,弱依賴提前主動降級

在實踐中,執行降級有如下三點可參考的經驗:

  • 主動降級:提前進行風險識別,然後針對性的降級,可降低已知的風險。
  • 緊急降級:假設出現重大問題,才需要決策是否啟用的方案(風險較大)。
  • 預案平臺:平臺化的目的是留痕,方便後續把限流降級熔斷等配置恢復回來。

最後需要注意的是:無論限流還是降級以及熔斷,本質上對業務都是有損的

即在儘可能保障服務可用的情況下提供業務可用,保障業務目標的達成。這是一個需要不斷驗證和評估投入產出比的過程。

相關文章