-
Notifications
You must be signed in to change notification settings - Fork 8k
动态规则扩展
Sentinel 的理念是开发者只需要关注资源的定义,当资源定义成功后,可以动态增加各种限流规则。Sentinel 提供以下 API 来加载规则:
FlowRuleManager.loadRules(List<FlowRule> rules)
DegradeRuleManager.loadRules(List<DegradeRule> rules)
SystemRuleManager.loadRules(List<SystemRule> rules)
上述 loadRules()
方法只接受内存态的规则对象,但更多时候规则存储在文件、数据库或者配置中心当中。DataSource
接口给我们提供了对接任意配置源的能力。
我们可以实现 DataSource
接口对接相应的配置数据源,来达到规则动态变更的目的。
虽然目前控制台使用内存态直接设置客户端规则,但实现 DataSource
接口是更加可靠的做法。当我们通过控制台设置规则后,控制台可以将规则推送到统一的规则中心,客户端监听规则中心实时获取变更。
DataSource
常见的实现方式有:
- 拉模式:客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 SQL、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更;
- 推模式,规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。
实现拉模式的数据源最简单的方式是继承AutoRefreshDataSource抽象类,然后实现String readSource()
方法,在该方法里从指定数据源读取字符串格式的配置数据。比如从文件中读取配置。
实现推模式的数据源最简单的方式是继承AbstractDataSource抽象类,在其构造方法中添加监听器,并实现String readSource()
从指定数据源读取字符串格式的配置数据。比如基于Nacos的数据源。
Sentinel Dashboard 通过客户端自带的规则 API来实时查询和更改内存中的规则。
注意: 要使客户端具备规则 API,需在客户端引入以下依赖:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentienl-http-simple-transport</artifactId>
<version>x.y.z</version>
</dependency>
这个示例展示 Sentinel 是如何从文件获取规则信息的。FileRefreshableDataSource
会周期性的读取文件以获取规则,当文件有更新时会及时发现,并将规则更新到内存中。使用时只需添加以下依赖:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-extension</artifactId>
<version>x.y.z</version>
</dependency>
Nacos 是阿里中间件团队开源的服务发现和动态配置中心。Sentinel 针对 Nacos 作了适配,底层可以采用 Nacos 作为规则配置数据源。使用时只需添加以下依赖:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<version>x.y.z</version>
</dependency>
然后创建 NacosDataSource
并将其注册至对应的 RuleManager 上即可。比如:
// remoteAddress 代表 Nacos 服务端的地址
// groupId 和 dataId 对应 Nacos 中相应配置
DataSource<String, List<FlowRule>> flowRuleDataSource = new NacosDataSource<>(remoteAddress, groupId, dataId,
source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}));
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
详细示例可以参见 sentinel-demo-nacos-datasource。
-
文档
-
Documents
- Read Me
- Introduction
- How to Use
- How it Works
- Flow Control
- Parameter Flow Control
- Cluster Flow Control
- API Gateway Flow Control
- Circuit Breaking
- Adaptive System Protection
- Metrics
- General Configuration
- Dynamic Rule Configuration
- Dashboard
- Integrations with open-source frameworks
- Contribution Guideline