微服務的穩定性一直是您非常關注的話題。隨著業務從單體架構向分布式架構演進以及部署方式的變化,服務之間的依賴關系變得越來越復雜,業務系統也面臨著巨大的高可用挑戰。MSE流量防護就是一款借助流量控制、熱點防護等模塊,來提高應用高可用能力的產品。本文介紹各個流量防護規則以及適用的場景。
不穩定場景
在生產環境中您可能遇到過以下不穩定的情況:
大促時瞬間洪峰流量使得系統超出最大負載、Load飆高、系統崩潰導致用戶無法下單。
“黑馬”熱點商品擊穿緩存、數據庫被打垮、擠占正常流量。
調用端被不穩定第三方服務拖垮、線程池被占滿、調用堆積,導致整個調用鏈路卡死。
這些不穩定的場景可能會導致嚴重后果,但很多時候開發者容易忽視這些與流量、依賴相關的高可用防護。MSE流量防護功能就可以預防這些不穩定因素帶來的影響,針對流量進行高可用的防護,從而保障服務“穩如磐石”。
核心場景
流量防護各規則說明和適用的核心場景如下表所示。
流量防護規則 | 描述 | 核心場景 | 說明文檔 |
接口流控規則 | 通過MSE配置QPS模式的流控規則,當每秒的請求量超過設定的閾值時,會自動拒絕多余的請求。 | 適用于需要限制突發的流量,在盡可能處理請求的同時來保障服務不被擊垮的場景。 | |
并發隔離規則 | 控制某些調用的并發數(即正在進行的數目),防止過多的慢調用擠占正常的調用。 | 在調用第三方服務時,防止過多的慢調用擠占正常調用的資源,避免服務不可用。 | |
熔斷規則 | 對不穩定的弱依賴調用進行自動熔斷降級,暫時切斷下游不穩定的調用,避免局部不穩定因素導致整體的雪崩。 | 避免局部不穩定因素(某個慢調用、異常服務)導致整體的雪崩,例如切斷某個RT高的第三方服務調用。 | |
熱點參數防護規則 | 自動識別熱點參數并控制每個熱點值的訪問頻次或并發量,可以有效地防止過“熱”的參數訪問擠占正常的調用資源。 | 適用于針對某些熱點數據中訪問頻次最高的Top數據進行控制的場景,例如針對一段時間內最頻繁購買的商品ID進行控制,防止突發熱點商品擊穿緩存而導致大量請求到數據庫的情形。 |
流量控制規則
場景說明
流量是隨機、不可預測的,可能就在某一時間會出現流量洪峰,例如雙十一零點的場景。然而系統的容量總是有限的,如果突如其來的流量超過了系統的承受能力,就可能會導致請求處理堆棧、堆積的請求處理緩慢、CPU/Load飆高,最后導致系統崩潰。因此,您需要針對這種突發的流量來進行限制,在盡可能處理請求的同時來保障服務不被擊垮,這就是流量控制。流量控制的場景是非常通用的,適用于脈沖流量類等場景。
流控規則說明
通常在Web入口或服務提供方(Service Provider)的場景下,需要保護服務提供方自身不被流量洪峰打垮。此時通常根據服務提供方的服務能力進行流量控制,或針對特定的服務調用方進行限制。您可以結合前期壓測評估核心接口的承受能力,通過MSE配置QPS模式的流控規則,當每秒的請求量超過設定的閾值時,會自動拒絕多余的請求。關于流控規則的更多信息,請參見配置流控規則。
并發控制
場景說明
一個服務常常會調用別的模塊,可能是另外一個遠程服務、數據庫,或者第三方API等。例如,支付的時候,可能需要遠程調用銀聯提供的API;查詢某個商品的價格,可能需要進行數據庫查詢。然而,這個被依賴服務的穩定性是不能保證的。如果依賴的服務出現了不穩定的情況,請求的響應時間變長,則調用服務的方法的響應時間也會變長,線程會產生堆積,最終可能耗盡業務自身的線程池,服務本身也變得不可用。
微服務的架構示例圖如下:
現代微服務架構都是分布式的,由許多微服務組成。不同服務之間相互調用,組成復雜的調用鏈路。以上的問題在鏈路調用中會產生放大的效果。復雜鏈路上的某一環不穩定,就可能會層層級聯,最終導致整個鏈路都不可用。
規則說明
MSE提供流量并發控制的能力,避免慢調用等不穩定因素造成服務不可用。
并發控制作為一種輕量級隔離的手段,控制某些調用的并發數(即正在進行的數目),防止過多的慢調用擠占正常的調用。更多信息,請參見配置隔離規則。
熱點參數防護規則
場景說明
為了防止被大流量打垮,您通常會對核心接口配置限流規則,但有的場景下配置普通的流控規則是不夠的。
例如大促峰值的時候,會有不少“熱點”商品,這些熱點商品的瞬時訪問量非常高。通常您可以事先預測一波熱點商品,并對這些商品信息進行緩存“預熱”,以便在出現大量訪問時可以快速返回而不會都經過數據庫。但每次大促都會涌現出一些“黑馬”商品,這些“黑馬”商品是無法事先預測的,沒有被預熱。當這些“黑馬”商品訪問量激增時,大量的請求會擊穿緩存,直接經過數據庫,導致數據庫訪問緩慢,擠占正常商品請求的資源池,最后導致系統崩潰。
規則說明
此時,利用MSE的熱點參數流控能力,自動識別熱點參數并控制每個熱點值的訪問頻次或并發量,可以有效地防止過“熱”的參數訪問擠占正常的調用資源。更多信息,請參見配置熱點參數防護(RPC)規則以及配置熱點參數防護(HTTP請求)規則。