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.dashboard.auth.password | String | 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線程池隔離
線程池是通過限制線程數,來對資源使用進行限制,而不是隔離。限制資源使用,防止系統過載。
使用線程池的優點
- 使用線程池隔離可以完全隔離依賴的服務,請求線程可以快速找回。
- 當線程池出現問題時,線程池隔離是獨立的,不會影響其他服務的接口。
- 當失敗的服務變得可用時,線程池将清理并立即修複,而不需要一個漫長的等待。
- 獨立的線程池提高了并發性。
使用線程池的缺點
線程池的主要缺點是增加了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自帶注解
思路
- 建立一個ExceptionHandler類,用@RestControllerAdvice(basePackages = “com.xxx.controller”)注解指明要處理的包
- 在方法上用@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 | 流控針對的調用來源 | ,代表不區分調用來源 |
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
)
ParamFlowRule
更多操作Field | 說明 | 預設值 |
---|---|---|
resource | 資源名,必填 | |
count | 限流門檻值,必填 | |
grade | 限流模式 | QPS 模式 |
durationInSec | 統計視窗時間長度(機關為秒),1.6.0 版本開始支援 | 1s |
controlBehavior | 流控效果(支援快速失敗和勻速排隊模式),1.6.0 版本開始支援 | 快速失敗 |
maxQueueingTimeMs | 最大排隊等待時長(僅在勻速排隊模式生效),1.6.0 版本開始支援 | 0ms |
paramIdx | 熱點參數的索引,必填,對應 中的參數索引位置 | |
paramFlowItemList | 參數例外項,可以針對指定的參數值單獨設定限流門檻值,不受前面 門檻值的限制。僅支援基本類型和字元串類型 | |
clusterMode | 是否是叢集參數流控規則 | |
clusterConfig | 叢集流控相關配置 |
系統保護規則 (SystemRule)
Sentinel 系統自适應限流從整體次元對應用入口流量進行控制,結合應用的 Load、CPU 使用率、總體平均 RT、入口 QPS 和并發線程數等幾個次元的監控名額,通過自适應的流控政策,讓系統的入口流量和系統的負載達到一個平衡,讓系統盡可能跑在最大吞吐量的同時保證系統整體的穩定性。
系統規則包含下面幾個重要的屬性:
Field | 說明 | 預設值 |
---|---|---|
highestSystemLoad | 觸發值,用于觸發自适應控制階段 | -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
)
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
)
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
}
]