Sentinel组件接入并使用apollo进行配置管理和同步

关于Sentinel,可以按照Sentinel官方进行学习和了解 Sentinelhttps://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5

springboot-dubbo 服务接入sentinel-dashboard(可选)

sentinel-dashboard为我们提供限流访问的各种查询和配置。

 接入方法:

(1) 在基础上引入组件 sentinel-transport-simple-http 为dashboard上报应用状态信息.

<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-transport-simple-http</artifactId>
    <version>${sentinel.version}</version>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </exclusion>
    </exclusions>
</dependency>

(2) 需要在工程启动参数中增加

 -Djava.net.preferIPv4Stack=true -Dcsp.sentinel.api.port=[自定义需要上报信息的端口号,默认8719] -Dcsp.sentinel.dashboard.server=[host:port] -Dproject.name=[工程名称]

(3) sentinel-dashboard使用和安装请参见教程 https://github.com/alibaba/Sentinel/wiki/%E6%8E%A7%E5%88%B6%E5%8F%B0

以上步骤完成后可以在sentinel-dashboard中查看和管理限流和降级。

测试限流实际使用情况

(1) 数据准备

通过dahsboard可以看到目前的流控规则是 QPS阀值为 5

我们启动jmeter设置线程数和请求参数:

启动jmeter,进行访问请求。通过sentinel-dashboard上查看当前QPS和限流情况,

通过dashboard上验证,发起10个用户并发请求,有5个被拒绝。

通过jmeter验证结果:

jmeter显示返回结果为5个正常返回,5个返回5000的code。证明限流生效。

sentinel 集成 apollo 最佳实践

针对apollo上的配置无法实时生效,针对此项改进,网上已有解决方案。本章节通过集成该方案实现从apollo拉取最新配置并同步到dashaboard和应用程序中。

网文 sentinel 集成 apollo 最佳实践https://cloud.tencent.com/developer/article/1610501 可实现这种功能,但该种方式目前只能从apollo拉取配置后同步到dashboard,并不能让应用程序即时生效最新限流规则。

配置完成后的效果如下:

  • 我们可自行改造sentinel-dashboard进行配置即时更新到应用程序。具体步骤如下:

(1) 在sentinel下载源码进行改造。主要修改sentinel-dashboard工程。

工程分为两部分,一部分是java应用程序,另一部分是基于angular构建的web应用,项目采用非前后分离进行部署。

我们需要修改调用流控规则页面对应的接口。

(a) java应用程序部分修改

   

(b) 静态页面修改

 

 静态页面修改后需要执行 npm run build 生成dist文件夹下js和css文件。

  需要注意的是在编译时可能会出现报错信息,检查是否安装了项目需要的包

```

npm install -g grunt-cli
npm install -g bower

````

还需要注意的是sentinel-dashboard pom.xml文件需要将 引用的apollo-openapi 的scope删除掉

最后对sentinel-dashboard工程进行编译,生成jar包

最后是项目的启动,以下是示例:

java -Dserver.port=8989 -Dapp.id=sentinel-apollo -Dproject.name=sentinel-apollo -Dmodify.user=[apollo用户名] -Drelease.user=[apollo用户名] -Dapollo.portal.url=[apollo host].token=[apollo开放平台token] -jar sentinel-dashboard.jar

从官网fork出来一个apollo配置的分支,可以直接下载查看

https://github.com/maxinfan/Sentinel/tree/feature/sentinel-dashboard-apollo

客户端的改造主要包括包的引入和配置文件修改:

如果是对web工程进行限流策略,需要修改:

 

application.yaml文件增加配置:

spring: 

   cloud:
    sentinel:
      transport:
        dashboard: 192.168.110.158:8989  # sentinel 控制台的地址
      datasource:
        ds1:
          apollo:
            namespace-name: RD.sentinel-rule  # 保存规则的 apollo 应用的公共 namespace, 要与 sentinel 控制台启动参数一致
            rule-type: flow   # 指定该数据源是限流规则
            flow-rules-key: ${spring.application.name}-${spring.cloud.sentinel.datasource.ds1.apollo.rule-type} # 指定该规则在 apollo 应用中 key 名称
        ds2:
          apollo:
            namespace-name: RD.sentinel-rule
            rule-type: degrade # 指定该数据源是熔断规则
            flow-rules-key: ${spring.application.name}-${spring.cloud.sentinel.datasource.ds2.apollo.rule-type} # 指定该规则在 apollo 应用中 key 名称
        ds3:
          apollo:
            namespace-name: RD.sentinel-rule
            rule-type: param_flow # 指定该数据源是参数限流规则
            flow-rules-key: ${spring.application.name}-${spring.cloud.sentinel.datasource.ds3.apollo.rule-type} # 指定该规则在 apollo 应用中 key 名称

一切启动就绪后先请求一次上述接口后,在dashboard端即可查询到相关接口信息。

以上步骤操作后可通过jmeter进行验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值