限流是流量控制中最常用的手段之一,能有效地防止外部請求超出后端服務的承載能力,從而避免發生級聯雪崩。在高并發場景下,限流可以通過阻止一部分請求來保證后端服務一直可用。云原生網關支持路由級別的限流策略,可以精確地控制某個路由上的請求數量在設定的時間周期內不超過閾值。本文介紹云原生網關如何配置限流策略。
MSE控制臺的限流功能進行了升級,新增了多種限流模式(只有網關版本為1.1.0及以上的時候才可以使用新增的限流模式)。同時,老版本的限流功能也繼續保留。因此,需要您根據不同版本的網關來選擇不同的限流策略進行配置。
若您的網關版本為1.1.0以上,請參見本文的配置限流策略(新版)章節。
若您的網關版本為1.0.0版本,請參見本文的配置限流策略(舊版)章節。
配置限流策略(新版)
配置的閾值均為整體閾值,每個網關節點的限流閾值=整體閾值/節點數,若限流閾值為小數則向上取整。例如,路由Demo上的QPS為1001,如果您的網關節點數量是2,那么每個網關節點上,對路由Demo的QPS限制是501。
登錄MSE網關管理控制臺,并在頂部菜單欄選擇地域。
在左側導航欄,選擇云原生網關 > 網關列表,單擊目標網關名稱。
在左側導航欄,單擊路由管理,然后選擇路由頁簽。
單擊需要變更的路由規則操作列下的策略配置。
在策略配置頁簽,單擊限流。
網關版本為1.2.25及以上
配置流控規則
流控規則的原理是監控路由的QPS指標,當指標達到設定的閾值時立即攔截流量,避免后端服務被瞬時的流量高峰沖垮,從而保障高可用性。
在限流區域,單擊流控規則頁簽。
在流控規則區域,進行相關配置。
配置項
說明
總體QPS閾值
設置總體QPS閾值。
Web fallback 行為
選擇Web fallback 行為為返回指定內容或者跳轉到指定頁面。
選擇Web fallback 行為為跳轉到指定頁面時:
跳轉地址
輸入跳轉地址。
選擇Web fallback 行為為返回指定內容時:
HTTP狀態碼
設置HTTP狀態碼。默認為429。
返回 content-type
選擇返回 content-type為普通文本或JSON。
HTTP 返回文本
輸入返回文本。
是否開啟
開啟后,流控規則生效。
單擊新建或保存,在提示對話框中單擊確定。
配置并發規則
并發規則的原理是統計當前網關處理中的請求數之和,當指標達到設定的閾值時立即攔截流量,可配置為后端服務的最大并發處理請求數,實現在高并發下的后端服務可用性保護。
在限流區域,單擊并發規則頁簽。
在并發規則頁簽,進行相關配置。
配置項
說明
總體并發數閾值
設置總體并發數閾值。
Web fallback 行為
選擇Web fallback 行為為返回指定內容或者跳轉到指定頁面。
選擇Web fallback 行為為跳轉到指定頁面時:
跳轉地址
輸入跳轉地址。
選擇Web fallback 行為為返回指定內容時:
HTTP狀態碼
設置HTTP狀態碼。默認為429。
返回 content-type
選擇返回 content-type為普通文本或JSON。
HTTP 返回文本
輸入返回文本。
是否開啟
開啟后,并發規則生效。
單擊新建或保存,在提示對話框中單擊確定。
配置熔斷規則
熔斷規則的原理是監控路由的響應時間或異常比例,當達到指定的閾值時立即降低依賴優先級。在指定的時間內,系統不會調用該不穩定的資源,避免后端服務受到影響,從而保障后端的高可用性。當指定時間過后,再重新恢復對該資源的調用。
在限流區域,單擊熔斷規則頁簽。
在熔斷規則頁簽,進行相關配置。
配置項
說明
統計窗口時長
統計的時間窗口長度,取值范圍為1秒~120分鐘。
最小請求數目
觸發熔斷的最小請求數目,若當前統計窗口內的請求數小于此值,即使達到熔斷條件規則也不會觸發。
閾值類型
選擇以慢調用比例或異常比例作為閾值。
選擇以慢調用比例作為閾值,需要設置允許的慢調用RT(即最大的響應時間),請求的響應時間大于該值則統計為慢調用。在降級閾值中設置觸發熔斷的慢調用比例。規則開啟后,在單位統計時長內請求數目大于設置的最小請求數目,并且慢調用的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后,熔斷器會進入探測恢復狀態,若接下來的一個請求響應時間小于設置的慢調用RT,則結束熔斷;若大于設置的慢調用RT,則會再次被熔斷。
選擇以異常比例作為閾值,需要在降級閾值中設置觸發熔斷的異常比例。規則開啟后,在單位統計時長內業務異常數目大于設置的最小請求數目,并且異常的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。
熔斷時長(s)
即熔斷觸發后持續的時間。資源進入熔斷狀態后,在配置的熔斷時長內,請求都會快速失敗。
Web fallback 行為
選擇Web fallback 行為為返回指定內容或者跳轉到指定頁面。
選擇Web fallback 行為為跳轉到指定頁面時:
跳轉地址
輸入跳轉地址。
選擇Web fallback 行為為返回指定內容時:
HTTP狀態碼
設置HTTP狀態碼。默認為429。
返回 content-type
選擇返回 content-type為普通文本或JSON。
HTTP 返回文本
輸入返回文本。
是否開啟
開啟后,熔斷規則生效。
單擊新建或保存,在提示對話框中單擊確定。
網關版本為1.1.0-1.2.24
配置流控規則
流控規則的原理是監控路由的QPS指標,當指標達到設定的閾值時立即攔截流量,避免后端服務被瞬時的流量高峰沖垮,從而保障高可用性。
在限流面板,單擊流控規則頁簽,然后單擊新增流控規則。
在新增流控防護規則頁面,進行相關配置。
在配置防護規則頁面,根據您的需要設置總體QPS閾值,并打開是否開啟按鈕。然后單擊下一步配置限流行為。
在配置限流行為頁面,您可以通過單擊新增行為自定義觸發限流后的HTTP應答行為。
關聯好限流行為后,單擊新建,完成規則創建。
配置并發規則
并發規則的原理是統計當前網關處理中的請求數之和,當指標達到設定的閾值時立即攔截流量,可配置為后端服務的最大并發處理請求數,實現在高并發下的后端服務可用性保護。
在限流面板,單擊并發規則頁簽,然后單擊新增并發規則。
在新增并發防護規則頁面,進行相關配置。
在配置防護規則頁面,根據您的需要去設置總體并發數閾值并打開是否開啟按鈕。然后單擊下一步。
在配置限流行為頁面,您可以通過單擊新增行為自定義觸發限流后的HTTP響應行為。
關聯好限流行為后,單擊新建,完成規則創建。
配置熔斷規則
熔斷規則的原理是監控路由的響應時間或異常比例,當達到指定的閾值時立即降低依賴優先級。在指定的時間內,系統不會調用該不穩定的資源,避免后端服務受到影響,從而保障后端的高可用性。當指定時間過后,再重新恢復對該資源的調用。
在限流面板,單擊熔斷規則頁簽,然后單擊新增熔斷規則。
在新增熔斷防護規則頁面,進行相關配置。
在配置防護規則頁面,根據您的需要去設置總體并發數閾值并打開是否開啟按鈕。然后單擊下一步。
參數
描述
統計窗口時長
統計的時間窗口長度,取值范圍為1秒~120分鐘。
最小請求數目
觸發熔斷的最小請求數目,若當前統計窗口內的請求數小于此值,即使達到熔斷條件規則也不會觸發。
閾值類型
選擇以慢調用比例或異常比例作為閾值。
選擇以慢調用比例作為閾值,需要設置允許的慢調用RT(即最大的響應時間),請求的響應時間大于該值則統計為慢調用。在降級閾值中設置觸發熔斷的慢調用比例。規則開啟后,在單位統計時長內請求數目大于設置的最小請求數目,并且慢調用的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。經過熔斷時長后,熔斷器會進入探測恢復狀態,若接下來的一個請求響應時間小于設置的慢調用RT則結束熔斷,若大于設置的慢調用RT則會再次被熔斷。
選擇以異常比例作為閾值,需要在降級閾值中設置觸發熔斷的異常比例。規則開啟后,在單位統計時長內業務異常數目大于設置的最小請求數目,并且異常的比例大于閾值,則接下來的熔斷時長內請求會自動被熔斷。
熔斷時長
即熔斷觸發后持續的時間。資源進入熔斷狀態后,在配置的熔斷時長內,請求都會快速失敗。
熔斷恢復策略
熔斷器進入恢復階段(半開啟狀態)的恢復策略。
單次探測恢復:經過熔斷時長后,熔斷器會對接下來的一個請求進行探測,若該請求符合預期(不為慢調用或沒有異常),則結束熔斷;否則重新回到熔斷階段。
在配置限流行為頁面,您可以通過單擊新增行為自定義觸發限流后的HTTP響應行為。
關聯好限流行為后,單擊新增,完成規則創建。
配置限流策略(舊版)
登錄MSE網關管理控制臺。
在左側導航欄,選擇云原生網關 > 網關列表,并在頂部菜單欄選擇地域。
在網關列表頁面,單擊目標網關名稱。
在左側導航欄,單擊路由管理 > 路由配置頁面,在需要變更的路由規則操作列單擊策略配置。
在策略配置區域,單擊限流頁簽。
如果您之前沒有配置過路由限流策略,請單擊配置策略。
如果您之前已經配置過路由限流策略,請單擊限流策略右側的圖標。
在限流閾值規則中設置時間窗口和單擊請求閾值,然后單擊確定。
限流配置參數說明如下:
時間窗口:設置時間周期。默認設置為1秒,由周期數量和時間單位組成。
單機請求閾值:設置網關允許的單機請求閾值。
限流規則配置完成后,打開開啟狀態右側的開關。
開啟:開啟限流策略后,請求該條路由會受到設置的時間窗口和請求次數限制。
關閉:關閉限流策略后,請求該條路由的次數無限制。
結果驗證
執行以下測試請求命令:
curl -I http://121.196.XX.XX/demo/item/list //網關入口IP
未開啟限流策略的響應結果:
HTTP/1.1 200 OK x-content-type-options: nosniff x-xss-protection: 1; mode=block cache-control: no-cache, no-store, max-age=0, must-revalidate pragma: no-cache expires: 0 x-frame-options: DENY content-type: application/json content-length: 86 date: Mon, 29 Nov 2021 08:28:00 GMT x-envoy-upstream-service-time: 4 server: istio-envoy
開啟限流策略的響應結果(HTTP狀態碼返回429):
HTTP/1.1 429 Too Many Requests x-local-rate-limit: true content-length: 18 content-type: text/plain date: Mon, 29 Nov 2021 08:28:01 GMT server: istio-envoy