一文读懂Dashobard 使用原理 (下半场)

一文读懂Dashobard目录

本人书写这个文章心情比较复杂
1.为了分享这个学习方法
2.为了记录当时的感悟和这个过程
3.希望遇到有同感的人,记得要收藏一下



前言

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。

温馨提醒:

此文是只是个人对于SpringCloud Nacos 结合 Dashobard进行的一些个人整理。
对于学习方法个人建议:先网上查找文档了解个大概 带着问题 阅读对应的官方文档,然后在阅读详细讲解


一、Dashobard官网网站

https://sentinelguard.io/zh-cn/docs/open-source-framework-integrations.html
在Dashobard 有一点是很重要的那就是 资源
这就涉及到资源的定义
只有定义了资源才可以进行保护

资源的定义 大体分文2中

一、是代码层面定义的资源。

  • 定义资源简介绍(https://sentinelguard.io/zh-cn/docs/basic-api-resource-rule.html)

  • 这里是介绍资源的定义种类和方式

  • 重点:

  • 定义资源 方式一:主流框架的默认适配 为了减少开发的复杂程度,我们对大部分的主流框架,例如 Web Servlet、Dubbo、Spring Cloud、gRPC、Spring WebFlux、Reactor
    等都做了适配。您只需要引入对应的依赖即可方便地整合 Sentinel。可以参见:主流框架的适配。


意思的啥呢 :是说主流框架都定义好了。无需定义 其他的调用方式需要定义资源

二、是手动定义的资源

  1. 方式二:抛出异常的方式定义资源
  2. 方式三:返回布尔值方式定义资源
  3. 方式四:注解方式定义资源

这个是github定义的注解资源

https://github.com/alibaba/Sentinel/wiki/%E6%B3%A8%E8%A7%A3%E6%94%AF%E6%8C%81

  1. 方式五:异步调用支持

以上定义的几种资源定义方式都是上面连接定义的

二、Dashobard客户端的使用

一、Dashobard 源码下载地址

Dashobard 下载:
https://github.com/alibaba/Sentinel/tree/16e1bb8fe80caa7d48b8d258f59c4c491a800645
https://github.com/alibaba/Sentinel/tree/16e1bb8fe80caa7d48b8d258f59c4c491a800645/sentinel-dashboard

代码下载位置

https://sentinelguard.io/zh-cn/docs/dashboard.html(重点为啥要下载源码进行改造
本文重点强调 Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。这里,我们将会详细讲述如何通过简单的步骤就可以使用这些功能。

接下来,我们将会逐一介绍如何整合 Sentinel 核心库和 Dashboard,让它发挥最大的作用。同时我们也在阿里云上提供企业级的 Sentinel 服务:AHAS Sentinel 控制台,您只需要几个简单的步骤,就能最直观地看到控制台如何实现这些功能,并体验多样化的监控及全自动托管的集群流控能力。

Sentinel 控制台包含如下功能:

查看机器列表以及健康情况:收集 Sentinel 客户端发送的心跳包,用于判断机器是否在线。
监控 (单机和集群聚合):通过 Sentinel 客户端暴露的监控 API,定期拉取并且聚合应用监控信息,最终可以实现秒级的实时监控。
规则管理和推送:统一管理推送规则。
鉴权:生产环境中鉴权非常重要。这里每个开发者需要根据自己的实际情况进行定制。

注意:Sentinel 控制台目前仅支持单机部署。Sentinel 控制台项目提供 Sentinel 功能全集示例,不作为开箱即用的生产环境控制台,若希望在生产环境使用请根据文档自行进行定制和改造。

二、原理简述

控制台推送规则:
将规则推送到Nacos或其他远程配置中心
Sentinel客户端链接Nacos,获取规则配置;并监听Nacos配置变化,如发生变化,就更新本地缓存(从而让本地缓存总是和Nacos一致)
控制台监听Nacos配置变化,如发生变化就更新本地缓存(从而让控制台本地缓存总是和Nacos一致)

三、微服务改造

加依赖

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

添加配置

spring:
  cloud:
    sentinel:
      datasource:
        # 名称随意
        flow:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-flow-rules
            groupId: SENTINEL_GROUP
            # 规则类型,取值见:
            # org.springframework.cloud.alibaba.sentinel.datasource.RuleType
            rule-type: flow
        degrade:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-degrade-rules
            groupId: SENTINEL_GROUP
            rule-type: degrade
        system:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-system-rules
            groupId: SENTINEL_GROUP
            rule-type: system
        authority:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-authority-rules
            groupId: SENTINEL_GROUP
            rule-type: authority
        param-flow:
          nacos:
            server-addr: localhost:8848
            dataId: ${spring.application.name}-param-flow-rules
            groupId: SENTINEL_GROUP
            rule-type: param-flow

四、Sentinel控制台改造

控制台改造主要是为规则实现

DynamicRuleProvider:从Nacos上读取配置
DynamicRulePublisher:将规则推送到Nacos上
修改pom.xml,找到:

<!-- for Nacos rule publisher sample -->
  <dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
    <scope>test</scope>
  </dependency><scope>test</scope> 这一行注释掉,即改为如下:

<!-- for Nacos rule publisher sample -->
<dependency>
  <groupId>com.alibaba.csp</groupId>
  <artifactId>sentinel-datasource-nacos</artifactId>
  <!--<scope>test</scope>-->
</dependency>

找到 sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos目录,将整个目录拷贝到 sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos,如图:

在这里插入图片描述

修改 com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2 ,找到

@Autowired
@Qualifier("flowRuleDefaultProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleDefaultPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

修改为:

@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;
修改 sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html,找到:
<!--<li ui-sref-active="active">-->
  <!--<a ui-sref="dashboard.flow({app: entry.app})">-->
    <!--<i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则 V1</a>-->
<!--</li>-->

把注释解开,即改为:

<li ui-sref-active="active">
  <a ui-sref="dashboard.flow({app: entry.app})">
    <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控规则 V1</a>
</li>

齐活儿啦!终于把流控规则改造成推模式持久化啦!

五、编译 & 启动

执行 mvn clean package -DskipTests
在项目的 target 目录找到sentinel-dashboard.jar ,执行 java -jar sentinel-dashboard.jar 启动控制台。

六、测试

测试1:用Sentinel控制台【菜单栏的 流控规则 V1 】推送流控规则,规则会存储到Nacos;
测试2:直接在Nacos上修改流控规则,然后刷新Sentinel控制台,控制台上的显示也会被修改;
测试3:重启Sentinel控制台,并重启微服务;刷新控制台,可以发现规则依然存在。

七、这才是第一步…

以上,其实只实现了流控规则的持久化。Sentinel有若干种规则,例如降级规则、系统规则、授权规则、热点规则等,都需要使用类似的方式,修改 com.alibaba.csp.sentinel.dashboard.controller 包中对应的Controller,才能实现持久化。

八、基于整体的限流规则更改

笔者已经基于Sentinel Dashboard 1.8.4做了修改,为如下规则提供了持久化:
流控规则
降级规则
系统规则
授权规则
参数热点规则
在这里插入图片描述

在gitee 上的地址为() 仅供测试,若用于生产环境,请务必review一下。


总结(完整修改版地址Dashobard 1.8.4)

未完待续。
提示:这里对文章进行总结:

本文讲解了nacos 集成 Dashobard 动态推送配置信息。
其中,注入的两个bean:

flowRuleNacosProvider,就是实现Nacos的限流规则配置拉取。
flowRuleNacosPublisher,实现Nacos的配置推送。
FlowRuleNacosProvider.java 如下,无需修改

getRules方法中的appName参数是Sentinel中的服务名称。
configService.getConfig方法是从Nacos中获取配置信息的具体操作。其中,DataId和GroupId分别对应客户端使用时候的对应配置。如下:
spring.cloud.sentinel.datasource.ds1.nacos.server-addr=192.168.100.80:8848
spring.cloud.sentinel.datasource.ds1.nacos.dataId=${spring.application.name}-flow-rules
FlowRuleNacosPublisher.java如下,无需修改:

打开 NacosConfigUtil.java ,如下两个地方,需要和上面使用nacos存储时的配置一致。注意:两边的DataId和GroupId必须对应上。

打开 NacosConfig.java,修改如下,主要是nacos配置中心的地址与namespace隔离环境的配置修改,如果没有设置namespace,就可以不设置 PropertyKeyConst.NAMESPACE 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值