sentinel 集群限流

官网:https://sentinelguard.io/zh-cn/docs/cluster-flow-control.html

集群限流

集群限流:一个服务在多个机器上部署,对服务服务的总体调用次数进行限制, 结合单机限流,可以更好地发挥限流效果

token client:集群流控客户端,向token server请求获取token

token server:集群限流服务端,根据集群限流规则判断是否向token client发放token

            

*************

token client

客户端依赖

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-cluster-client-default</artifactId><version>1.8.3</version>
</dependency>

api 设置客户端(也可直接在sentinel dashbpard配置)

# 通过api将当前模式置为客户端模式
http://<ip>:<port>/setClusterMode?mode=<xxx>
mode=0:当前服务设置为客户端
mode=1:当前服务设置为服务端
mode=-1:关闭集群模式# 配置客户端(ClusterClientConfig),除使用api配置外,也可使用sentinel dashboard配置
http://<ip>:<port>/cluster/client/modifyConfig?data=<config>
说明:config为json格式的clusterClientConfig

ClusterClientConfig

public class ClusterClientConfig {private Integer requestTimeout;public ClusterClientConfig() {}public Integer getRequestTimeout() {return this.requestTimeout;}public ClusterClientConfig setRequestTimeout(Integer requestTimeout) {this.requestTimeout = requestTimeout;return this;}public String toString() {return "ClusterClientConfig{requestTimeout=" + this.requestTimeout + '}';}
}

token client连接token server失败处理

# 连接远程服务端(token server)失败、或者通信失败,触发以下规则:
集群热点限流默认直接通过
普通集群限流会退化到local模式的限流# token client连接server失败重试
连接意外断开时,token client会不断进行重试,每次重试的间隔时间以n*2000ms的形式递增

*************

token server

服务端依赖

<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-cluster-server-default</artifactId><version>1.8.3</version>
</dependency>

独立模式:token server独立部署,与应用实例分离,可直接创建ClusterTokenServer实例并启动

嵌入模式:token server与应用实例同时工作,token client、token server可随时切换

api 设置节点类型

http://<ip>:<port>/setClusterMode?mode=<xxx>mode可选值:
0:客户端
1:服务端
-1:关闭

服务端配置属性

namespace set:集群限流服务端服务的作用域(命名空间)token client连接到token server会上报自己的命名空间(默认为project.name),token server 会根据上报的命名空间名称统计连接数
transport config:通信相关配置,如server、port等
flow config:限流配置,如动窗口统计时长、格子数目、最大允许总QPS等

相关依赖

        <!-- 服务注册与发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- dubbo服务调用 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-dubbo</artifactId></dependency><!-- sentinel dubbo限流 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-apache-dubbo-adapter</artifactId></dependency><!-- 数据上传到sentinel控制台 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId></dependency><!-- 集群客户端、服务端 --><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-cluster-client-default</artifactId><version>1.8.0</version></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-cluster-server-default</artifactId><version>1.8.0</version></dependency>

使用示例

***********

服务端

服务端部署3台服务,使用集群限流:token client(8081、8082)、token server:8083

application.yml

spring:application:name: nacos-providercloud:nacos:discovery:server-addr: localhost:8848dubbo:#registry:# address: spring-cloud://localhost:8848protocol:name: dubboport: -1server:port: 8081

HelloService

public interface HelloService {String hello();
}

HelloServiceImpl

@DubboService
public class HelloServiceImpl implements HelloService {@Overridepublic String hello() {return "hello";}
}

DemoApplication

@EnableDubbo  //开启dubbo
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

***********

消费端

application.yml

spring:application:name: nacos-consumercloud:nacos:discovery:server-addr: localhost:8848dubbo:protocol:name: dubboport: -1server:port: 9000

HelloService

public interface HelloService {String hello();
}

HelloController

@RestController
public class HelloController {@DubboReferenceprivate HelloService helloService;@RequestMapping("/hello")public String hello(){System.out.println(helloService.hello());return "success";}
}

DemoApplication

@EnableDubbo
@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

***********

启动配置

sentinel控制台

java -Dserver.port=8000 -Dcsp.sentinel.dashboard.server=localhost:8000 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar参数说明:
-Dserver.port=8080:指定控制台启动端口
-Dcsp.sentinel.dashboard.server:指定控制台地址和端口
-Dproject.name=sentinel-dashboard:指定控制台项目名称

服务端:添加启动参数

-Dcsp.sentinel.dashboard.server=localhost:8000 -Dcsp.sentinel.api.port=6001 -Dcsp.sentinel.log.use.pid=true -Dproject.name=nacos-provider

服务端 2:添加启动参数

