上一篇文章,我们一起探讨了Sentinel流量控制的简单用法,本小节,我们一起探讨Sentinel的三种流控规则。
说到系统接口的限流,我们一般会想到用几种限流的算法,比如漏桶算法、令牌桶算法,在单机内,我们可以采用Guava中提供的API帮我们实现限流功能。而在分布式环境中,我们可以用Redis、MQ等中间件来实现限流的功能。
然而,Sentinel为我们提供了更加灵活的限流规则和策略,同时也支持单机和集群模式,方便我们根据不同的应用场景,选择不同的流控、限流的规则。
常用的有如下三种:
-
直接拒绝
-
冷启动+预热
-
匀速+排队
我们可以根据实际需求,来配置相应的流控规则。流控的重要属性如下:
字段 | 说明 | 默认值 |
resource | 资源名,是限流规则的作用对象 | |
count | 限流阈值 | |
grade | 限流阈值类型,QPS 模式(1)或并发线程数模式(0) | QPS |
limitApp | 流控针对的调用来源 | default,表示不区分调用来源 |
stragety | 调用关系限流策略:直接、链路、关联 | 直连 |
controlBehavior (本文重点讲解这个属性) |
流控效果(直接拒绝/WarmUp/匀速+排队等待),不支持按调用关系限流 | 直接拒绝 |
clusterMode | 是否是集群模式 | 否 |
ps:详细的工程创建,请参考笔者的这篇文章