网易首页 > 网易号 > 正文 申请入驻

Sentinel:分布式系统的流量防卫兵动态限流规则

0
分享至

前面几篇文章较为详细的介绍了Sentinel的使用姿势,还没看过的小伙伴可以访问以下链接查看:

  • 《Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵基础实战》

  • 《Spring Cloud Alibaba | Sentinel:分布式系统的流量防卫兵进阶实战》

但是依然无法满足我们日常的生产需要,其中,非常重要的一点就是限流规则的配置是存在当前应用的内存中的,每次我们重启应用以后,我们在Sentinel控制台中配置的规则就丢失了,下面,我们就介绍一下Sentinel规则持久化的方式。

Sentinel为我们提供了两种方式对规则进行修改:

  • 通过 API 直接修改 (loadRules)

  • 通过 DataSource 适配不同数据源修改

loadRules() 方法只接受内存态的规则对象,但更多时候规则存储在文件、数据库或者配置中心当中。DataSource 接口给我们提供了对接任意配置源的能力。相比直接通过 API 修改规则,实现 DataSource 接口是更加可靠的做法。

DataSource 扩展常见的实现方式有:

  • 拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;

  • 推模式:规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。

Sentinel 目前支持以下数据源扩展:

  • Pull-based: 文件、Consul (since 1.7.0)

  • Push-based: ZooKeeper, Redis, Nacos, Apollo

这里,我们重点介绍一下Sentinel基于Nacos实现动态规则。

1. Sentinel基于Nacos动态规则实战 1.1 创建子工程sentinel_nacos

工程依赖pom.xml如下:

代码清单:Alibaba/sentinel-springcloud-high/sentinel_nacos/pom.xml

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
1.2 配置文件application.yml如下:

代码清单:Alibaba/sentinel-springcloud-high/sentinel_nacos/src/main/resources/application.yml

server:
port: 10000
spring:
application:
name: spring-cloud-sentinel-nacos
cloud:
nacos:
discovery:
server-addr: 192.168.44.129:8848
sentinel:
transport:
dashboard: localhost:8080
port: 8720
datasource:
ds:
nacos:
server-addr: 192.168.44.129:8848
dataId: spring-cloud-sentinel-nacos
groupId: DEFAULT_GROUP
rule-type: flow
namespace: 8282c713-da90-486a-8438-2a5a212ef44f

  • spring.cloud.sentinel.transport.dashboard:Sentinel控制台的访问地址。

  • spring.cloud.sentinel.datasource.ds.nacos.server-addr:nacos的访问地址。

  • spring.cloud.sentinel.datasource.ds.nacos.dataId:nacos中存储规则的groupId。

  • spring.cloud.sentinel.datasource.ds.nacos.groupId:nacos中存储规则的dataId。

  • spring.cloud.sentinel.datasource.ds.nacos.rule-type:用来定义存储的规则类型,不可为空。

  • spring.cloud.sentinel.datasource.ds.nacos.namespace:nacos中存储规则的namespace。

由于版本迭代关系,本示例中的配置信息不一定适用于所有版本,可以通过分析DataSourcePropertiesConfigurationNacosDataSourcePropertiesAbstractDataSourceProperties这三个配置来得出具体配置内容,会更为准确。

例如,本示例中的配置来源于NacosDataSourcePropertiesAbstractDataSourceProperties

NacosDataSourceProperties源码如下:

public class NacosDataSourceProperties extends AbstractDataSourceProperties {
private String serverAddr;
@NotEmpty
private String groupId = "DEFAULT_GROUP";
@NotEmpty
private String dataId;
private String endpoint;
private String namespace;
private String accessKey;
private String secretKey;
// 代码省略...
}

AbstractDataSourceProperties源码如下:

public class AbstractDataSourceProperties {
@NotEmpty
private String dataType = "json";
@NotNull
private RuleType ruleType;
private String converterClass;
@JsonIgnore
private final String factoryBeanName;
@JsonIgnore
private Environment env;
}

笔者这里仅配置一个不可为空并且没有默认值的ruleType,有关ruleType的取值可以查看com.alibaba.cloud.sentinel.datasource.RuleType,这是一个枚举类型。

