天津营销类网站设计,网站域名到期登不上是怎么回事,安阳那里可以制作网站,ppt免费背景图片一、背景
我的项目需要引入限流#xff0c;降级#xff0c;熔断框架#xff0c;由于 Spring Cloud 2022.0.4 已经不再支持 Hystrix#xff0c;Spring Cloud 提供了替代方案#xff0c;如 Resilience4j#xff0c;可以使用它来替换 Hystrix。但是网上搜了一下国内Resilie…一、背景
我的项目需要引入限流降级熔断框架由于 Spring Cloud 2022.0.4 已经不再支持 HystrixSpring Cloud 提供了替代方案如 Resilience4j可以使用它来替换 Hystrix。但是网上搜了一下国内Resilience4j使用的人很少相反Alibaba的Sentinel使用的人非常多并且也一直在维护最新的版本v1.8.7 是3周前发布的 二、Sentinel 介绍
Sentinel 的使用可以分为两个部分:
核心库Java 客户端不依赖任何框架/库能够运行于 Java 8 及以上的版本的运行时环境同时对 Dubbo / Spring Cloud 等框架也有较好的支持见 主流框架适配。控制台DashboardDashboard 主要负责管理推送规则、监控、管理机器信息等。
参考官网quick-start | Sentinel
三、安装Dashboard
1. 下载 Dashboard
地址https://github.com/alibaba/Sentinel/releases
当前最新的版本是
sentinel-dashboard-1.8.7.jar
2. 点击下载 3. 上传到服务器
启动程序我这里把启动端口改成了8090因为8080是自己写程序的默认端口看着挺奇怪的
java -Dserver.port8090 -Dcsp.sentinel.dashboard.serverlocalhost:8090 -Dproject.namesentinel-dashboard -jar sentinel-dashboard.jar如果需要设置开机自起可以参考我的另一篇文章Centos7 如何设置开机启动某个程序-CSDN博客
4. 访问面板
http://192.168.31.110:8090
这里的IP改成自己机器IP
默认用户名和密码都是 sentinel 四、SpringBoot 3.1.7 应用程序如何集成
参考官网地址 https://github.com/alibaba/spring-cloud-alibaba/blob/2.2.x/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md 1. 添加依赖包
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-sentinel/artifactId
/dependency!-- 添加依赖管理 --
dependencyManagementdependenciesdependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion2022.0.0.0/versiontypepom/typescopeimport/scope/dependency/dependencies
/dependencyManagement
这里一定一定要注意版本一致性问题如果版本引用错了服务启动时不会加载sentinel
我的SpringBoot3.1.7 对应的Alibaba.cloud 版本号是2022.0.0.0
2. 添加配置信息
spring:cloud:sentinel:transport:dashboard: 192.168.31.110:8090port: 8719
这里的dashboard 配的与sentinel.dashboard 服务的地址
port 则是当前服务的agent 端口sentinel 会在你的应用中启动另一个特殊端口与sentinel.dashboard通信
3. 启动测试sentinel
启动我们的SpringBoot服务
随便用个接口请求一下自己SpringBoot服务 如果能看到下面这几行日志说明本地的sentinel agent 启动成功了 4. 查看sentinel 面板
顺利的话已经有监控数据了 我在操作的时候刚开始sentinel.dashboard部署在本机Window就正常通信一旦我部署到虚拟机的Centos上就通信失败后来找到原因是因为sentinel.dashboard需要反过来跟sentinel agent 通信所以也就是说双方的网络都必须是互通的本来我们网络是互通的但犹豫我Window电脑有3个网卡注册的时候系统随机选了一个网卡的IP地址导致Centos无法访问我的Window上的Agent应用解决方案SpringBoot 服务注册IP选择问题-CSDN博客 五、配置限流规则并验证
访问sentinel.dashboard
1. 单击 流控规则 然后点击 “新增流控规则” 2. 填写需要限流的 URL 相对路径
单机阈值选择需要限流的阈值点击新增进行确认。(为了便于演示效果这里将值设置成了 1)。 3. 快速点击postman请求此时我们发现已经返回了限流 六、给sentinel配置数据源
1. 介绍
如果不配置数据源当应用重启后限流等配置信息都会丢失需要再次重新配置
因为我选用的Consul作为我的注册和配置中心那么我就选用Consul作为sentinel的数据源。
如果不是用Consul作为我的注册和配置中心可以跳过这一步
参考文档
https://github.com/alibaba/spring-cloud-alibaba/blob/2022.x/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/readme-zh.md
官方介绍说 Sentinel starter 整合了目前存在的几类 ReadableDataSource。只需要在配置文件中进行相关配置即可在 Spring 容器中自动注册 DataSource。
但是很遗憾 目前支持file, nacos, zk, apolloredis 这5种类型。
于是我找到了sentinel-datasource-consul 的git地址
https://github.com/alibaba/Sentinel/tree/1.8.6/sentinel-extension/sentinel-datasource-consul
难过的是官网就这么点文档内心虽然我写代码也经常不喜欢写文档但是你好歹写一下配置文档啊 2. 添加依赖 dependencygroupIdcom.alibaba.csp/groupIdartifactIdsentinel-datasource-consul/artifactIdversion1.8.6/version/dependency
3. 查看配置过程
无奈我只能翻翻源码看看怎么配置找到这个类
com.alibaba.cloud.sentinel.datasource.config.ConsulDataSourceProperties 看来要配置这几个类 结果启动包这个错误
java.lang.NullPointerException: Cannot invoke com.alibaba.cloud.sentinel.datasource.RuleType.getName() because the return value of com.alibaba.cloud.sentinel.datasource.config.AbstractDataSourceProperties.getRuleType() is null于是我找到对应的RuleTypeFlow 表示限流类型 终于不报错误了
4. 最终配置如下
spring:cloud:sentinel:transport:dashboard: 192.168.31.110:8090port: 8719datasource:ds1:consul:host: 192.168.31.110port: 8500ruleKey: sentinel_flow_rulewatchTimeout: 5ruleType: flow
5. 配置限流规则 然后重启服务规则仍然没有 查找资料才知道
在Sentinel Dashboard上修改流控规则后并不会同步到Nacos目前Sentinel Dashboard不支持该功能。
希望未来能支持吧
那么只能我们手动配置
6. 限流配置文档参考文档
https://github.com/alibaba/Sentinel/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8#%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6%E8%A7%84%E5%88%99-flowrule
7. 限流配置步骤
登录 Consul平台
http://192.168.31.110:8500/ui/dc1/kv
点击create按钮 [{resource: /submitOrder,count: 5}
]
再次打开Sentinel 控制面板的流控规则可以看到Consul配置的规则已经加载进去了 8. 在线更新Consul配置值
不需要重启应用实时同步到Sentinel 七、限流后的压力测试
我们接着电商系统设计到开发02 单机性能压测-CSDN博客
1. 准备工作
上次测试单机最高吞吐量为110/s
这次我们限流 50 QPS用100个线程去压测5分钟看看程序能抗QPS为多少?(忽略出现限流错误) 2. 压测结果
从下图中我们可以看到压测的最高的QPS 已经达到了上千程序依旧稳定运行并没有崩溃并且每秒有50QPS仍然正常给用户提供服务说明sentinel 给我们程序提供了很好的保护作用 对比不加sentinel 的100线程压测结果吞吐量 115 - 741 提升了很多 3. 提示压测线程数300结果
无限流 限流50 加了sentinel 限流吞吐量增加了10倍关键是平均时延迟从原来的2885ms降到了之前的1/10 正常耗时范围200多ms也就是说请求的用户量越多sentinel 限流的作用越明显