-Dcsp.sentinel.dashboard.server=localhost:8000 -Dcsp.sentinel.api.port=6002 -Dcsp.sentinel.log.use.pid=true -Dproject.name=nacos-provider

服务端 3:添加启动参数

-Dcsp.sentinel.dashboard.server=localhost:8000 -Dcsp.sentinel.api.port=6003 -Dcsp.sentinel.log.use.pid=true -Dproject.name=nacos-provider

消费端:添加启动参数

-Dcsp.sentinel.dashboard.server=localhost:8000 -Dcsp.sentinel.api.port=9200 -Dcsp.sentinel.log.use.pid=true -Dproject.name=nacos-consumer

***********

sentinel 配置

localhost:8000,查看sentinel控制台:

配置token server、添加token client

添加流控规则:每个集群中的节点都需要添加流控规则

jmeter测试

sentinel 集群限流相关推荐

  1. 快速体验 Sentinel 集群限流功能,只需简单几步

    ️ Pic by Alibaba Tech on Facebook 集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器. S ...

  2. Sentinel 集群限流设计原理

    本节目录 1.集群限流使用场景 2.集群限流与单机限流的异同思考 3.探究集群限流实现原理 3.1 ClusterBuilderSlot 详解 3.2 集群限流模式实现原理 3.2.1 Default ...

  3. Sentinel v1.4.2 发布,更好用的集群限流功能

    Sentinel 发布 v1.4.2 正式发布,该版本主要变更如下: 特性/功能改进 新增 Zuul 1.x 适配模块(sentinel-zuul-adapter),结合集群限流特性可以更好地在 AP ...

  4. 更好用的集群限流功能,Sentinel 发布 v1.4.2

    Sentinel 发布 v1.4.2 正式发布,该版本主要变更如下: 特性/功能改进 新增 Zuul 1.x 适配模块(sentinel-zuul-adapter),结合集群限流特性可以更好地在 AP ...

  5. 解决sentinel结合nacos实现集群限流(嵌入式)

    本文将为您介绍什么是集群流控,如何使用阿里的开源项目 Sentinel实现动态配置的集群流控的详细内容,以下是详情内容,希望我们能共同学习进步 Why? 为什么要用集群流控? 相对于单机流控而言,我们 ...

  6. Sentinel系统规则_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0044

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们来说一下这个系统规则怎么用 可以看到系统规则,又叫系统自适应限流,就是说,sentinel ...

  7. Sentinel热点Key降级下_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0043

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 先复习一下 可以看到我们配置的是testHotKey,这个资源名,就是 @SentinelReso ...

  8. Sentinel初始化监控_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0031

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们开始配置sentinel的初始化监控功能,其实就是对我们访问的微服务进行一个保护 这个保护 ...

  9. Sentinel流控规则_关联_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0035

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这里我们再看这个关联的意思 当关联的资源达到阀值的时候就限流自己 比如我们设置支付接口达到阀值以后 ...

最新文章

  1. 如何修改Sql2005注册服务器名称 {转载}
  2. [Doctrine Migrations] 数据库迁移组件的深入解析三:自定义数据字段类型
  3. oracle bulk collect
  4. python支持链式赋值和多重赋值_Python: 链式赋值的坑
  5. Uva11729 Commando War
  6. 下载Centos7 64位镜像
  7. 亲和数 杭电2040
  8. 史上最全企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)
  9. Mysql 全局锁入门
  10. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_汇总
  11. 什么是NVMe?一篇文章理清它的前生今世
  12. Java中VO/DTO/DO/PO/POJO/BO/DAO概念及其区别
  13. pano2vr输出的HTML手机可以看吗,Pano2VR怎么导出手机可看_ Pano2VR导出手机查看教程...
  14. 赤兔之死高考满分作文原文及赏析
  15. iOS判断 英文 数字 汉字等
  16. git push时 please tell me who you are 或 git fatal: empty ident name (for <>) not llowed
  17. iOS symbol(s) not found for architecture armv7
  18. excel 获取股票价格_股票价格的Excel点图
  19. ubuntu下淘宝的使用
  20. 交换机SNMP V3版本配置

热门文章

  1. 蓝桥杯C/C++程序设计 往届真题汇总(进阶篇)
  2. 分布式事务 (秒懂)
  3. 东芝发布OCZ TL100系列入门级SATA SSD新品:接棒TR150
  4. 汉化版chatnet1.4
  5. 最大公共子串-蓝桥杯真题 动态规划(c++实现)
  6. Oracle数据库常用基本SQL语法
  7. Android手机中APP闪退的原因汇总
  8. MYSQL数据库设计规范与原则
  9. 浏览器窗口的尺寸(兼容IE浏览器)
  10. 移动端WEB程序,类淘宝猜你喜欢效果