Skip to content

动态规则扩展

李豪 edited this page Jul 25, 2018 · 41 revisions

规则

Sentinel的理念是开发者只需要关注资源的定义。当资源定义成功后,可以动态增加各种限流规则。Sentinel提供原生的API来方便您定义规则:

FlowRuleManager.loadRules(List<FlowRule> rules)
DegradeRuleManager.loadRules(List<DegradeRule> rules)
SystemRuleManager.loadRules(List<SystemRule> rules)

如果引入JAR包,也会有自带的内存态的动态配置规则样例。

扩展

建议通过扩展DataSource接口对接相应的配置数据源,来达到规则动态变更的目的。虽然目前控制台使用内存态直接设置客户端规则,但通过DataSource接口,我们可以对接任意配置数据源。当我们通过控制台设置规则后,控制台可以将规则推送到统一的规则中心,客户端监听规则中心实时获取变更。

常见的做法有:

  • 客户端轮询: 即客户端自己主动向某个规则管理中心定期轮询规则。这个规则中心可以是SQL,文件,甚至是CVS等。这样做的方式是简单,缺点是无法最快的得知变更。
  • 规则中心统一推送: 使用Nacos、Zookeeper等配置中心。这种方式有更好的实时性和一致性保证。

How to

DEMO

使用客户端规则API配置规则

Dashboard通过客户端自带的规则API来实时查询和更改内存中的规则。

注意: 要使客户端具备规则API,需在客户端引入以下依赖:

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentienl-http-simple-transport</artifactId>
    <version>x.y.z</version>
</dependency>

基于文件配置规则

这个示例展示Sentinel是如何从文件获取规则信息的,FileRefreshableDataSource会周期性的读取文件以获取规则,当文件有更新时会及时发现,并将规则更新到内存中。

使用Nacos配置规则

Nacos是阿里巴巴开源的配置中心。我们基于Nacos作了适配(TODO)。

Clone this wiki locally