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文件修改
-         
-         <dependency>
-             <groupId>com.alibaba.cspgroupId>
-             <artifactId>sentinel-datasource-nacosartifactId>
-             
-         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> ruleProvider; 
- //    @Autowired
- //    @Qualifier("flowRuleDefaultPublisher")
- //    private DynamicRulePublisher> rulePublisher; 
-  
-     //    NACOS 集成修改添加
-     @Autowired
-     @Qualifier("flowRuleNacosProvider")
-     private DynamicRuleProvider> ruleProvider; 
-     @Autowired
-     @Qualifier("flowRuleNacosPublisher")
-     private DynamicRulePublisher> rulePublisher; 
6.3.5 修sidebar.html
打开注释掉的代码

注释掉如下代码

6.4 打包运行
java -Dserver.port=6780 -jar sentinel-dashboard.jar
6.5 控制台添加规则

6.6 Nacos 配置中心查看


作者推荐
本文涉及知识点
动态规划 记忆化搜索
LeetCode546. 移除盒子
给出一些不同颜色的盒子 boxes ,盒子的颜色由不同的正数表示。
 你将经过若干轮操作去去掉盒子,直到所有的盒子都去掉为止。每一轮你可以移除具有相同颜色的连续 k 个盒子(k >= 1),这样一轮之后你将得到 k * k 个积分。
 返回 你能获得的最大积分和 。
 示例 1:
 输入:boxes = [1,3,2,2,2,3,4,3,1]
 输出:23
 解释:
 [1, 3, 2, 2, 2, 3, 4, 3, 1]
 ----> [1, 3, 3, 4, 3, 1] (33=9 分)
 ----> [1, 3, 3, 3, 1] (11=1 分)
 ----> [1, 1] (33=9 分)
 ----> [] (22=4 分)
 示例 2:
 输入:boxes = [1,1,1]
 输出:9
 示例 3:
 输入:boxes = [1]
 输出:1
 提示:
 1 <= boxes.length <= 100
 1 <= boxes[i] <= 100
动态规划
动态规划的状态表示:
dp[l][r][k]表示消除以下子序列获得的最大得分。
 boxes[0,l)已经消除或不会对消除此子序列有影响。
 boxes[l,r]全部没有消除。
 boxes(r,n)除k个boxes[r]外,全部消除。
思路
假定boxs[i1]、boxs[i2]、boxs[i3]、boxes[i4]相等,且不存在其它等于boxs[i4]的盒子。消除i4时有如下可能。
 为了方便,用g(l,r)代替 dp[l+1][r-1][0] f(r,k)代替dp[0][r][k]
| i4 | f[i4-1][0]+(k+1) ^2 | l ,i4,0 | 
| i3 i4 | f[i3][1]+g(i3,i4) | l ,i4,0 -->l,i3,1 | 
| i2 i4 | f[i2][1]+g(i2,i4) | l ,i4,0 ->l,i2,1 | 
| i1 i4 | f[i1][1]+g(i1,i4) | l ,i4,0 >l,i1,1 | 
| i1 i2 i4 | f[i1][2]+g(i1,i2)+g{i2,i4) | l ,i4,0 --> l,i2,1 -> l,i1->2 | 
| i1 i3 i4 | f[i1][2]+g(i1,i3)+g{i3,i4) | l ,i4,0 --> l,i3,1 -> l,i1->2 | 
| i2 i3 i4 | f[i2][2]+g(i2,i3)+g{i3,i4) | l ,i4,0 --> l,i3,1 -> l,i2->2 | 
| i1 i2 i3 i4 | f[i1][3]+g(i1,i2)+g{i2,i3)++g{i3,i4) | l ,i4,0 --> l,i3,1 ->l,i2->2–>l,i1,3 | 
 
                                    





 class="blog_extension_card_cont">
          
           class="blog_extension_card_cont">
             
               
        
    
                
                
评论记录:
回复评论: