天天看點

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

前言:

本篇部落格介紹了有關于Sentinel的幾種常用的流控規則。

文章目錄

    • 一。概述
    • 二。QPS-直接-快速失敗
    • 三。線程-直接-快速失敗
    • 四。QPS-關聯-快速失敗
    • 五。QPS-鍊路-快速失敗
    • 六。QPS-直接-預熱
    • 七。QPS-直接-勻速排隊

一。概述

流量控制(flow control),其原理是監控應用流量的 QPS 或并發線程數等名額,當達到指定的門檻值時對流量進行控制,以避免被瞬時的流量高峰沖垮,進而保障應用的高可用性。

FlowSlot

會根據預設的規則,結合前面

NodeSelectorSlot

ClusterBuilderSlot

StatisticSlot

統計出來的實時資訊進行流量控制。

限流的直接表現是在執行

Entry nodeA = SphU.entry(resourceName)

的時候抛出

FlowException

異常。

FlowException

BlockException

的子類,您可以捕捉

BlockException

來自定義被限流之後的處理邏輯。

同一個資源可以建立多條限流規則。

FlowSlot

會對該資源的所有限流規則依次周遊,直到有規則觸發限流或者所有規則周遊完畢。

一條限流規則主要由下面幾個因素組成,我們可以組合這些元素來實作不同的限流效果:

  • resource

    :資源名,即限流規則的作用對象
  • count

    : 限流門檻值
  • grade

    : 限流門檻值類型(QPS 或并發線程數)
  • limitApp

    : 流控針對的調用來源,若為 default 則不區分調用來源
  • strategy

    : 調用關系限流政策
  • controlBehavior

    : 流量控制效果(直接拒絕、Warm Up、勻速排隊)

官方文檔位址:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6

二。QPS-直接-快速失敗

1.說明

當一秒内 QPS 超過某個門檻值的時候,則采取措施進行流量控制。

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

2.示例demo

控制器代碼:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

3.sentinel控制台操作

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

4.通路測試

一秒點選一次還是可以正常通路:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

若快速點選多次,超過了QPS門檻值,則被限流:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

三。線程-直接-快速失敗

1.說明

當一秒内 通路線程數超過某個門檻值的時候,則采取措施進行流量控制。

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

2.示例demo

控制器代碼:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

3.sentinel控制台操作

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

4.通路測試

快速點選多次依然可以通路:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

若打開兩個浏覽器視窗,快速切換并快速重新整理頁面,超過了通路線程數門檻值,則被限流:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

四。QPS-關聯-快速失敗

1.說明:

當接口A關聯了接口B時,在通路B接口超過了規定流量門檻值的情況下,接口A也将會被限流

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

2.示例demo

控制器代碼:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

3.sentinel控制台操作

先給testB建立流控規則:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

在建立/testA流控規則,關聯/testB:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

4.通路測試

使用postman建立新的通路接口集合集中通路

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

在postman通路testB接口的同時,去通路testA,發現testA被限流:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

五。QPS-鍊路-快速失敗

1.說明

當兩個接口A和接口B通路同一個資源時,若對接口A進行了資源的鍊路控制,超過了規定的門檻值後,再次通路接口A去請求資源時會出現報錯

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

2.執行個體demo

控制器代碼:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

service:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

配置檔案:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

3.sentinel控制台操作

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

4.通路測試

多次通路/testA接口,超過門檻值再次通路接口A去請求資源時會出現報錯:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

六。QPS-直接-預熱

1.說明

warm up就是為了防止突然進入的大流量大系統沖垮,在一定時間内将通路流量慢慢增加

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

公式:門檻值除以

coldFactor

(預設值為3),經過預熱時長後才會達到門檻值

預設

coldFactor

為3,即請求QPS從

threshold/3

開始,經預熱時長逐漸升至設定的QPS門檻值。

2.執行個體demo

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

3.sentinel控制台操作

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

4.通路測試

目前五秒門檻值為10/3=3,快速點選時,觸發限流:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

當五秒鐘過預熱後,門檻值到達10,再次快速點選,通路正常:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

七。QPS-直接-勻速排隊

1.說明

排隊等待,勻速通過

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

2.執行個體demo

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

3.sentinel控制台操作

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

4.通路測試

再次使用postman接口集合對testB接口進行通路:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)
SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

背景線程數每隔相應的延遲時間對接口進行通路,實作勻速接口限流:

SpringCloud Alibaba微服務中Sentinel流控規則(詳解+示例demo+測試效果)

繼續閱讀