美文网首页
Sentinel学习(二)在Sring项目配置和使用Sentin

Sentinel学习(二)在Sring项目配置和使用Sentin

作者: nzdxwl | 来源:发表于2019-11-12 09:46 被阅读0次

    前面的文章创建了简单的Spring Boot应用,使用了Nacos作为配置和服务发现中心,现在再为它添加Sentinel流量监控功能。
    以下我们为之前的项目添加 Sentinel功能,由于是Spring Boot以及Cloud,此次我们也是使用Spring Cloud Alibaba的组件spring-cloud-alibaba-sentinal,更多详细信息可以参考官方文档 Spring Cloud Alibaba Sentinel

    配置:

    1. pom.xml中添加相关依赖项:

       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
           <version>0.9.0.RELEASE</version>
       </dependency>
      
       <dependency>
           <groupId>com.alibaba.csp</groupId>
           <artifactId>sentinel-core</artifactId>
           <version>1.6.3</version>
       </dependency>
      

    由于spring-cloud-starter-alibaba-sentinel已经为我们引入了使用Sentinel所需大部分依赖项,我们只需要再添加sentinel-core依赖项即可。

    1. 应用中的配置
    #指定dashbord地址
    spring.cloud.sentinel.transport.dashboard=localhost:9090
    #提前触发Sentinel初始化
    spring.cloud.sentinel.eager=true
    #指定sentinel数据源
    spring.cloud.sentinel.datasource.ds2.nacos.server-addr=localhost:8848
    spring.cloud.sentinel.datasource.ds2.nacos.data-id=sentinel
    spring.cloud.sentinel.datasource.ds2.nacos.group-id=quickstart_cloud
    spring.cloud.sentinel.datasource.ds2.nacos.data-type=json
    spring.cloud.sentinel.datasource.ds2.nacos.rule-type=flow
    

    sentinel支持四种数据源,文件、nacos配置、zookeeper配置和apollo配置,由于我们已经应用nacos作为配置中心,因此也将sentinel的规则数据配置在nacos上面,具体dataid和group根据实际配置,以下使用json格式流量控制规则配置为例:

    [
      {
        "resource": "/hello",
        "controlBehavior": 0,
        "count": 1,
        "grade": 1,
        "limitApp": "default",
        "strategy": 0
      },
      {
        "resource": "/test",
        "controlBehavior": 0,
        "count": 0,
        "grade": 1,
        "limitApp": "default",
        "strategy": 0
      },
      {
        "resource": "GET:http://www.taobao.com",
        "controlBehavior": 0,
        "count": 0,
        "grade": 1,
        "limitApp": "default",
        "strategy": 0
      }
    ]
    

    配置解析:

    • resource: 资源名,即限流规则的作用对象
    • grade:流量控制主要有两种统计类型,一种是统计并发线程数,另外一种则是统计 QPS,由grade字段定义, 0 代表根据并发数量来限流,1 代表根据 QPS 来进行流量控制
    • controlBehavior: 当 QPS 超过某个阈值的时候,则采取措施进行流量控制。流量控制包括:直接拒绝(0)、Warm Up(1)、匀速排队(2),默认直接拒绝,3是热身+匀速排队
    • count: 限流阈值
    • limitApp: 根据调用来源进行流量控制,defaut表示不区分调用者,{some_origin_name},可以指定一个或多个调用方,使用逗号分隔;other表示针对除 {some_origin_name} 以外的其余调用方的流量进行流量控制。例如,资源NodeA配置了一条针对调用者 caller1 的限流规则,同时又配置了一条调用者为 other 的规则,那么任意来自非 caller1 对 NodeA 的调用,都不能超过 other 这条规则定义的阈值
    • 同一个资源名可以配置多条规则,规则的生效顺序为:{some_origin_name} > other > default
    • strategy:调用关系限流策略,0表示直接生效,1表示设置关联限流,如果关联方流量较大时,当前资源会被限流,2表示设置链路限流,NodeSelectorSlot 中记录了资源之间的调用链路,这些资源通过调用关系,相互之间构成一棵调用树。这棵树的根节点是一个名字为 machine-root 的虚拟节点,调用链的入口都是这个虚节点的子节点,如果设置了链路限流并指定入口,那么只有指定入口的调用才会记录到限流统计中。

    代码

    假设Service类有个方法想设置限流,那么可以使用 @SentinelResource(value = "这里填写资源名称")注解进行标识。更多的用法可以参考官方示例。

    相关文章

      网友评论

          本文标题:Sentinel学习(二)在Sring项目配置和使用Sentin

          本文链接:https://www.haomeiwen.com/subject/boczbctx.html