Spring Cloud Alibaba实战(三) - Sentinel之限流
目录
(一)Nacos动态配置
(二)Nacos注册中心
(三)Sentinel之限流
(四)Sentinel之熔断
(五)Gateway之路由、限流
(六)Gateway之鉴权、日志
(七)Gateway搭配Nacos实现动态路由
(八)Dubbo + Nacos
正文
考虑充值是一项重要的功能,通常不希望因为查询余额接口调用过于频繁而导致充值功能不可用,现在引入Sentinel对payment-service服务的/balance接口做限流保护。
在上一节payment-service代码上增加依赖:
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId><version>${alibaba.version}</version></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>1.6.0</version></dependency>
在bootstrap.yml中增加Sentinel的数据源设置:
spring:application:name: payment-servicecloud:nacos:config:server-addr: 127.0.0.1:8848discovery:server-addr: 127.0.0.1:8848sentinel:datasource:ds1:nacos:server-addr: 127.0.0.1:8848dataId: ${spring.application.name}-flow-rulesdata-type: jsonrule-type: flow
其中,数据源名称ds1任意设置即可。这里使用Nacos作为数据源,所以名称的下一级属性设置为nacos。
接下来按dataId在Nacos中创建配置
dataId:payment-service-flow-rules
格式:JSON
内容:
[{"resource": "protected-resource","controlBehavior": 2,"count": 1,"grade": 1,"limitApp": "default","strategy": 0}
]
截图示例:
修改PaymentController
在getBalance方法上增加注解:
@SentinelResource(value = "protected-resource", blockHandler = "handleBlock")
添加一个handleBlock方法,要求参数与getBalance保持一致,并且在最后增加一个BlockException参数
public Balance handleBlock(Integer id, BlockException e) {return new Balance(0, 0, 0, "限流");}
在限流设置中,grade=1表示基于QPS/并发数做流量控制,count=1表示阈值为1,即QPS超过1触发。controlBehavior=0表示处理策略是直接拒绝。
重启payment-service,在浏览器中打开http://localhost:8082/pay/balance?id=1并迅速刷新,可以看到一部分的请求返回数据为handleBlock方法的返回值。
在Nacos中把count值改为1000,继续快速刷新浏览器,可以观察到不会再触发限流。
限流设置的主要参数:
参数 | 含义 | 选项 |
---|---|---|
grade |
限流阈值类型 |
0 基于线程数 1 基于QPS |
count | 限流阈值 | |
controlBehavior | QPS流量控制中对超过阈值的流量处理手段 |
0 直接拒绝 1 Warm Up 2 匀速排队 |
strategy | 调用关系限流策略 |
0 根据调用方限流(limitApp) 1 根据调用链路入口限流 2 具有关系的资源流量控制 |
limitApp | 调用来源 |
default 不区分调用者 {some_origin_name} 针对特定的调用者 other 针对除 {some_origin_name} 以外的其余调用方 |
匀速排队模式演示:
把controlBehavior设置为2,即匀速排队模式,同时增加一个参数maxQueueingTimeMs值为20000。再次快速刷新浏览器观察影响。
Sentinel控制台
Sentinel 提供一个轻量级的开源控制台,它提供机器发现以及健康情况管理、监控(单机和集群),规则管理和推送的功能。
下载
https://github.com/alibaba/Sentinel/releases
启动
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
使用
http://localhost:8080/
(用户名和密码都是sentinel)
修改payment-service的bootstrap.yml
spring:application:name: payment-servicecloud:nacos:config:server-addr: 127.0.0.1:8848discovery:server-addr: 127.0.0.1:8848sentinel:eager: truetransport:dashboard: localhost:8080datasource:ds1:nacos:server-addr: 127.0.0.1:8848dataId: ${spring.application.name}-flow-rulesdata-type: jsonrule-type: flow
重启应用后在Sentinel控制台中可以看到相关信息
示例源码
链接:https://pan.baidu.com/s/1_oo1-yY0Jb-aC3hBoozk-w
提取码:4uw7
Spring Cloud Alibaba实战(三) - Sentinel之限流相关推荐
- Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!
前一篇文章介绍了Spring Cloud Gateway的一些基础知识点,今天陈某就来唠一唠网关层面如何做限流? 文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流 ...
- Spring Cloud Gateway 整合阿里 Sentinel网关限流实战
文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流实现,过滤器是RequestRateLimiterGatewayFilterFactory,不过这种上不了台面的就 ...
- 【Spring Cloud Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权
一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间这里只贴出关键部分代码的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证 ...
- Spring Cloud Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)
文章目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashbo ...
- 6.Spring Cloud Alibaba教程:Sentinel流量防卫兵的介绍与基本使用
官网 https://sentinelguard.io/ 服务雪崩 微服务中各个服务之间通过http/rpc互相调用,假设其中1个服务因为网络或自身原因出现问题,调用这个服务就会出现线程堵塞,此时若有 ...
- 三、spring cloud alibaba学习(Sentinel)
雪崩效应 也叫级联故障,基础服务故障导致上层服务故障,并不断放大的过程. 例如C-->B-->A,A挂了,B调用A超时,B的线程有限,满了以后导致B也挂了,逐渐导致C及后面的也挂了,就像滚 ...
- Spring Cloud Alibaba (三)Sentinel 简单介绍和使用
前言 随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统自适应保护等多个维度来帮助您保障微服务 ...
- Spring Cloud Alibaba 实战(四)Oauth2篇【单点登录】
1. Oauth2 简介 OAuth2 其实是一个关于授权的网络标准,它制定了设计思路和运行流程,利用这个标准我们其实是可以自己实现 OAuth2 的认证过程的. spring-cloud-start ...
- Spring Cloud Alibaba 实战(五)Zuul篇
网关:主要作用认证和鉴权.最合适的解决办法是:网关解决认证问题, 子系统解决授权问题. 1. Zuul 简介 Zuul 微服务网关是为 Spring Cloud Netflix 提供动态路由,监控,弹 ...
最新文章
- 用C#对ADO.NET数据库完成简单操作
- Android重要组件之一 Service 服务讲解学习(一)
- linux vnc xstartup,vnc 远程桌面选择的配置 xstartup
- 香农定理和奈奎斯特定理区别_「中考复习」三大变换之旋转(旋转的构造-托勒密定理)...
- python有几种模式_python的设计模式都有哪些?
- ajax为什么有时候不行,为什么不能用ajax调用
- 【POJ - 1511】 Invitation Cards(Dijkstra + 反向建图 多源到单源最短路的处理)
- 维修点滴:键盘进杂物
- python两个一维数组合并_python:16.合并两个排序的链表
- 前端开发~uni-app ·[项目-仿糗事百科] 学习笔记 ·008【首页开发】
- C#中IPAddress与域名的使用
- 人工智能+社交 csdn_关于AI和社交媒体虚假信息,我们需要尽快进行三大讨论
- 电机学(2) - 变压器
- 创新案例分享 | 升级改造干部档案管理系统,精确剖析干部执行力情况
- 大学如何自学计算机科学与技术?
- 经传主力控盘指标公式 清晰的主力控盘程度详解 通达信选股指标
- 用户管理的备份恢复(2)
- 京训钉怎么快速看完_在钉钉用培训机构CRM管理系统,助力协同办公一体化
- 软件构造Lab2-Playing Chess
- 【WLAN】【测试】WLAN相关测试软件一览