1.3 创建一个接口测试类HelloController.java如下:

代码清单:Alibaba/sentinel-springcloud-high/sentinel_nacos/src/main/java/com/springcloud/sentinel_nacos/controller/HelloController.java

@RestController
public class HelloController {
@GetMapping("/hello")
public String hello(HttpServletRequest request) {
return "Hello, port is: " + request.getLocalPort();
}
}
1.4 配置Nacos配置中心

配置内容如图:

注意其中配置的Data ID和Group要和程序中配置的保持一致。格式选择JSON,填入的内容如下:

[
{
"resource": "/hello",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]

可以看到上面配置规则是一个数组类型,数组中的每个对象是针对每一个保护资源的配置对象,每个对象中的属性解释如下:

  • resource:资源名,即限流规则的作用对象。

  • limitApp:流控针对的调用来源,若为 default 则不区分调用来源。

  • grade:限流阈值类型,QPS 或线程数模式,0代表根据并发数量来限流,1代表根据QPS来进行流量控制。

  • count:限流阈值

  • strategy:判断的根据是资源自身,还是根据其它关联资源 (refResource),还是根据链路入口

  • controlBehavior:流控效果(直接拒绝 / 排队等待 / 慢启动模式)

  • clusterMode:是否为集群模式

1.5 测试

正常启动子工程,打开浏览器访问几次http://localhost:10000/hello ,速度快一些可以发现已经限流了,限流后页面显示如下:

Blocked by Sentinel (flow limiting)

正面限流配置成功,这时我们打开Sentinel控制台,看一下流量规则限制,已经有一条数据了,是我们在Nacos中配置的数据,如图:

注意:

在Sentinel动态规则整合了Nacos以后,对于修改接口流量控制就有两个地方了,一个是Sentinel的控制台,还有一个是Nacos的控制台。

但是要谨记,在当前版本中,在Sentinel控制台中修改了规则,将不会同步至Nacos的配置中心,而在Nacos中修改了配置规则,则会通过在客户端的Listener来是同步Sentinel控制台。所以,在整合了Nacos做动态规则存储后需要注意两点:

  • Sentinel控制台中修改规则:仅存在于服务的内存中,不会修改Nacos中的配置值,重启后恢复原来的值。

  • Nacos控制台中修改规则:服务的内存中规则会更新,Nacos中持久化规则也会更新,重启后依然保持。

建议各位堵住最好在Nacos控制台做规则的修改操作,尽量避免直接在Sentinel控制台中直接做规则修改。

2. 示例代码

Github-示例代码:

https://github.com/meteor1993/SpringCloudLearning/tree/master/Alibaba/sentinel-springcloud-high

Gitee-示例代码:

https://gitee.com/inwsy/SpringCloudLearning/tree/master/Alibaba/sentinel-springcloud-high

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
黄金、白银双双再创历史新高

黄金、白银双双再创历史新高

北京商报
2026-01-19 10:33:03
立即停止法拍房:拯救中国房地产和亿万中产阶层!

立即停止法拍房:拯救中国房地产和亿万中产阶层!

微评社
2026-01-19 00:13:19
央视怒批,人民日报点名封杀,这5位目无法纪的大网红,彻底凉凉

央视怒批,人民日报点名封杀,这5位目无法纪的大网红,彻底凉凉

一娱三分地
2025-12-04 17:00:33
有色金属超级牛市!未来世界的核心资产,看懂这3点再出手

有色金属超级牛市!未来世界的核心资产,看懂这3点再出手

时尚的弄潮
2026-01-19 14:35:24
美国禁毒为何失败?真相很残酷:不是管不住,是精英层的理性放弃

美国禁毒为何失败?真相很残酷:不是管不住,是精英层的理性放弃

远方风林
2026-01-17 12:55:06
神仙姐姐的野生图,太美了。

神仙姐姐的野生图,太美了。

微微热评
2026-01-09 12:20:53
正式跌破7%,中国人口会跌到什么程度?| 地球知识局

正式跌破7%,中国人口会跌到什么程度?| 地球知识局

地球知识局
2026-01-19 13:46:04
杨兰兰疑似早已逃离澳洲,派人顶替去警局报道?

杨兰兰疑似早已逃离澳洲,派人顶替去警局报道?

杭城村叔
2026-01-19 10:17:08
1974年王稼祥逝世,弥留之际含泪嘱咐妻子朱仲丽:千万要记住啊

1974年王稼祥逝世,弥留之际含泪嘱咐妻子朱仲丽:千万要记住啊

千秋文化
2026-01-16 19:26:16
王菲没想到,李亚鹏2天收1400万后,海哈金喜凭一举动迎口碑暴涨

王菲没想到,李亚鹏2天收1400万后,海哈金喜凭一举动迎口碑暴涨

寒士之言本尊
2026-01-19 16:16:28
贾国龙最新发言,又更新了一条朋友圈:预制菜和我为什么站出来?

贾国龙最新发言,又更新了一条朋友圈:预制菜和我为什么站出来?

陈语丝
2026-01-19 06:47:55
包钢股份板材厂爆炸已致4死6失联,10年至少发生21起安全事故

包钢股份板材厂爆炸已致4死6失联,10年至少发生21起安全事故

澎湃新闻
2026-01-19 21:01:09
引发全球抗议!国际奥委会拒绝禁止美国参加冬奥会 仍禁赛俄罗斯

引发全球抗议!国际奥委会拒绝禁止美国参加冬奥会 仍禁赛俄罗斯

风过乡
2026-01-19 17:13:12
特朗普突然发声:现在是时候行动了,“解决俄罗斯对格陵兰岛威胁”时机已到

特朗普突然发声:现在是时候行动了,“解决俄罗斯对格陵兰岛威胁”时机已到

鲁中晨报
2026-01-19 13:31:02
TOP14位身高170以上的女神,有颜有灯有演技

TOP14位身高170以上的女神,有颜有灯有演技

素然追光
2026-01-02 02:45:02
日本还没大选,高市已目中无人:公开访美日程,要和中国继续争斗

日本还没大选,高市已目中无人:公开访美日程,要和中国继续争斗

面包夹知识
2026-01-20 00:49:47
Here we go!罗马诺:巴萨门将特狮租借加盟赫罗纳

Here we go!罗马诺:巴萨门将特狮租借加盟赫罗纳

懂球帝
2026-01-20 00:50:29
西足协公布皇社vs巴萨VAR录音:因奥尔莫犯规在先,进球无效

西足协公布皇社vs巴萨VAR录音:因奥尔莫犯规在先,进球无效

懂球帝
2026-01-19 20:05:06
数据公布!2025年中国GDP达到19.63万亿美元,占美国GDP的64%

数据公布!2025年中国GDP达到19.63万亿美元,占美国GDP的64%

蔡蔡说史
2026-01-19 16:39:54
北京下了死命令,2027年底前,所有中小学必须告别“校外配餐”

北京下了死命令,2027年底前,所有中小学必须告别“校外配餐”

古事寻踪记
2026-01-19 07:09:23
2026-01-20 02:55:00
极客挖掘机
极客挖掘机
定期发表编程相关内容
17文章数 156关注度
往期回顾 全部

科技要闻

这一仗必须赢!马斯克死磕芯片"9个月一更"

头条要闻

意大利知名时尚设计师瓦伦蒂诺去世

头条要闻

意大利知名时尚设计师瓦伦蒂诺去世

体育要闻

错失英超冠军奖牌,他却在德甲成为传奇

娱乐要闻

吴磊起诉白珊珊诽谤,白珊珊称被盗号

财经要闻

公章争夺 家族反目 双星为何从顶端跌落?

汽车要闻

徐军:冲击百万销量,零跑一直很清醒

态度原创

亲子
教育
本地
数码
公开课

亲子要闻

宝妈必学,孩子不懂对侵犯说不,任何人都有可能是坏人!

教育要闻

高考地理简答题万能模版

本地新闻

云游内蒙|黄沙与碧波撞色,乌海天生会“混搭”

数码要闻

荣耀手表GS 5发布:行业独家防猝筛查、23天蓝牙续航,699元

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版