1.Sentinel 三种管理模式
|--------|--------------------------------------------------------------------------|---------------|------------------------|
| 推送方式 | 说明 | 优点 | 缺点 |
| 默认方式 | Api将规则推送到客户端存储在内存中,扩展写数据源(WritableDataSource) | 简单无任何依赖 | 不保证一致性,规则无持久化,重新启动规则消失 |
| Pull方式 | 扩展写数据源(WritableDataSource),客户端定时向规则管理中心拉取规则,这个规则管理中心可以是RDBS、文件等 | 简单无任何依赖,规则持久化 | 不保证一直性,实时性保证,拉取频繁有性能问题 |
| push方式 | 扩展读数据源(ReadableDataSource),规则中心统一推送数据,客户端通过注册监听器的方式监听变化(Nacos Zookeeper) | 规则持久化,一致性 | 引入三方 |
2.原始模式(测试环境模式)
不保证一致性,规则无持久化,重新启动规则消失。
3.Pull方式
客户端主动向某个规则管理中心定期轮询拉取规则,这个规则中心可以是 RDBMS、文件,甚至是 VCS 等。这样做的方式是简单,缺点是无法及时获取变更。
Pull-based: 动态文件数据源、Consul, Eureka。
4.Push方式(生产环境模式)
规则中心统一推送,客户端通过注册监听器的方式时刻监听变化,比如使用 Nacos、Zookeeper 等配置中心。这种方式有更好的实时性和一致性保证。
Push-based: ZooKeeper, Redis, Nacos, Apollo, etcd。
5.客户端集成Nacos持久化规则
5.1 客户端集成Nacos配置中心
Springcloud 集成 Nacos配置中心_springcloud整合nacos配置中心-CSDN博客
5.2 pom中添加依赖包
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
5.3 配置文件(bootstrap.yml)
spring:
application:
name: user
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
prefix: dubbo-user-api
file-extension: yml
sentinel:
transport:
dashboard: 127.0.0.1:6780
eager: true # 取消懒加载
datasource:
ds-user-flow-rule:
nacos:
server-addr: 127.0.0.1:8848
dataId: user-flow-rule
groupId: user-sentinel
namespace: sentinel
rule-type: flow # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)
ds-user-degrade-rule:
nacos:
server-addr: 127.0.0.1:8848
dataId: user-degrade-rule
groupId: user-sentinel
namespace: sentinel
rule-type: degrade # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)
5.4 Nacos中添加配置文件
5.4.1 user-flow-rule
[
{
"resource": "/api/user/getName",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
5.4.2 user-degrade-rule
[
{
"resource": "/api/user/getName",
"limitApp": "default",
"count": 1,
"timeWindow": 5,
"grade": 0,
"minRequestAmount": 3,
"statIntervalMs": 1000,
"slowRatioThreshold": 0.5
}
]
5.5 总结
适合Nacos配置中心负责主要配置源,Sentinel控制台作为临时管理平台(处理突发问题)。
不足:Sentinel控制台信息调整无法同步到Nacos配置中心。
6.Sentinel控制台集成Nacos配置中心
以流控规则为例。
6.1客户端配置调整
spring:
application:
name: user
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
prefix: dubbo-user-api
file-extension: yml
sentinel:
transport:
dashboard: 127.0.0.1:6780
eager: true # 取消懒加载
datasource:
ds-user-flow-rule:
nacos:
server-addr: 127.0.0.1:8848
#dataId: user-flow-rule
#groupId: user-sentinel
#namespace: sentinel
dataId: user-flow-rules
groupId: SENTINEL_GROUP
rule-type: flow # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)
ds-user-degrade-rule:
nacos:
server-addr: 127.0.0.1:8848
dataId: user-degrade-rule
groupId: user-sentinel
namespace: sentinel
rule-type: degrade # AUTHORITY(授权规则) DEGRADE(熔断规则) FLOW(流控规则) GW_API_GROUP GW_FLOW PARAM_FLOW(热点规则) SYSTEM(系统规则)
6.2 控台源码下载
githup地址:https://github.com/alibaba/Sentinel
源码地址:https://github.com/alibaba/Sentinel.git
6.3 修改(sentinel-dashboard)
6.3.1 pom文件修改
<!-- for Nacos rule publisher sample -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
<!-- Nacos集成注释掉 <scope>test</scope> -->
</dependency>
6.3.2 代码迁移
test目录下的nacos文件件copy到main目录下的对应目录下。
6.3.3 修NacosConfig.java
添加自己的Nacos配置中心地址。
@Bean
public ConfigService nacosConfigService() throws Exception {
return ConfigFactory.createConfigService("127.0.0.1:8848");
}
6.3.4 修FlowControllerV2.java
// NACOS 集成修改关闭
// @Autowired
// @Qualifier("flowRuleDefaultProvider")
// private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
// @Autowired
// @Qualifier("flowRuleDefaultPublisher")
// private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;
// NACOS 集成修改添加
@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;
6.3.5 修sidebar.html
打开注释掉的代码
注释掉如下代码
6.4 打包运行
java -Dserver.port=6780 -jar sentinel-dashboard.jar