天天看點

Alibaba Sentinel功能入門與配置持久化Alibaba Sentinel功能入門與配置持久化

Alibaba Sentinel功能入門與配置持久化

文章目錄

  • Alibaba Sentinel功能入門與配置持久化
    • 1.準備工作
    • 2.整合與啟動
      • 2.1項目引入依賴:
      • 2.2項目yaml配置
      • 2.3控制台配置項
      • 2.4啟動項目與sentinel-dashboard.jar
      • 2.5測試
    • 3.可能出現的異常
      • 3.1.The Bean Validation API is on the classpath but no implementation could be found
      • 3.2.sentinel-dashboard.jar啟動:java.lang.IllegalStateException: Cannot load configuration class:com.alibaba.csp.sentinel.dashboard.DashboardApplication
    • 4.具體使用配置
      • 4.1限流規則
      • 4.2限流結果
    • 5.服務降級、隔離與熔斷
      • 5.1consumer端Feign整合Sentinel
        • 5.1.1引入依賴
        • 5.1.2yaml添加配置
        • 5.1.3編寫失敗後的傳回方法FallbackFactory
        • 5.1.4修改provider端的Controller
      • 5.2線程隔離
        • 5.2.1信号量隔離(預設)
        • 5.2.2線程池隔離
          • 使用線程池的優點
          • 使用線程池的缺點
      • 5.3線程熔斷
        • 5.3.1慢調用比例 (SLOW_REQUEST_RATIO)
        • 5.3.2異常比例 (DEGRADE_GRADE_EXCEPTION_RATIO)
        • 5.3.3異常數 (DEGRADE_GRADE_EXCEPTION_COUNT)
    • 6.統一處理異常
      • 6.1方法一:實作sentinel内置接口
      • 6.2方法二:通過SpringCloud自帶注解
        • 思路
    • 7.生産環境下配置持久化(整合nacos的push模式)
      • 7.1規則屬性一覽
        • 流量規則(FlowRule)
        • 熔斷降級規則(DegradeRule)
        • 熱點參數規則(`ParamFlowRule`)
        • 系統保護規則 (SystemRule)
      • 7.2寫死實作
        • 流量規則(FlowRule)
        • 熔斷降級規則 (DegradeRule)
        • 熱點參數規則(`ParamFlowRule`)
        • 系統保護規則 (SystemRule)
      • 7.3json實作
        • 引入依賴
        • yaml
        • 流量規則(FlowRule)
        • 熔斷降級規則 (DegradeRule)
        • 熱點參數規則(`ParamFlowRule`)
        • 系統保護規則 (SystemRule)

