sentinel-集群流控

Author Avatar
丁起男 10月 18,2021
  • 在其它设备中阅读本文章

sentinel-集群流控

在sentinel中实现集群限流,本质上需要提供一个相关访问数据的统计,在单一实例的情况下,这个统计操作是在每个实例中实现的。而如果在集群环境中,就需要提供有一个专门的实例(TokenServer)进行数据统计,并且该TokenServer要收集所有TokenClient发送来的统计信息,而后根据集群流控规则来决定是否允许请求进行资源访问

sentinel从1.4.0版本开始引入了集群流控实现模块,基于netty实现了服务通信,当用户在spring cloud项目中引入了spring-cloud-starter-alibaba-sentinel依赖库后就会自动引入这些相关模块

和集群流控有关的模块有三个:

  • sentinel-cluster-common-default:集群流控公共模块,包含了公共的接口以及实体类
  • sentinel-cluster-server-default:TokenServer实现模块,基于sentinel核心逻辑进行规则扩展实现
  • sentinel-cluster-client-default:TokenClient实现模块

使用

  • 配置token server

    1. 创建独立项目

    2. 导入依赖

      		<dependency>
                  <groupId>com.alibaba.cloud</groupId>
                  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
                  <version>2021.1</version>
              </dependency>
      
    3. 编写启动类

          static {
              //由于是静态设置了sentinel连接地址,所以当应用启动的时候,就可以直接向sentinel控制台注册
              System.setProperty("csp.sentinel.dashboard.server","localhost:8080");//控制台地址
              System.setProperty("csp.sentinel.api.port","8719"); //sentinel端口
              System.setProperty("project.name","token-server"); //服务名称
              System.setProperty("csp.sentinel.log.use.pid","true"); //设置pid(可选)
          }
      
          @SneakyThrows
          public static void main(String[] args) {
              ClusterTokenServer tokenServer = new SentinelDefaultTokenServer(); //实例化token集群管理
              ClusterServerConfigManager.loadGlobalTransportConfig(new ServerTransportConfig()
                      .setIdleSeconds(600)
                      .setPort(10217)); //服务端口
              tokenServer.start(); //启动
          }
      
  • 在控制台的集群流控中新增Token Server 外部指定机器