sentinel定义规则

spring cloud-alibaba git 地址 https://github.com/spring-cloud-incubator/spring-cloud-alibaba

定义规则

规则都可以再内存态中动态的查询和修改,修改之后立即生效,sentinel也提供了API,定制自己的规则策略

流量控制

Field 说明 默认值
resource 资源名,资源名是限流规则的作用对象
count 限流阈值
grade 限流阈值类型,是按照 QPS 还是线程数 QPS 模式
limitApp 是否根据调用者来限流
strategy 判断的根据是资源自身,还是根据其它资源 (refResource),还是根据链路入口 (refResource) 根据资源本身
controlBehavior 发生拦截后的流量整形和控制策略(直接拒绝 / 排队等待 / 慢启动模式) 直接拒绝

示例代码

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

熔断降级规则

Field 说明 默认值
resource 资源名,资源名是限流规则的作用对象
count 限流阈值
grade 降级模式,根据 RT 降级还是根据异常比例降级 RT
timeWindow 降级的时间
同一个资源可以同时有多个降级规则。

理解上面规则的定义之后,我们可以通过调用 DegradeRuleManager.loadRules()
方法来用硬编码的方式定义流量控制规则。
private static void initDegradeRule() {
        List 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);
    }

系统保护规则 (SystemRule)

Field 说明 默认值
highestSystemLoad 最大的 load1 -1 (不生效)
avgRt 所有入口流量的平均响应时间 -1 (不生效)
maxThread 入口流量的最大并发数 -1 (不生效)
我们可以通过调用 SystemRuleManager.loadRules() 方法来用硬编码的方式定义流量控制规则。
private void initSystemProtectionRule() {
  List rules = new ArrayList<>();
  SystemRule rule = new SystemRule();
  rule.setHighestSystemLoad(10);
  rules.add(rule);
  SystemRuleManager.loadRules(rules);
}

查询更改规则

会返回现有生效的规则:

    curl http://localhost:8719/getRules?type=
其中,type=flow 以 JSON 格式返回现有的限流规则;degrade 则返回现有生效
的降级规则列表;system 则返回系统保护规则。

修改规则:
    curl http://localhost:8719/setRules?type=&data=
type 可以输入 flow、degrade 等方式来制定更改的规则种类,data 则是对应的 JSON 格式的规则。

定制自己的持久化规则

上面的规则配置,都是存在内存中的。即如果应用重启,这个规则就会失效。因此我们提
供了开放的接口,您可以通过实现 DataSource 接口的方式,来自定义规则的存储数据源。
    
    整合动态配置系统,如 ZooKeeper、Nacos 等,动态地实时刷新配置规则
    结合 RDBMS、NoSQL、VCS 等来实现该规则
    配合 Sentinel Dashboard 使用

规则生效的结果

1.暴露的 HTTP 接口:通过运行下面命令 curl http://localhost:8719/cnode?id=<资源
名称>,观察返回的数据。如果规则生效,在返回的数据栏中的 block 以及 block(m) 中
会有显示
2.Sentinel 提供秒级的资源运行日志以及限流日志。

你可能感兴趣的:(spring,cloud)