Sentinel集群流控参数说明

前言

本文解读sentinel中涉及到集群限流的相关参数。

一、集群流控参数 

1.参数说明

 

当流控规则FlowRule#clusterMode设置为true时,开启集群流控。集群流控ClusterFlowConfig属性如下。

属性说明
flowId全局唯一标识
thresholdType0:单机均摊,1:全局阈值,默认为单机均摊
fallbackToLocalWhenFail集群流控失败是否降级为单机流控,默认true
strategy策略目前只支持普通策略0
sampleCount滑动窗口统计采样窗口数量,默认10个
windowIntervalMs滑动窗口大小,默认1秒

2.生效方式

 

集群流控的生效与其他规则生效方式相同,例如:
流控动态加载:FlowRuleManager#register2Property
热点动态加载:ParamFlowRuleManager.register2Property
示例见:DemoClusterInitFunc#initDynamicRuleProperty()

二、client/server数据格式 

集群流控中,client、server的数据组织格式,对应为ClusterGroupEntity的属性。

ClusterGroupEntity的属性

属性说明
machineIdserver节点,格式为:112.12.88.68@8728
ipserver IP
portserver 端口
clientSetclient节点集合,格式为:["112.12.88.66@8729","112.12.88.67@8727"]
[
    {
        "clientSet": [
            "112.12.88.66@8729",
            "112.12.88.67@8727"
        ],
        "ip": "112.12.88.68",
        "machineId": "112.12.88.68@8728",
        "port": 11111
    }
]

三、token client配置参数

当前token client配置参数当前主要为requestTimeout,即:请求超时时间。

1.参数说明

 
属性说明
requestTimeout请求超时时间,默认20毫秒。超时会抛出”request time out“的异常SentinelClusterException

2.生效方式明

 

动态加载:ClusterClientConfigManager.registerClientConfigProperty

示例见:DemoClusterInitFunc#initClientConfigProperty()

3.实现方式

 

通过动态监听ClusterClientConfig变更,更新ClusterClientConfigManager#requestTimeout。在netty客户端NettyTransportClient发请求时promise.await使用。

四、token server地址与端口

当token server的IP和端口变更时,token client需要重新连接到新的server地址。

1.参数说明

 

server的地址和端口通过ClusterClientAssignConfig属性设置。

属性说明
serverHostserver IP
serverPortserver 端口

2.生效方式

 

动态加载:ClusterClientConfigManager.registerServerAssignProperty
示例见:DemoClusterInitFunc#initClientServerAssignProperty()

3.实现方式

 

token client(DefaultClusterTokenClient)在初始化时,注册server变更观察者。当变更时,通过ClientAssignPropertyListener回调观察者,完成新server的重连。

五、token server端口与空闲时间

当token server参数主要是端口和空闲时间变化,需要重启server。

1.参数说明

 

ServerTransportConfig属性如下:

属性说明
portserver端口
idleSecondsclient连接空闲,默认10分钟。超过后会关闭连接

2.生效方式

 

ClusterServerConfigManager.registerServerTransportProperty
示例见:DemoClusterInitFunc#initServerTransportConfigProperty()

3.实现原理

 

token server(SentinelDefaultTokenServer)在初始化时,注册ServerTransportConfig变更观察者,当配置发生变更时,通过ServerGlobalTransportPropertyListener回调观察者,完成token server端口或者空时间的变更,端口变更需要重启服务端。

六、client/server角色切换

集群流控使用内嵌模式时,client/server可能会在应用的节点之间切换。

1.生效方式

 

ClusterStateManager.registerProperty
示例见:DemoClusterInitFunc#initStateProperty()

2.实现原理

 

通过动态监听cluster集群节点变化,通过ClusterStatePropertyListener中提供的setToClient、setToServer实现角色切换。

七、namespace变更

集群流控中使用namespace的概念,通常为appName,可以动态监听一组namespace的变化。通过ClusterFlowRuleManager.setPropertySupplier加入监听,并通过FlowRulePropertyListener#applyClusterFlowRule生效。构建namespace、flowId、FlowRule、flowIdSet在缓存中的关系以及为每个flowId准备集群流控统计ClusterMetric,
示例详见:DemoClusterInitFunc#registerClusterRuleSupplier。

与丁威老师一起写的专栏《RocketMQ实战与进阶》,均为多年实战心得总结,有需要的同学可以读读看。

作者丨梁勇
来源丨瓜农老梁
欢迎关注公众号「瓜农老梁」


「瓜农老梁  学习同行」    

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值