Sentinel配置持久化到Nacos实现流控熔断

2022-11-27  本文已影响0人  分布式与微服务

控制台

jar 下载:github.com/alibaba/Sen…

启动参数

# 将控制台自身接入到sentinel
nohup java -jar -Dproject.name=sentinel-dashboard -Dcsp.sentinel.dashboard.server=localhost:8181 sentinel-dashboard-1.8.5.jar --server.port=8181 &> sentinel.log &
# -Dsentinel.dashboard.auth.username=sentinel 
# -Dsentinel.dashboard.auth.password=sentinel 

控制台页面

心跳时间

通过多次刷新页面,发现默认每隔10秒发送一次心跳。


规则下发

端口配置会在应用对应的机器上启动一个 Http Server ,该 Server 会与 Sentinel 控制台 做交互。

比如 Sentinel 控制台添加了一个限流规则,会把规则数据 push 给这个 Http Server 接收,Http Server 再将规则注册到 Sentinel 中。

接入Nacos

pom

<!-- spring cloud alibaba nacos discovery 依赖 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2021.1</version>
        </dependency>

yaml

spring:
  application:
    name: cloud-alibaba-sentinel
  cloud:
    nacos:
      discovery:
        enabled: true
        server-addr: 0.0.0.0:8848
        namespace: 9862bd7f-2dc2-47a4-9c80-c6290c5c3e2b
        metadata:
          management:
            context-path: ${server.servlet.context-path}/actuator
      config:
        enabled: false
#        namespace:
#        group:
    sentinel:
      transport:
        dashboard: localhost:8181
        port: 8182
#        clientIp: localhost

本地连接服务器的sentinel,能注册上但是没有实时监控也没有链路,换了版本也不行。

最后还是用的本地sentinel,如果有知道解决方法的可以评论。

流控案例

名词解释

流控测试


熔断案例

来看一下熔断规则的这些字段:

该配置将要达到的效果是: 1秒(1000ms)内达到10个请求以上,当响应时长超过0.5秒的请求数量大于1(10 * 0.1)个的时候进行熔断,熔断5秒后变成 Half Open 状态,即5秒后的第一个请求若没有问题则恢复正常,否则继续熔断。 这是一个 慢调用比例 的熔断策略。

配置持久化

Sentinel DashBoard 上配置的规则只存在缓存中,当项目重启,这些规则就消失了。如何持久化配置信息呢?

Sentinel 提供多种不同的数据源来持久化规则配置,包括 FileRedisNacosZooKeeper 等。

pom

<!-- 引入 Sentinel 数据源 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
</dependency>
<!-- Sentinel数据源之 Nacos -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

流量控制规则(FlowRule)

熔断降级规则 (DegradeRule)

示例

[
  {
    "resource": "/user/findById",
    "limitApp": "default",
    "grade": 1,
    "count": 2,
    "strategy": 0,
    "controlBehavior": 0,
    "clusterMode": false
  }
]

yaml

spring:
  application:
    name: cloud-commerce-user
#  zipkin:
#    #    sender:
#    #       type: kafka # 默认是 web
#    base-url: http://101.43.160.149:9411/
  cloud:
    nacos:
      discovery:
        enabled: true
        server-addr: 0.0.0.0:8848
        namespace: 123
        metadata:
          management:
            context-path: ${server.servlet.context-path}/actuator
    sentinel:
      transport:
        # 101.43.138.173
        dashboard: localhost:8181
        port: 8182
#        clientIp: localhost
      datasource:
        nacos: # 这个名字任意起
          nacos:
            serverAddr: 0.0.0.0:8848
            groupId: DEFAULT_GROUP
            dataId: cloud-sentinel-rule
            namespace: 123
            ruleType: flow
            data-type: json

发布配置之后重启项目,访问流控的资源,规则就会被拉取到 sentinel-dashbroad 。

在 nacos 更改配置,也会实时更新。


双向推送

大佬改造之后的 dashboard :github.com/CHENZHENNAM…

上一篇 下一篇

猜你喜欢

热点阅读