百度竞价网站谁做,互联网舆情监测,页面设计师简历,怎么用服务器搭建网站一、规则
Sentinel 的理念是开发者只需要关注资源的定义#xff0c;当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则#xff1a;
通过 API 直接修改 (loadRules)通过 DataSource 适配不同数据源修改
手动通过 API 修改比较直观#xff0c;…一、规则
Sentinel 的理念是开发者只需要关注资源的定义当资源定义成功后可以动态增加各种流控降级规则。Sentinel 提供两种方式修改规则
通过 API 直接修改 (loadRules)通过 DataSource 适配不同数据源修改
手动通过 API 修改比较直观可以通过以下几个 API 修改不同的规则
FlowRuleManager.loadRules(ListFlowRule rules); // 修改流控规则
DegradeRuleManager.loadRules(ListDegradeRule rules); // 修改降级规则
手动修改规则硬编码方式一般仅用于测试和演示生产上一般通过动态规则源的方式来动态管理规则。
二、DataSource 扩展
上述 loadRules() 方法只接受内存态的规则对象但更多时候规则存储在文件、数据库或者配置中心当中。DataSource 接口给我们提供了对接任意配置源的能力。相比直接通过 API 修改规则实现 DataSource 接口是更加可靠的做法。
我们推荐通过控制台设置规则后将规则推送到统一的规则中心客户端实现 ReadableDataSource 接口端监听规则中心实时获取变更流程如下 DataSource 扩展常见的实现方式有:
拉模式客户端主动向某个规则管理中心定期轮询拉取规则这个规则中心可以是 RDBMS、文件甚至是 VCS 等。这样做的方式是简单缺点是无法及时获取变更推模式规则中心统一推送客户端通过注册监听器的方式时刻监听变化比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。
Sentinel 目前支持以下数据源扩展
Pull-based: 动态文件数据源、Consul, EurekaPush-based: ZooKeeper, Redis, Nacos, Apollo, etcd
三、拉模式拓展
实现拉模式的数据源最简单的方式是继承 AutoRefreshDataSource 抽象类然后实现 readSource() 方法在该方法里从指定数据源读取字符串格式的配置数据。比如 基于文件的数据源。
四、推模式拓展
实现推模式的数据源最简单的方式是继承 AbstractDataSource 抽象类在其构造方法中添加监听器并实现 readSource() 从指定数据源读取字符串格式的配置数据。比如 基于 Nacos 的数据源。
控制台通常需要做一些改造来直接推送应用维度的规则到配置中心。功能示例可以参考 AHAS Sentinel 控制台的规则推送功能。改造指南可以参考 在生产环境中使用 Sentinel 控制台。
五、注册数据源
通常需要调用以下方法将数据源注册至指定的规则管理器中
ReadableDataSourceString, ListFlowRule flowRuleDataSource new NacosDataSource(remoteAddress, groupId, dataId, parser);
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
若不希望手动注册数据源可以借助 Sentinel 的 InitFunc SPI 扩展接口。只需要实现自己的 InitFunc 接口在 init 方法中编写注册数据源的逻辑。比如
package com.test.init;public class DataSourceInitFunc implements InitFunc {Overridepublic void init() throws Exception {final String remoteAddress localhost;final String groupId Sentinel:Demo;final String dataId com.alibaba.csp.sentinel.demo.flow.rule;ReadableDataSourceString, ListFlowRule flowRuleDataSource new NacosDataSource(remoteAddress, groupId, dataId,source - JSON.parseObject(source, new TypeReferenceListFlowRule() {}));FlowRuleManager.register2Property(flowRuleDataSource.getProperty());}
}
接着将对应的类名添加到位于资源目录通常是 resource 目录下的 META-INF/services 目录下的 com.alibaba.csp.sentinel.init.InitFunc 文件中比如
com.test.init.DataSourceInitFunc这样当初次访问任意资源的时候Sentinel 就可以自动去注册对应的数据源了。
六、示例
1、API 模式使用客户端规则 API 配置规则
Sentinel Dashboard 通过客户端自带的规则 API来实时查询和更改内存中的规则。
注意: 要使客户端具备规则 API需在客户端引入以下依赖
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-transport-simple-http/artifactIdversionx.y.z/version
/dependency
2、拉模式使用文件配置规则
这个示例展示 Sentinel 是如何从文件获取规则信息的。FileRefreshableDataSource 会周期性的读取文件以获取规则当文件有更新时会及时发现并将规则更新到内存中。使用时只需添加以下依赖
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-extension/artifactIdversionx.y.z/version
/dependency
3、推模式使用 Nacos 配置规则
Nacos 是阿里中间件团队开源的服务发现和动态配置中心。Sentinel 针对 Nacos 作了适配底层可以采用 Nacos 作为规则配置数据源。使用时只需添加以下依赖
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-nacos/artifactIdversionx.y.z/version
/dependency
然后创建 NacosDataSource 并将其注册至对应的 RuleManager 上即可。比如
// remoteAddress 代表 Nacos 服务端的地址
// groupId 和 dataId 对应 Nacos 中相应配置
ReadableDataSourceString, ListFlowRule flowRuleDataSource new NacosDataSource(remoteAddress, groupId, dataId,source - JSON.parseObject(source, new TypeReferenceListFlowRule() {}));
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
注意如果希望初始化 Nacos 数据源时携带更多的配置如鉴权配置可通过带 Properties 的构造函数进行传入。
详细示例可以参见 sentinel-demo-nacos-datasource。
4、推模式使用 ZooKeeper 配置规则
Sentinel 针对 ZooKeeper 作了相应适配底层可以采用 ZooKeeper 作为规则配置数据源。使用时只需添加以下依赖
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-zookeeper/artifactIdversionx.y.z/version
/dependency
然后创建 ZookeeperDataSource 并将其注册至对应的 RuleManager 上即可。比如
// remoteAddress 代表 ZooKeeper 服务端的地址
// path 对应 ZK 中的数据路径
ReadableDataSourceString, ListFlowRule flowRuleDataSource new ZookeeperDataSource(remoteAddress, path, source - JSON.parseObject(source, new TypeReferenceListFlowRule() {}));
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
详细示例可以参见 sentinel-demo-zookeeper-datasource。
5、推模式使用 Apollo 配置规则
Sentinel 针对 Apollo 作了相应适配底层可以采用 Apollo 作为规则配置数据源。使用时只需添加以下依赖
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-apollo/artifactIdversionx.y.z/version
/dependency
然后创建 ApolloDataSource 并将其注册至对应的 RuleManager 上即可。比如
// namespaceName 对应 Apollo 的命名空间名称
// ruleKey 对应规则存储的 key
// defaultRules 对应连接不上 Apollo 时的默认规则
ReadableDataSourceString, ListFlowRule flowRuleDataSource new ApolloDataSource(namespaceName, ruleKey, defaultRules, source - JSON.parseObject(source, new TypeReferenceListFlowRule() {}));
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
详细示例可以参见 sentinel-demo-apollo-datasource。
6、推模式使用 Redis 配置规则
Sentinel 针对 Redis 作了相应适配底层可以采用 Redis 作为规则配置数据源。使用时只需添加以下依赖
!-- 仅支持 JDK 1.8 --
dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-redis/artifactIdversionx.y.z/version
/dependency