Serverless 應用引擎 SAE(Serverless App Engine)集成微服務引擎 MSE(Microservices Engine)的流量防護能力,以流量為切入點,從接口流控、并發隔離、熔斷規則等多個維度來保障業務的穩定性,提供專業穩定的流量防護手段、秒級的流量水位分布分析功能。本文介紹如何設置流量防護的相關規則以及使用示例。
前提條件
已創建應用。
- 說明
使用MSE時會產生單獨費用。MSE的計費說明,請參見計費概述和【產品變更】SAE集成的MSE微服務治理功能商用通知。
使用限制
僅適用于2023年11月08日起新建的微服務應用。
功能入口
登錄SAE控制臺,在左側導航欄選擇 ,然后選擇目標地域和目標命名空間,最后單擊目標應用名稱。
在左側導航欄,選擇 ,單擊流量防護頁簽。
配置規則
配置流控規則
流控規則通過監控應用或服務流量的QPS指標,當指標達到設定的閾值時立即攔截流量,避免應用被瞬時的流量高峰沖垮,從而保障應用高可用性。
單擊接口流控頁簽,然后單擊新增流控規則。
在新增流控防護規則對話框中,配置相關信息。
在選擇防護場景配置向導中,選擇接口類型、流量類型和接口名稱,然后單擊下一步。
在配置防護規則配置向導中,配置相關信息,單擊下一步。
配置項
說明
是否開啟
開啟表示規則創建成功后立即生效,默認關閉。
單機QPS閾值
觸發對流控接口的統計維度對象的QPS閾值。
流控效果
選擇流控方式來處理被攔截的流量。
快速失敗:達到閾值時,立即攔截請求。按照應用系統設置中的適配模塊配置信息,進行內容返回。
排隊等待:請求勻速通過,允許排隊等待,通常用于請求調用削峰填谷等場景。需要設置具體的超時時間,達到超時時間后請求會快速失敗。
在配置防護行為配置向導中,選擇關聯行為,然后單擊新增。
規則創建成功后,您可以在接口流控頁簽對目標規則進行編輯或刪除等操作。
配置隔離規則
隔離規則通過控制接口或依賴的并發線程數,來保證系統的穩定性。
單擊并發隔離頁簽,然后單擊新增隔離規則。
在新增隔離防護規則對話框中,配置相關信息。
在選擇防護場景配置向導中,選擇接口類型、流量類型和接口名稱,然后單擊下一步。
在配置防護規則配置向導中,配置相關信息,單擊下一步。
配置項
說明
是否開啟
開啟表示規則創建成功后立即生效,默認關閉。
并發數閾值
資源的并發線程數(即該資源正在執行的線程數)閾值。
在配置防護行為配置向導,選擇關聯行為,然后單擊新增。
規則創建成功后,您可以在并發隔離頁簽對目標規則進行編輯或刪除等操作。
配置熔斷規則
熔斷規則可以監控應用內部或者下游依賴的響應時間或異常比例。當達到指定的閾值時,系統會立即降低下游依賴的優先級。在指定的時間內,系統不會調用該異常資源,避免應用的不穩定運行,從而保障應用的高可用性。指定時間過后,系統會重新恢復對該資源的調用。
單擊熔斷規則頁簽,然后單擊新增熔斷規則。
在新增熔斷防護規則對話框,配置相關信息。
在選擇防護場景配置向導,選擇接口類型和接口名稱,單擊下一步。
在配置防護規則配置向導,配置相關信息,單擊新增。
配置項
描述
統計窗口時長
統計的時間窗口長度,取值范圍為1秒~120分鐘。
最小請求數目
觸發熔斷的最小請求數目,若當前統計窗口內的請求數小于此值,即使達到熔斷條件規則也不會觸發。
閾值類型
選擇以慢調用比例(%)或異常比例(%)作為閾值。
選擇以慢調用比例作為閾值,需要設置允許的慢調用RT(即最大的響應時間),請求的響應時間大于該值則統計為慢調用。
在熔斷比例閾值中設置觸發熔斷的慢調用比例。規則開啟后,在單位統計時長內請求數目大于設置的最小請求數目,并且慢調用的比例大于閾值,則接下來的熔斷時長(s)內請求會自動被熔斷。經過熔斷時長后熔斷器會進入探測恢復狀態,若接下來的一個請求響應時間小于設置的慢調用RT則結束熔斷,若大于設置的慢調用RT則會再次被熔斷。
選擇以異常比例作為閾值,需要在熔斷比例閾值中設置觸發熔斷的異常比例。
規則開啟后,在單位統計時長內業務異常數目大于設置的最小請求數目,并且異常的比例大于閾值,則接下來的熔斷時長(s)內請求會自動被熔斷。
熔斷時長(s)
單擊顯示高級選項后配置。即熔斷觸發后持續的時間。資源進入熔斷狀態后,在配置的熔斷時長內,請求都會快速失敗。
熔斷恢復策略
單擊顯示高級選項后配置。熔斷器進入恢復階段(半開啟狀態)的恢復策略。
單次探測恢復:經過熔斷時長后,熔斷器會對接下來的一個請求進行探測,若該請求符合預期(不為慢調用或沒有異常),則結束熔斷;否則重新回到熔斷階段。
漸進式恢復:需要設置恢復階段數和每步最小通過數目。
經過熔斷時長后,熔斷器按照設定的恢復階段數進行漸進式恢復,若該階段內請求達到一定量即每步最小通過數目,則觸發檢查。檢查的請求若都未超過閾值,則逐步提高允許通過的請求比例,直到請求完全恢復;若某一步的指標超出閾值,則重新回到熔斷階段。
請求比例T=100/恢復階段數N,則第一階段請求比例為T,第二階段為2T,直到100%。
例如恢復階段數為3,每步最小通過數目為5,則三個階段分別按照33%、67%和100%的比例放入請求,當每階段的請求數目大于等于5時進行檢查,若請求的指標未超閾值則進入下一恢復階段,直至完全恢復。
規則創建成功后,您可以在熔斷規則頁簽對目標規則進行編輯或刪除等操作。
配置熱點參數防護(RPC)規則
為應用配置熱點規則后,系統將分析統計參數,即資源調用過程中的調用次數較高的參數,并根據配置的熱點規則對包含熱點參數的資源調用進行限流,保護系統穩定性。
單擊熱點參數防護(RPC)頁簽,然后單擊新增熱點參數防護(RPC)規則。
在新增熱點參數防護(RPC)規則對話框,配置相關信息。
在選擇防護場景配置向導,選擇接口名稱,單擊下一步。
在配置防護規則配置向導,配置相關信息,單擊下一步。
配置項
描述
參數位置索引
埋點傳入參數的索引位置。對應
SphU.entry(xxx,args)
中的參數索引位置。例如在SphU.entry(resourceName,Entry Type.IN,1,paramA,paramB)
埋點中,paramA
的參數索引是0,paramB
的參數索引是1。統計維度
可選擇通過請求數或并發線程數。
通過請求數:限制一段時間內的調用次數。
并發數:限制該資源調用的并發數。
統計周期時間
統計窗口時間長度(單位為秒)。例如統計窗口時長為10秒,QPS閾值為5代表限制10秒內每個熱點參數訪問不超過5次。
單機閾值
作用于每個熱點參數的閾值。
流控效果
當統計維度為通過請求數時,可以選擇流控效果來處理被攔截的流量。
快速失敗:達到閾值時,立即攔截請求。該模式下可以額外設置一個緩沖請求數,即針對突發請求額外允許的請求數目。
排隊等待:請求勻速通過,允許排隊等待,通常用于消息隊列削峰填谷等場景。需設置具體的超時時間,排隊時會計算預計的排隊時長,若超過最大超時時間則請求會直接被拒絕。例如,單機閾值配置為5,則代表請求每200毫秒才能通過一個,多出的請求將排隊等待通過。超時時間配置1000毫秒,則當前排隊請求超過5個(>1000毫秒)時,新到來的請求將會直接被拒絕。
是否開啟
開啟表示規則創建成功后立即生效,默認關閉。
在配置防護行為配置向導,選擇關聯行為,然后單擊新增。
規則創建成功后,您可以在熱點參數防護(RPC)頁簽對目標規則進行編輯或刪除等操作。
配置熱點參數防護(HTTP請求)規則
熱點參數防護規則(HTTP 請求)面向提供Web服務的應用,針對訪問請求中的一些參數項進行精細化的流量控制,可以對請求中IP、Host、Header、URL Param等參數維度的資源調用進行流量控制,保障業務與系統的穩定性。
單擊熱點參數防護(HTTP 請求)頁簽,然后單擊新增熱點參數防護(HTTP 請求)。
在新增熱點參數防護(HTTP 請求)對話框,配置相關信息。
在選擇防護場景配置向導,選擇接口名稱,單擊下一步。
在配置防護規則配置向導中,配置相關信息,單擊下一步。
配置項
說明
參數屬性
針對所選API的參數屬性進行流量控制。
Client IP:請求端的IP地址。
說明若請求經過代理,會優先嘗試從X-Forwarded-For請求頭中獲取IP信息,如果其IP信息存在,將會使用該IP作為實際請求端IP地址。
Remote Host:請求端的Host Header。
Header:根據指定的HTTP Header進行解析,如果填寫某個具體的Header Key,則該規則針對這個Header Key下面的熱點值分別進行限制。選擇Header后,可選擇配置請求屬性值的匹配策略,只有匹配該模式的請求屬性值會被納入統計和流控。
URL參數:根據指定的HTTP請求參數進行解析,需要填寫對應的參數名稱。選擇URL參數后,可選擇配置請求屬性值的匹配策略,只有匹配該模式的請求屬性值會納入統計和流控。
閾值類型
默認為請求數。
閾值
觸發對流控接口的統計維度對象的QPS閾值。設置時,需選擇統計時間間隔,支持秒、分鐘、小時和天4種維度。
例如,若閾值填寫為10,統計間隔選擇分,則表示每分鐘對應的請求數目不超過10個。
是否開啟
開啟表示規則創建成功后立即生效,默認關閉。
流控方式
單擊顯示高級選項后配置。
快速失敗:當閾值類型為QPS時,被攔截的流量將快速失敗,即達到閾值時,立即攔截請求。
說明被攔截拒絕掉的請求,將返回行為管理中配置的自定義信息,若未配置會返回默認行為,即429錯誤碼加上默認文本信息。
排隊等待:當閾值類型為QPS時,被攔截的請求將勻速通過,允許排隊等待。需設置具體的超時時間,預計達到超時時間的請求會立即失敗,而不會排隊。例如,QPS配置為10,則代表請求每100毫秒才能通過一個,多出的請求將排隊等待通過。超時時間代表最大排隊時間,超出最大排隊時間的請求將會直接被拒絕。
說明排隊等待時,QPS不要超過1000(請求間隔1毫秒)。
Burst size
單擊顯示高級選項后配置。當流控方式選擇為快速失敗時,可以額外設置一個Burst Size,即針對突發請求額外允許的請求數目。
超時時間
單擊顯示高級選項后配置。當流控方式選擇為排隊等待時,需設置具體的超時時間,單位為毫秒。例如,QPS配置為5,則代表請求每200毫秒才能通過一個,多出的請求將排隊等待通過。超時時間代表最大排隊時間,超出最大排隊時間的請求將會直接被拒絕。
在配置防護行為配置向導,選擇關聯行為,然后單擊新增。
規則創建成功后,您可以在熱點參數防護(HTTP請求)頁簽對目標規則進行編輯或刪除等操作。
管理行為
Web行為可以在Web類型埋點資源觸發了某種規則后,返回對應的自定義處理行為,例如,某個Web接口觸發流控規則后返回Blocked by Sentinel的提示文本。
新增行為
單擊行為管理頁簽,然后單擊新增行為。
在新增行為對話框,配置相關信息,然后單擊新建。
參數
描述
示例值
行為名稱
該行為的名稱。長度不超過128個字符,同一個應用內名稱不能重復。
測試行為
針對的資源類型
選擇為Web類型。
Web
Web 限流處理策略
定義Web接口訪問觸發某種規則后的行為表現。自定義返回:需設置HTTP返回狀態碼、返回內容的格式和返回的內容。表示Web接口訪問觸發規則后返回自定義的內容。
自定義返回
HTTP 返回狀態碼
默認為429。當Web限流處理策略為自定義返回時,需要填寫。
429
返回 content-type
設置返回內容的格式為普通文本或JSON。
JSON字符串
HTTP 返回文本
輸入當Web接口訪問觸發規則后返回的內容。當Web限流處理策略為自定義返回時,需要填寫。
{"message": "blocked oops"}
參數
描述
示例值
行為名稱
該行為的名稱。長度不超過128個字符,同一個應用內名稱不能重復。
測試行為
針對的資源類型
選擇為Rpc類型。
Rpc
Rpc 限流處理策略
定義Rpc接口訪問觸發某種規則后的行為表現。
自定義返回:自定義返回結果。需設置HTTP返回狀態碼、返回內容的格式和返回的內容。表示Rpc接口訪問觸發規則后返回自定義的內容。
自定義異常:拋出自定義異常。需設置異常的類名和異常文本,表示Rpc接口訪問觸發規則后系統會返回指定的異常信息。
自定義返回/自定義異常
Rpc 限流處理策略為自定義返回
自定義返回類名
填寫類名稱路徑。
說明自定義返回目前不支持對象類型中包含未確定類型的泛型,如Map<K, V>、List<T>等。
com.alibaba.demo.OrderService:getOrder(long)
自定義返回內容(JSON 格式)
填寫當Rpc接口訪問觸發規則時返回結果的對象內容。
{"id": "123", "name": "test"}
Rpc 限流處理策略為自定義異常
異常類名
填寫異常類名稱路徑。
java.lang.RuntimeException
異常信息文本
填寫Rpc接口訪問觸發規則后拋出自定義異常的文本信息。
"Operation failed"
新增的行為會顯示在行為管理頁簽中,您可以對目標行為進行修改或刪除等操作。
關聯行為
單擊進流量防護頁簽,選擇目標頁簽,單擊目標規則操作列編輯,配置選擇防護場景和配置防護規則后,在配置防護行為配置向導,從關聯行為下拉列表,選擇目標行為進行關聯,或者單擊新增行為來創建新的行為進行關聯。
說明如果您不需要自定義限流后的Fallback行為,選擇默認行為即可,默認接口類型為空。
新增規則時,如果當前接口已有綁定行為,后續綁定新的行為將覆蓋接口下已有的行為。
選擇Fallback類型時,如果不選擇接口類型,則綁定默認行為;選擇接口類型并綁定相應類型行為后,不可修改。
單擊保存。
使用場景
場景1:削峰填谷,使流量勻速通過
請求流量具有波峰波谷的特點,流控的原理是將前面的峰值流量延遲(排隊時長)到后面再處理,既能最大化滿足所有請求,又能保證用戶體驗。
在新增流控防護規則對話框,配置以下信息:
配置勻速模式下請求單機QPS閾值為5。
流控效果選擇排隊等待。
超時時間為5s。
系統每200毫秒處理一條請求,多余的處理任務將排隊;同時設置了等待時長為5s,則預計排隊時長超過5s的處理任務將快速失敗,直接返回默認流控信息,如文本、靜態頁面等。
場景2:保障自身資源充足
當運行該請求的響應時間變長,會導致線程的并發數變大。當并發數超過閾值以后,AHAS將拒絕多余的請求,直到堆積的任務完成,并發線程數變少。達到將異常隔離,減小不穩定性的效果。例如某個SQL執行時間為20毫秒,預期該請求每秒有20個。
在新增隔離防護規則對話框,配置以下信息:
填寫接口名稱。
并發數閾值為10。
設置完成后,當這個SQL發生死鎖或者存在性能問題時,該SQL運行變慢,成為慢SQL,此時即使請求不斷進來,也僅僅會占用10個線程,不會因為持續進來的請求(請求也無法在短時間內退出),從而耗光進程的活躍線程。當這個SQL恢復正常后,并發數會迅速減少。當并發數減少至低于預設的閾值時,系統就不會拒絕請求,應用的處理能力也快速的恢復。通過上述方式,起到根據響應時間自動調節的效果,隔離不穩定的應用。
場景3:慢調用熔斷
例如調用第三方服務,但響應時間太慢,會影響當前接口,所以對其進行熔斷操作。
在新增熔斷防護規則對話框,配置以下信息。
配置項 | 示例 | 說明 |
接口名稱 | test | 接口名稱。 |
統計窗口時長 | 1 | 統計時長為1秒。 |
最小請求數目 | 10 | 觸發熔斷的最小請求數目為10。 |
閾值類型 | 慢調用比例 | 選擇以慢調用比例作為閾值。 |
慢調用RT | 1000 | 超過1000毫秒則判定為慢請求。 |
熔斷比例閾值 | 80% | 觸發熔斷的慢調用比例閾值為80%。 |
熔斷時長(s) | 10 | 熔斷時長有10秒。 |
熔斷恢復策略 | 單次探測恢復 | 經過熔斷時長后,熔斷器會對接下來的一個請求進行探測,若該請求符合預期(不為慢調用或沒有異常),則結束熔斷;否則重新回到熔斷階段。 |
場景4:異常熔斷
例如第三方內容展示時,系統會出現異常,當異常比例較高時,可以對其進行熔斷操作,以保證更好的用戶體驗。
在新增熔斷防護規則對話框,配置以下信息。
配置項 | 示例 | 說明 |
接口名稱 | test | 接口名稱。 |
統計窗口時長 | 1 | 統計時長為1秒。 |
最小請求數目 | 10 | 觸發熔斷的最小請求數目為10。 |
閾值類型 | 異常比例 | 選擇以異常比例作為閾值。 |
熔斷比例閾值 | 80% | 觸發熔斷的異常比例閾值為80%。 |
熔斷時長(s) | 10 | 熔斷時長有10秒。 |
熔斷恢復策略 | 單次探測恢復 | 經過熔斷時長后,熔斷器會對接下來的一個請求進行探測,若該請求符合預期(不為慢調用或沒有異常),則結束熔斷;否則重新回到熔斷階段。 |
場景5:秒殺場景
秒殺等搶購商品的時候,由于流量較大會導致系統響應不及時,甚至系統崩潰。為保證系統的穩定性,可配置熱點規則,超過一定量的閾值后,系統會讓購買熱點商品的流量排隊等待。例如購買同一商品,1秒內調用超過100次請求后,則其余請求進行等待。
在新增熱點參數防護(RPC)規則對話框,配置以下信息:
填寫接口名稱。
統計維度選擇通過請求數。
統計周期時間設置為1秒,單機閾值設置為100。
流控效果選擇排隊等待。
超時時間設置為30毫秒。
1秒內調用此接口超過100次,多余的請求要進行排隊等待,等待時長超過30毫秒的請求就會立即失敗。
場景6:調用請求頻繁,占用較多系統資源
在秒殺場景下,有時候還需要修改下單地址,當調用修改請求較多時,會占用寫數據庫較多資源,您可以對其進行熱點快速失敗的處理,稍后再修改。
在新增熱點參數防護(RPC)規則對話框,配置以下信息:
填寫接口名稱。
統計維度選擇并發數。
統計周期時間設置為1秒,單機閾值設置為100。
流控效果選擇快速失敗。
表示1秒內只能最多處理100個并發請求,其余超出的請求都會快速失敗。
場景7:熱點商品秒殺
在秒殺等搶購商品的場景下,由于流量較大,可能會導致系統響應不及時甚至崩潰。為保證系統穩定,可配置熱點參數防護規則,超過一定閾值后,系統會拒絕多余的熱點商品流量。
例如購買同一商品,希望1秒內同個商品超過100次請求后,對多余的請求進行拒絕,可在新增熱點參數防護(HTTP 請求)對話框,配置以下信息,表示1秒內,針對熱點商品ID進行下單的請求,每個單獨商品ID每秒最多只能允許100個請求,其余超出的當前商品下單請求都會被拒絕,返回自定義的信息。
參數屬性選擇URL參數。
說明在參數屬性中,選擇當前熱點商品ID所對應的參數字段,例如,假設URL參數中存在一個stockId字段對應請求的商品ID,那么參數屬性可以選擇URL參數,并在參數名稱中填寫屬性在請求中對應的字段名稱。
URL參數名稱輸入stockId。
閾值輸入100個請求/每秒。
流控方式選擇快速失敗。
場景8:防止惡意刷單
例如在促銷活動中,某些惡意刷單請求較多的時候,會占用較多商品庫存或服務器資源。這種情況下可以針對其IP來源進行排隊等待的處理,使訪問請求勻速通過,防止過量的請求對服務穩定性產生影響。
在新增熱點參數防護(HTTP 請求)對話框中配置以下規則信息,表示每個不同來源IP調用此接口的請求會以每10毫秒一個的速度勻速通過(1秒/100=10毫秒),后續多余的請求要進行排隊等待。排隊中的請求如果等待時長超過30 ms就會立即失敗。
參數屬性選擇Client IP。
閾值類型默認選擇請求數。
閾值輸入100個請求/每秒。
流控方式選擇排隊等待。
超時時間輸入30。
是否開啟選擇開啟。