1.準備工作

  • sentinel dashboard jar包下載下傳,這裡結合項目SpringCloud版本,選用官網推薦的1.8.1
  • 适當版本的JDK(可參考dashboard包内文檔建議)
  • 一個微服務項目(我這裡使用的是之前自己寫的springcloud+nacos項目,源代碼參見SpringCloudAlibaba: SpringCloudAlibaba練習項目 (gitee.com),思路參見https://blog.csdn.net/qq_61603262/article/details/127345832),具體版本如下:
    <druid.version>1.2.13</druid.version>
            <mysql.version>8.0.30</mysql.version>
            <spring-boot-starter-data-jdbc.version>2.7.4</spring-boot-starter-data-jdbc.version>
            <spring-boot-starter-jdbc.version>2.7.4</spring-boot-starter-jdbc.version>
            <mybatis.version>2.1.4</mybatis.version>
            <springdoc.version>1.6.11</springdoc.version>
               

2.整合與啟動

2.1項目引入依賴:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>
           

2.2項目yaml配置

spring: 
  cloud:
    sentinel:
      enabled: true
      transport:
        dashboard: localhost:8080 #這裡配置的是dashboard對應的端口号,項目與jar包運作端口保持一緻即可
           

2.3控制台配置項

控制台的一些特性可以通過配置項來進行配置,配置項主要有兩個來源:

System.getProperty()

System.getenv()

,同時存在時後者可以覆寫前者。

通過環境變量進行配置時,因為不支援

.

是以需要将其更換為

_

配置項 類型 預設值 最小值 描述
auth.enabled boolean true - 是否開啟登入鑒權,僅用于日常測試,生産上不建議關閉
sentinel.dashboard.auth.username String sentinel - 登入控制台的使用者名,預設為

sentinel

sentinel.dashboard.auth.password String sentinel - 登入控制台的密碼,預設為

sentinel

sentinel.dashboard.app.hideAppNoMachineMillis Integer 60000 是否隐藏無健康節點的應用,距離最近一次主機心跳時間的毫秒數,預設關閉
sentinel.dashboard.removeAppNoMachineMillis Integer 120000 是否自動删除無健康節點的應用,距離最近一次其下節點的心跳時間毫秒數,預設關閉
sentinel.dashboard.unhealthyMachineMillis Integer 60000 30000 主機失聯判定,不可關閉
sentinel.dashboard.autoRemoveMachineMillis Integer 300000 距離最近心跳時間超過指定時間是否自動删除失聯節點,預設關閉
sentinel.dashboard.unhealthyMachineMillis Integer 60000 30000 主機失聯判定,不可關閉
server.servlet.session.cookie.name String sentinel_dashboard_cookie - 控制台應用的 cookie 名稱,可單獨設定避免同一域名下 cookie 名沖突

配置示例:

  • 指令行方式:
java -Dsentinel.dashboard.app.hideAppNoMachineMillis=60000
           
  • Java 方式:
System.setProperty("sentinel.dashboard.app.hideAppNoMachineMillis", "60000");
           
  • 環境變量方式:
sentinel_dashboard_app_hideAppNoMachineMillis=60000
           

2.4啟動項目與sentinel-dashboard.jar

java -jar sentinel-dashboard.jar
           

2.5測試

通路項目中任意服務,在dashboard能夠看到該項目的spring.application.name,打開頁籤後可以看到相關通路統計。

3.可能出現的異常

3.1.The Bean Validation API is on the classpath but no implementation could be found

***************************
APPLICATION FAILED TO START
***************************

Description:

The Bean Validation API is on the classpath but no implementation could be found

Action:

Add an implementation, such as Hibernate Validator, to the classpath
           

解決方案:

引入依賴

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>8.0.0.Final</version>
</dependency>
           

如不可行,嘗試引入springboot自帶的validation:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>
           

3.2.sentinel-dashboard.jar啟動:java.lang.IllegalStateException: Cannot load configuration class:com.alibaba.csp.sentinel.dashboard.DashboardApplication

啟動時換用下述指令(加入啟動參數):

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/sun.net.util=ALL-UNNAMED -jar sentinel-dashboard-1.8.1.jar
           

4.具體使用配置

4.1限流規則

  • 普通限流
  • 關聯限流:當對A通路的QPS/線程數達到門檻值時,對B限流。使用時需要配置B的限流規則。即給誰限流就配置誰的限流規則(配置通路優先級較低的服務)。
  • 鍊路限流:限制來自不同路徑對同一服務的通路。需要設定web-context-unify: false才會生效。限制那個路徑的QPS就配置哪個路徑。
  • 熱點參數限流:根據請求攜帶參數限流。

    ​ 注意:該配置隻對添加了@SentinelResource注解的資源生效

4.2限流結果

  • 快速失敗:抛出FlowException,傳回429錯誤
  • warm up:同快速失敗,但在抛出異常的同時,門檻值會逐漸增大(預設從最大值的三分之一開始)。常用于服務冷啟動。

    ​ 參數:預熱時長

  • 排隊等待:接到超過單機門檻值的請求不會立即抛出異常,把請求放進隊列延遲進行直至逾時或被執行。

5.服務降級、隔離與熔斷

5.1consumer端Feign整合Sentinel

5.1.1引入依賴

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
    <version>2.2.7.RELEASE</version>
</dependency>
           

5.1.2yaml添加配置

feign:
  sentinel:
    enabled: true
           

5.1.3編寫失敗後的傳回方法FallbackFactory

這裡要注意的是,FallbackFactory有兩個類,即OpenFeign的和Hystrix的,這裡我們要繼承的是Hystrix的。

package com.zjy.consumer9000.config;

import com.zjy.consumer9000.service.DeptFeignService;
import feign.hystrix.FallbackFactory;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DeptFallbackFactory implements FallbackFactory<DeptFeignService> {
    @Override
    public DeptFeignService create(Throwable cause) {
        return new DeptFeignService() {
            @Override
            public List<Map> getAll() {
                Map map=new HashMap();
                map.put("msg","unknown exception");
                List<Map> list=new ArrayList<>();
                list.add(map);
                return list;
            }

            @Override
            public Map queryById(Integer departmentId) {
                Map map=new HashMap();
                map.put("msg","not found");
                return map;
            }

            @Override
            public List<Map> queryByName(String departmentName) {
                Map map=new HashMap();
                map.put("msg","there's no such a department");
                List<Map> list=new ArrayList<>();
                list.add(map);
                return list;
            }
        };
    }
}

           

注冊bean

package com.zjy.consumer9000.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class FallbackFactoryConfig {
    @Bean
    public DeptFallbackFactory getDeptFallbackFactory(){
        return new DeptFallbackFactory();
    }
}
           

在FeignClient加入注解以激活fallbackFactory

@FeignClient(value = "dataProvider8000",fallbackFactory = DeptFallbackFactory.class)
           

5.1.4修改provider端的Controller

@Operation(summary = "通過id查找部門")
@GetMapping("/query/id/{departmentId}")
@SentinelResource
public Department queryById(@PathVariable Integer departmentId){
    Department dept=departmentService.getDepartmentById(departmentId);
    if(dept.getDepartmentName()==null)
        throw new NullPointerException("there's no such a dept!"){
    };
    return dept;
}
           

這裡筆者隻改了其中一個方法來驗證,其他類似

5.2線程隔離

5.2.1信号量隔離(預設)

信号量隔離的其實很簡單,就是在Constumer和Provider之間加上一個的[消息隊列,在指定的時間内隻允許指定的請求量能夠通路到Provider,如果請求超出,則傳回托底資料。

5.2.2線程池隔離

線程池是通過限制線程數,來對資源使用進行限制,而不是隔離。限制資源使用,防止系統過載。

使用線程池的優點
  1. 使用線程池隔離可以完全隔離依賴的服務,請求線程可以快速找回。
  2. 當線程池出現問題時,線程池隔離是獨立的,不會影響其他服務的接口。
  3. 當失敗的服務變得可用時,線程池将清理并立即修複,而不需要一個漫長的等待。
  4. 獨立的線程池提高了并發性。
使用線程池的缺點

線程池的主要缺點是增加了cpu的開銷,每個指令涉及到排隊,排程和上下文切換都是在一個獨立的線程上運作的。

5.3線程熔斷

5.3.1慢調用比例 (SLOW_REQUEST_RATIO)

選擇以慢調用比例作為門檻值,需要設定允許的慢調用 RT(即最大的響應時間),請求的響應時間大于該值則統計為慢調用。當機關統計時長(statIntervalMs)内請求數目大于設定的最小請求數目,并且慢調用的比例大于門檻值,則接下來的熔斷時長内請求會自動被熔斷。經過熔斷時長後熔斷器會進入探測恢複狀态(HALF-OPEN 狀态),若接下來的一個請求響應時間小于設定的慢調用 RT 則結束熔斷,若大于設定的慢調用 RT 則會再次被熔斷。

Sentinel預設統計的RT上限是4900ms,超出此門檻值的都會算作4900ms,若需要變更此上限可以通過啟動配置項-Dcsp.sentinel.statistic.max.rt=xxx來配置

5.3.2異常比例 (DEGRADE_GRADE_EXCEPTION_RATIO)

當資源的每秒請求量 >= N(可配置),并且每秒異常總數占通過量的比值超過門檻值(DegradeRule 中的 count)之後,資源進入降級狀态,即在接下的時間視窗(DegradeRule 中的 timeWindow,以 s 為機關)之内,對這個方法的調用都會自動地傳回。異常比率的門檻值範圍是 [0.0, 1.0],代表 0% - 100%。

5.3.3異常數 (DEGRADE_GRADE_EXCEPTION_COUNT)

當資源近 1 分鐘的異常數目超過門檻值之後會進行熔斷。注意由于統計時間視窗是分鐘級别的,若 timeWindow 小于 60s,則結束熔斷狀态後仍可能再進入熔斷狀态。

6.統一處理異常

6.1方法一:實作sentinel内置接口

sentinel正常工作情況下抛出的異常:BlockException(FlowException、ParamFlowException、DegradeException、AuthorityException、SystemBlockException )。相應的,sentinel提供了處理該異常的接口BlockExceptionHandler。我們隻需要實作該接口就可以完成對該異常的自定義抛出。代碼如下

package com.zjy.dataprovider8000.config;

import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class SentinelBlockHandler implements BlockExceptionHandler {


    @Override
    public void handle(HttpServletRequest httpServletRequest,
                       HttpServletResponse httpServletResponse,
                       BlockException e) throws Exception {
        String msg="未知錯誤";
        int status=429;
        if (e instanceof FlowException) msg = "限流異常";
        if (e instanceof DegradeException)msg = "服務降級";
        if (e instanceof ParamFlowException)msg = "熱點限流";

        httpServletResponse.getWriter().print(msg);
        httpServletResponse.setContentType("application/json;charset=utf-8");
        httpServletResponse.setStatus(status);
        System.err.println(msg);
    }
}

           

6.2方法二:通過SpringCloud自帶注解

思路

  1. 建立一個ExceptionHandler類,用@RestControllerAdvice(basePackages = “com.xxx.controller”)注解指明要處理的包
  2. 在方法上用@ExceptionHandler(value= Exception.class)指明要捕捉的異常類
package com.zjy.dataprovider8000.config;

import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException;
import com.alibaba.csp.sentinel.slots.block.flow.FlowException;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;


@RestControllerAdvice(basePackages = "com.zjy.dataprovider8000.controller")
public class SentinelExceptionHandler  {
    @ResponseBody
    @ExceptionHandler(value= Exception.class)
    public Map handle(HttpServletRequest request, HttpServletResponse response, BlockException e) throws Exception {
        String msg = "未知異常";
        int status = 429;

        if (e instanceof FlowException) {
            msg = "請求被限流了";
        } else if (e instanceof ParamFlowException) {
            msg = "請求被熱點參數限流";
        } else if (e instanceof DegradeException) {
            msg = "請求被降級了";
        } else if (e instanceof AuthorityException) {
            msg = "沒有權限通路";
            status = 401;
        }

        response.setContentType("application/json;charset=utf-8");
        response.setStatus(status);
        //response.getWriter().println("{\"msg\": " + msg + ", \"status\": " + status + "}");
        HashMap map=new HashMap();
        map.put("msg",msg);
        return map;
    }
}
           

這裡我們沒有用網關來限制權限,之後将全部交由安全架構解決

7.生産環境下配置持久化(整合nacos的push模式)

7.1規則屬性一覽

流量規則(FlowRule)

Field 說明 預設值
resource 資源名,資源名是限流規則的作用對象
count 限流門檻值
grade 限流門檻值類型,QPS 模式(1)或并發線程數模式(0) QPS 模式
limitApp 流控針對的調用來源

default

,代表不區分調用來源
strategy 調用關系限流政策:直接、鍊路、關聯 根據資源本身(直接)
controlBehavior 流控效果(直接拒絕/WarmUp/勻速+排隊等待),不支援按調用關系限流 直接拒絕
clusterMode 是否叢集限流

熔斷降級規則(DegradeRule)

Field 說明 預設值
resource 資源名,即規則的作用對象
grade 熔斷政策,支援慢調用比例/異常比例/異常數政策 慢調用比例
count 慢調用比例模式下為慢調用臨界 RT(超出該值計為慢調用);異常比例/異常數模式下為對應的門檻值
timeWindow 熔斷時長,機關為 s
minRequestAmount 熔斷觸發的最小請求數,請求數小于該值時即使異常比率超出門檻值也不會熔斷(1.7.0 引入) 5
statIntervalMs 統計時長(機關為 ms),如 60*1000 代表分鐘級(1.8.0 引入) 1000 ms
slowRatioThreshold 慢調用比例門檻值,僅慢調用比例模式有效(1.8.0 引入)

熱點參數規則(

ParamFlowRule

更多操作Field 說明 預設值
resource 資源名,必填
count 限流門檻值,必填
grade 限流模式 QPS 模式
durationInSec 統計視窗時間長度(機關為秒),1.6.0 版本開始支援 1s
controlBehavior 流控效果(支援快速失敗和勻速排隊模式),1.6.0 版本開始支援 快速失敗
maxQueueingTimeMs 最大排隊等待時長(僅在勻速排隊模式生效),1.6.0 版本開始支援 0ms
paramIdx 熱點參數的索引,必填,對應

SphU.entry(xxx, args)

中的參數索引位置
paramFlowItemList 參數例外項,可以針對指定的參數值單獨設定限流門檻值,不受前面

count

門檻值的限制。僅支援基本類型和字元串類型
clusterMode 是否是叢集參數流控規則

false

clusterConfig 叢集流控相關配置

系統保護規則 (SystemRule)

Sentinel 系統自适應限流從整體次元對應用入口流量進行控制,結合應用的 Load、CPU 使用率、總體平均 RT、入口 QPS 和并發線程數等幾個次元的監控名額,通過自适應的流控政策,讓系統的入口流量和系統的負載達到一個平衡,讓系統盡可能跑在最大吞吐量的同時保證系統整體的穩定性。

系統規則包含下面幾個重要的屬性:

Field 說明 預設值
highestSystemLoad

load1

觸發值,用于觸發自适應控制階段
-1 (不生效)
avgRt 所有入口流量的平均響應時間 -1 (不生效)
maxThread 入口流量的最大并發數 -1 (不生效)
qps 所有入口資源的 QPS -1 (不生效)
highestCpuUsage 目前系統的 CPU 使用率(0.0-1.0) -1 (不生效)

7.2寫死實作

流量規則(FlowRule)

private void initFlowQpsRule() {
    List<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule(resourceName);
    // set limit qps to 20
    rule.setCount(20);
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setLimitApp("default");
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
}
           

熔斷降級規則 (DegradeRule)

private void initDegradeRule() {
    List<DegradeRule> rules = new ArrayList<>();
    DegradeRule rule = new DegradeRule();
    rule.setResource(KEY);
    // set threshold RT, 10 ms
    rule.setCount(10);
    rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
    rule.setTimeWindow(10);
    rules.add(rule);
    DegradeRuleManager.loadRules(rules);
}
           

熱點參數規則(

ParamFlowRule

private void initDParamFlowRule() {
   ParamFlowRule rule = new ParamFlowRule(resourceName)
    .setParamIdx(0)
    .setCount(5);
// 針對 int 類型的參數 PARAM_B,單獨設定限流 QPS 門檻值為 10,而不是全局的門檻值 5.
ParamFlowItem item = new ParamFlowItem().setObject(String.valueOf(PARAM_B))
    .setClassType(int.class.getName())
    .setCount(10);
rule.setParamFlowItemList(Collections.singletonList(item));
ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
}
           

系統保護規則 (SystemRule)

private void initSystemRule() {
    List<SystemRule> rules = new ArrayList<>();
    SystemRule rule = new SystemRule();
    rule.setHighestSystemLoad(10);
    rules.add(rule);
    SystemRuleManager.loadRules(rules);
}
           

7.3json實作

引入依賴

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
           

yaml

spring:
  cloud:
    sentinel:
      datasource:
        # 名稱随意
        flow:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-flow-rules
            groupId: SENTINEL_GROUP
            # 規則類型,取值見:
            # org.springframework.cloud.alibaba.sentinel.datasource.RuleType
            rule-type: flow
        degrade:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-degrade-rules
            groupId: SENTINEL_GROUP
            rule-type: degrade
        system:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-system-rules
            groupId: SENTINEL_GROUP
            rule-type: system
        authority:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-authority-rules
            groupId: SENTINEL_GROUP
            rule-type: authority
        param-flow:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-param-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: param-flow

           

流量規則(FlowRule)

[
  {
    // 資源名
    "resource": "/test",
    // 針對來源,若為 default 則不區分調用來源
    "limitApp": "default",
    // 限流門檻值類型(1:QPS;0:并發線程數)
    "grade": 1,
    // 門檻值
    "count": 1,
    // 是否是叢集模式
    "clusterMode": false,
    // 流控效果(0:快速失敗;1:Warm Up(預熱模式);2:排隊等待)
    "controlBehavior": 0,
    // 流控模式(0:直接;1:關聯;2:鍊路)
    "strategy": 0,
    // 預熱時間(秒,預熱模式需要此參數)
    "warmUpPeriodSec": 10,
    // 逾時時間(排隊等待模式需要此參數)
    "maxQueueingTimeMs": 500,
    // 關聯資源、入口資源(關聯、鍊路模式)
    "refResource": "rrr"
  }
]

           

熔斷降級規則 (DegradeRule)

[
  {
  	// 資源名
    "resource": "/test1",
    "limitApp": "default",
    // 熔斷政策(0:慢調用比例,1:異常比率,2:異常計數)
    "grade": 0,
    // 最大RT、比例門檻值、異常數
    "count": 200,
    // 慢調用比例門檻值,僅慢調用比例模式有效(1.8.0 引入)
    "slowRatioThreshold": 0.2,
    // 最小請求數
    "minRequestAmount": 5,
    // 當機關統計時長(類中預設1000)
    "statIntervalMs": 1000,
    // 熔斷時長
    "timeWindow": 10
  }
]

           

熱點參數規則(

ParamFlowRule

[
  {
  	// 資源名
    "resource": "/test1",
    // 限流模式(QPS 模式,不可更改)
    "grade": 1,
    // 參數索引
    "paramIdx": 0,
    // 單機門檻值
    "count": 13,
    // 統計視窗時長
    "durationInSec": 6,
    // 是否叢集 預設false
    "clusterMode": 預設false,
    // 
    "burstCount": 0,
    // 叢集模式配置
    "clusterConfig": {
      // 
      "fallbackToLocalWhenFail": true,
   	  // 
      "flowId": 2,
      // 
      "sampleCount": 10,
      // 
      "thresholdType": 0,
      // 
      "windowIntervalMs": 1000
    },
    // 流控效果(支援快速失敗和勻速排隊模式)
    "controlBehavior": 0,
    // 
    "limitApp": "default",
    // 
    "maxQueueingTimeMs": 0,
    // 進階選項
    "paramFlowItemList": [
      {
      	// 參數類型
        "classType": "int",
      	// 限流門檻值
        "count": 222,
      	// 參數值
        "object": "2"
      }
    ]
  }
]
           

系統保護規則 (SystemRule)

[
  {
  	// RT
    "avgRt": 1,
    // CPU 使用率
    "highestCpuUsage": -1,
    // LOAD
    "highestSystemLoad": -1,
    // 線程數
    "maxThread": -1,
    // 入口 QPS
    "qps": -1
  }
]