AHAS的Web場景防護功能面向提供Web服務的應用,針對訪問請求中的一些參數項進行精細化的流量控制。對于使用了主流Web框架(Servlet容器、Spring Web、Spring Boot)的應用,AHAS實現了API粒度的請求參數解析,通過配置Web流控規則,可以對請求中IP、Host、Header、URL Param等參數維度的資源調用進行流量控制,保護業務與系統的穩定性。本文介紹如何為應用配置Web場景防護。
前提條件
將應用接入AHAS應用防護。具體操作,請參見接入應用方式。
Web場景防護要求AHAS Sentinel Java SDK版本≥1.10.1或Java Agent版本≥1.10.4。
說明Web場景防護暫不支持其他多語言SDK方式接入。
背景信息
在提供Web服務的場景下,除了API維度的限流降級防護,針對訪問請求來源IP、訪問請求Param參數等資源調用的限流防護是各種業務場景下能更好保證業務應用正常運行的手段。在一些大流量的Web業務場景下,可能不單是對當前接口進行限制,而需要針對當前訪問頻次最高的來源IP或訪問頻次最高的商品ID,有針對性地對其訪問進行限制,比如:
對一段時間內最頻繁購買的商品ID進行限制,以防止擊穿緩存而導致大量請求到數據庫的情況。
對一段時間內頻繁大量訪問的源IP進行限制,防止利用虛假信息惡意刷單。
操作步驟
登錄AHAS控制臺,然后在頁面左上角選擇地域。
- 在控制臺左側導航欄中選擇 。
- 在應用防護頁面單擊目標應用卡片。
在左側導航欄選擇 。
選擇以下任意一種方式進入Web防護的設置頁面:
在接口概覽頁簽右側單擊+圖標。
單擊Web流控頁簽,然后單擊新增Web防護規則。
在新增Web防護規則對話框中完成規則配置。
參數
說明
選擇防護場景
API
選擇需配置規則的接口API。
防護類型
默認為Web防護。
配置防護規則
參數屬性
針對所選API的參數屬性進行流量控制:
Client IP:請求端的IP地址。
說明若請求經過代理,會優先嘗試從X-Forwarded-For請求頭中獲取IP信息,如果其IP信息存在,將會作為實際請求端IP地址。
Remote Host:請求端的Host Header。
Header:根據指定的HTTP Header進行解析,要填寫某個具體的Header Key,則該規則針對這個Header Key下面的熱點值分別進行限制。選擇Header后,可選擇配置請求屬性值的匹配策略,只有匹配該模式的請求屬性值會納入統計和流控。
URL參數:根據指定的HTTP請求參數進行解析,需要填寫對應的參數名稱。選擇URL參數后,可選擇配置請求屬性值的匹配策略,只有匹配該模式的請求屬性值會納入統計和流控。
Body參數:根據指定的Body參數進行解析,需要填寫對應的參數名稱。
Path參數:根據指定的Path參數進行解析,需要填寫對應的參數名稱。
(可選)匹配模式和匹配串
若選擇參數屬性為Header或URL參數,可打開屬性值匹配開關,并設置匹配模式和匹配串。
匹配模式:
精確:嚴格按照給定的匹配串來匹配值。
子串:若請求屬性值包含該子串則匹配成功,比如若子串設置匹配ab,則aba和cabc都可以匹配,而cba則不能匹配。
正則:按給定的正則表達式匹配串進行匹配。
閾值類型
默認為請求數。
閾值
觸發對流控接口的統計維度對象的QPS閾值。設置時,需選擇統計時間間隔,支持秒、分鐘、小時和天4種維度。
例如,若閾值填寫為10,統計間隔選擇分,則表示每分鐘對應的請求數目不超過10個。
高級選項
流控方式
快速失敗:當閾值類型為QPS時,被攔截的流量將快速失敗,即達到閾值時,立即攔截請求。
說明被攔截拒絕掉的請求,將返回行為管理中配置的自定義信息,若未配置會返回默認行為,即429錯誤碼加上默認文本信息。
勻速排隊:當閾值類型為QPS時,被攔截的請求將勻速通過,允許排隊等待。需設置具體的超時時間,預計達到超時時間的請求會立即失敗,而不會排隊。例如,QPS配置為10,則代表請求每100 ms才能通過一個,多出的請求將排隊等待通過。超時時間代表最大排隊時間,超出最大排隊時間的請求將會直接被拒絕。
說明勻速排隊時,QPS不要超過1000(請求間隔1 ms)。
Burst size
當流控方式選擇為快速失敗時,可以額外設置一個Burst Size,即針對突發請求額外允許的請求數目。
超時時間
當流控方式選擇為勻速排隊時,需設置具體的超時時間,單位為ms。例如,QPS配置為5,則代表請求每200 ms才能通過一個,多出的請求將排隊等待通過。超時時間代表最大排隊時間,超出最大排隊時間的請求將會直接被拒絕。
是否開啟
開啟:Web防護規則創建后即生效。
關閉:Web防護規則創建后不生效。
配置限流行為
接口類型
默認為Web。
關聯行為
默認行為:默認為此選項。
說明如您無需自定義限流后處理行為,選擇默認行為即可。
默認行為對應應用基礎設置.。
里面配置的全局行為。更多信息,請參見默認行為為返回429錯誤碼加上默認的文本信息。
新增行為:新增自定義限流后處理行為,創建完成后您可在關聯行為選擇框中下拉選擇。更多詳細信息,請參見配置Web行為。
參數 描述 示例值 行為名稱 該行為的名稱。長度不超過128個字符,同個應用內名稱不能重復。 測試行為 針對的資源類型 包括Web和RPC兩種類型,此處選擇Web類型。 Web Web限流處理策略 - 該行為的名稱。長度不超過128個字符,同個應用內名稱不能重復。
- 跳轉到指定頁面:需設置指定跳轉的URL。表示Web接口訪問觸發規則后系統會跳轉指定的頁面URL。
測試行為 針對的資源類型 包括Web和RPC兩種類型,此處選擇Web類型。 Web HTTP返回狀態碼 默認為429。當Web限流處理策略為自定義返回時,需要填寫。 429 針對的資源類型 包括Web和RPC兩種類型,此處選擇Web類型。 Web 返回content-type 設置返回內容的格式為普通文本(TEXT)或JSON。當Web限流處理策略為自定義返回時,需要填寫。 JSON字符串 HTTP返回文本 輸入當Web接口訪問觸發規則后返回的內容。當Web限流處理策略為自定義返回時,需要填寫。 {"message": "blocked oops"} 跳轉地址 輸入當Web接口訪問觸發規則后系統會跳轉的頁面URL。當Web限流處理策略為跳轉到指定頁面時,需要填寫。
說明: 跳轉的本質是返回302狀態碼。對于后端服務直接渲染返回的頁面,跳轉是有效的;對于前端通過AJAX請求到后端服務后,再解析后端返回到前端展示的頁面,跳轉無效。
http://ahas.console.aliyun.com 取消行為:取消接口與關聯行為的關聯。
操作完成后,單擊新增。
您可在Web流控頁簽查看該條防護規則。
在Web流控頁簽,選擇目標Web防護規則,單擊批量開啟。
規則開啟后,當前資源會按照配置的Web流控規則進行流量控制。
Web防護規則常用場景
場景一:熱點商品秒殺
在秒殺等搶購商品的場景下,由于流量較大,可能會導致系統響應不及時甚至崩潰。為保證系統穩定,可配置熱點規則,超過一定閾值后,系統會讓購買熱點商品的流量排隊等待。
例如購買同一商品,希望1秒內同個商品超過100次請求后,對多余的請求進行拒絕,可在新建Web防護規則對話框中配置以下規則信息,表示1秒內,針對熱點商品ID進行下單的請求,每個單獨商品ID每秒最多只能允許100個請求,其余超出的當前商品下單請求都會被拒絕,返回自定義的信息。
參數屬性輸入URL參數。
說明在參數屬性中,選擇當前熱點商品ID所對應的參數字段,例如,假設URL參數中存在一個stockId字段對應請求的商品ID,那么參數屬性可以選擇URL參數,并在參數名稱中填寫屬性在請求中對應的字段名稱。
URL參數名稱輸入stockId。
閾值輸入100個請求/每秒。
流控方式選擇快速失敗。
場景二:防止惡意刷單
例如在促銷活動中,某些惡意刷單請求較多的時候,會占用較多商品庫存或服務器資源。這種情況下可以針對其IP來源進行排隊等待的處理,使訪問請求勻速通過,防止過量的請求對服務穩定性產生影響。在新建Web防護規則對話框中配置以下規則信息,表示每個不同來源IP調用此接口的請求會以每10 ms一個的速度勻速通過(1s/100=10 ms),后續多余的請求要進行排隊等待。排隊中的請求如果等待時長超過30 ms就會立即失敗。
參數 | 說明 |
參數屬性 | 選擇Client IP。 |
閾值類型 | 默認選擇請求數。 |
閾值 | 輸入100個請求/每秒。 |
流控方式 | 選擇勻速排隊。 |
超時時間 | 輸入30。 |
是否開啟 | 選擇開啟。 |