【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(上):https://developer.aliyun.com/article/1390157
5. Sentinel流控规则
💧流控规则用于限制资源的访问速率,防止系统被过多请求拖垮。例如,我们可以设置一个API在一分钟内最多只能处理100个请求:
- 资源名:唯一名称。默认请求路径
- 针对来源: Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)
- 阈值类型/单机阔值:
- QPS(每秒钟的请求数量):当调用该api的QPS达到阔值的时候,进行限流。
- 线钱程数:当调用该api伯9美程数认到阈值的时候。进行限流
- 是否集群:不需要集群
- 流控模式:
- 直接: api达到限流尔件时,直接限流
- 关联:当关联的资源达到阔值时。就限流自己
- 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
- 流控效果:
- 快速失败:直接失败,抛异常
- Warm up:根据codeFactor (冷加载因子,默认3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值。
💧添加流控规则
- 方法1
- 方法2
💧新增流控规则
💧再次访问 http://localhost:8401/testA 每秒点两次,直接限流
💧修改规则
💧修改代码
💧开两个线程,分别狂点
💧再次限流
💧当关联资源/testB的qps阀值超过1时,就限流/testA的Rest访问地址
💧使用postman 模拟连续密集访问testB
💧新建collection
💧点击Run 配置发送规则
💧此时访问testA,发现已经挂了,产生了连坐效应
💧预热冷启动,效果:刚开始点太快不行,等预热时间到了就可以正常访问
💧排队等待,一秒一个
6. Sentinel服务降级
💧服务降级是应对系统高并发时的一种保护措施。当资源的异常比例超过阈值时,系统将自动对该资源进行降级,避免系统崩溃。
💧测试代码:
💧新增降级规则
💧打开JMeter
💧添加线程组
💧点击运行
💧此时访问:http://localhost:8401/testE,服务已降级
💧停掉JMeter后,再次访问,不会降级,展示不友好的ERROR页面
💧异常数,时间要大于60s
💧快速请求五次testE,服务降级
7. Sentinel热点key限流
💧热点key限流用于对一些热点资源进行限制,防止因某个热点资源过于频繁访问而导致系统故障。
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的TopK数据,并对其访问进行限制。比如:
- 商品ID为参数,统计—段时间内最常购买的商品ID并进行限制
- 用户ID为参数,针对—段时间内频繁访问的用户ID进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
Sentinel利用LRU策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。
💧自定义兜底降级方法,@SentinelResource
💧访问一下:http://localhost:8401/testHotKey
💧添加限流规则
💧连续点击两次:http://localhost:8401/testHotKey?p1=a,限流,走兜底方法
💧如果我们配置了限流规则,但不添加兜底方案,那么被触发限流机制后就会直接报500
💧添加“参数例外项”,即使我们触发了上面的限流,但如果这个参数值是我们特殊指定的,则会走特殊通道
💧我们疯狂访问:http://localhost:8401/testHotKey?p1=5,没有任何问题。
💧而把5改为3,则依然限流,走兜底方法
【分布式流控组件 Sentinel 快速入门】——图文详解操作流程(下):https://developer.aliyun.com/article/1390160?spm=a2c6h.13148508.setting.17.4fea4f0ervlqra