关于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进行验证。