sentinel 集群限流
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 集群限流相关推荐
- 快速体验 Sentinel 集群限流功能,只需简单几步
️ Pic by Alibaba Tech on Facebook 集群限流 可以限制某个资源调用在集群内的总 QPS,并且可以解决单机流量不均导致总的流控效果不佳的问题,是保障服务稳定性的利器. S ...
- Sentinel 集群限流设计原理
本节目录 1.集群限流使用场景 2.集群限流与单机限流的异同思考 3.探究集群限流实现原理 3.1 ClusterBuilderSlot 详解 3.2 集群限流模式实现原理 3.2.1 Default ...
- Sentinel v1.4.2 发布,更好用的集群限流功能
Sentinel 发布 v1.4.2 正式发布,该版本主要变更如下: 特性/功能改进 新增 Zuul 1.x 适配模块(sentinel-zuul-adapter),结合集群限流特性可以更好地在 AP ...
- 更好用的集群限流功能,Sentinel 发布 v1.4.2
Sentinel 发布 v1.4.2 正式发布,该版本主要变更如下: 特性/功能改进 新增 Zuul 1.x 适配模块(sentinel-zuul-adapter),结合集群限流特性可以更好地在 AP ...
- 解决sentinel结合nacos实现集群限流(嵌入式)
本文将为您介绍什么是集群流控,如何使用阿里的开源项目 Sentinel实现动态配置的集群流控的详细内容,以下是详情内容,希望我们能共同学习进步 Why? 为什么要用集群流控? 相对于单机流控而言,我们 ...
- Sentinel系统规则_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0044
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后咱们来说一下这个系统规则怎么用 可以看到系统规则,又叫系统自适应限流,就是说,sentinel ...
- Sentinel热点Key降级下_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0043
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 先复习一下 可以看到我们配置的是testHotKey,这个资源名,就是 @SentinelReso ...
- Sentinel初始化监控_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0031
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们开始配置sentinel的初始化监控功能,其实就是对我们访问的微服务进行一个保护 这个保护 ...
- Sentinel流控规则_关联_分布式系统集群限流_线程数隔离_削峰填谷_流量控制_速率控制_服务熔断_服务降级---微服务升级_SpringCloud Alibaba工作笔记0035
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 这里我们再看这个关联的意思 当关联的资源达到阀值的时候就限流自己 比如我们设置支付接口达到阀值以后 ...
最新文章
- 如何修改Sql2005注册服务器名称 {转载}
- [Doctrine Migrations] 数据库迁移组件的深入解析三:自定义数据字段类型
- oracle bulk collect
- python支持链式赋值和多重赋值_Python: 链式赋值的坑
- Uva11729 Commando War
- 下载Centos7 64位镜像
- 亲和数 杭电2040
- 史上最全企业数据产品选型对比(含数仓、报表、BI、中台、数据治理)
- Mysql 全局锁入门
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_汇总
- 什么是NVMe?一篇文章理清它的前生今世
- Java中VO/DTO/DO/PO/POJO/BO/DAO概念及其区别
- pano2vr输出的HTML手机可以看吗,Pano2VR怎么导出手机可看_ Pano2VR导出手机查看教程...
- 赤兔之死高考满分作文原文及赏析
- iOS判断 英文 数字 汉字等
- git push时 please tell me who you are 或 git fatal: empty ident name (for <>) not llowed
- iOS symbol(s) not found for architecture armv7
- excel 获取股票价格_股票价格的Excel点图
- ubuntu下淘宝的使用
- 交换机SNMP V3版本配置