Sentinel笔记(二)流量监控

如何在项目中添加Sentinel的支持请看这里
Sentinel笔记(一)第一个监控实例

流量监控规则

  • 资源名:唯一名称,默认请求路径
  • 针对来源:Sentinel可以针对调用者进行限流,填写微服务名,指定对哪个微服务进行限流 ,默认default(不区分来源,全部限制)
  • 阈值类型/单机阈值
    • QPS(每秒钟的请求数量):当调用该接口的QPS达到了阈值的时候,进行限流;
    • 线程数:当调用该接口的线程数达到阈值时,进行限流
  • 是否集群:不需要集群
  • 流控模式
    • 直接:接口达到限流条件时,直接限流
    • 关联:当关联的资源达到阈值时,就限流自己
    • 链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就可以限流)【api级别的针对来源】
  • 流控效果
    • 快速失败:直接失败,抛出异常
    • Warm Up:根据coldFactor(冷加载因子,默认3)的值,从阈值/coldFactor,经预热时长逐渐升至设定的 QPS 阈值
    • 排队等待:匀速排队,让请求以均匀的速度通过,阈值类型必须设置为QPS,否则无效

添加流控规则两种方式

第一种在已知的簇点链路上添加
在这里插入图片描述
第二种在流控规则菜单内自定义添加
在这里插入图片描述

创建第一个流控规则(QPS快速失败)

新增如下规则
在这里插入图片描述
/test/a资源设置QPS每秒1次的限制
流控模式:直接
流控效果:快速失败
意思就是如果每秒超过1次以上的访问会直接限流并返回失败

保存后可以在流控规则列表里面看到刚刚配置的规则,并且可以在这里进行修改和删除
在这里插入图片描述

测试一下

疯狂访问 http://localhost:8401/test/a
在这里插入图片描述
成功出现默认的失败信息

流控模式

基于线程的快速失败

创建以下配置,表示同时访问的线程数超过1就直接失败
在这里插入图片描述
针对于线程来说,直接就是快速失败,在直接下面没有其他的高级选项
测试:我们需要先修改testB()方法,让其在内部休眠800ms,要是不这么搞的话就这个方法用手点刷新累死也超不过一个线程

    @GetMapping("/test/b")
    public String TestB(){
        try {
            TimeUnit.MILLISECONDS.sleep(800L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "======Test B========";
    }

点快一点总会成功的,哈哈
在这里插入图片描述
由于线程数的流控效果只有快速失败,后面的流控模式统一用QPS进行测试

关联

关联:当关联的资源达到阈值时,就限流自己
创建如下图的配置,就是当资源/test/b的QPS超过每秒一次,那么就限制/test/a接口
在这里插入图片描述

testB()方法改回来

    @GetMapping("/test/b")
    public String TestB(){
        return "======Test B========";
    }

使用PostMan进行测试,要不然我们来回切很麻烦
创建请求,先测试接口是否能访问成功,能正常访问后点击Save或者右边的小三角SaveAs
在这里插入图片描述
弹出表单,点+ Create Collection,然后起名保存就可以了,我这起名test
在这里插入图片描述
然后主界面左侧菜单切换到Collections就能看到了,鼠标放到我们创建的 test 这一栏,右边出现小三角,点击小三角就可以配置请求次数,请求间隔等参数了
在这里插入图片描述
小三角点出菜单后点击run
在这里插入图片描述
然后出来界面后填入,20次请求,每隔300ms一次,点击Run test
在这里插入图片描述
运行后,马上去浏览器访问
http://localhost:8401/test/a,如期出现失败
在这里插入图片描述

链路

从簇点链路的树状视图可以看到,sentinel_web_servlet_context 为 /test/a 的入口资源
在这里插入图片描述
创建下面的配置,如果从 sentinel_web_servlet_context 走到 /test/a 的请求QPS大于1,那么就失败
在这里插入图片描述
保存后测试,疯狂访问 http://localhost:8401/test/a 就会返回失败

流控效果

直接失败

前面的例子也是用了直接失败了,这里就不再演示了
Sentinel里面直接失败的源码来自下面这个类,感兴趣的可以看一下
com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController

Warm Up(预热)

Warm Up:根据coldFactor(冷加载因子,默认3)的值,从阈值/coldFactor,经预热时长逐渐升至设定的 QPS 阈值
解释:coldFactor默认值为3,假设我们设定 QPS 或线程为 10,那么初始可以接受的最大值就为10 / 3 = 3,将预热时长设置为 5 秒,那么 5 秒之内慢慢升到每秒可接受的最大值 10
预热是因为某个接口平时处于低访问量的情况下没有问题,突然大批量的请求打进来,防止服务崩掉,让它慢慢升至可接受的最大值
为了不受前面例子的影响,我这里先将之前的流控规则删掉,然后创建以下规则,就创建个和上面解释里面一样的例子

在这里插入图片描述
新增后访问http://localhost:8401/test/a
匀速点击刷新或者F5,刚开始要超过一秒三次(一般人都能做到),就能看见返回的失败了,慢慢的返回失败的减少,直到全部返回成功,反正我是一秒点不上十次,哪位大哥手速够快可以试试五秒后超过十次

排队等待

排队等待:匀速排队,让请求以均匀的速度通过,阈值类型必须设置为QPS,否则无效
算法:漏桶算法
单机阈值:一秒可以接受的最大请求数,超过设置的就去排队

超时时间:每个请求可以在队列中多久,超过这个时间就不排队了,返回失败

依旧删除之前的规则,创建以下规则:每秒处理一个请求,如果某个请求在队列中等待超过20秒就返回失败,这里的时间单位和预热不同,预热是秒,这里是毫秒,需要注意一下
在这里插入图片描述
改一下testA()接口,先在controller上添加注解 @Slf4j 用来记日志

@Slf4j
public class FlowLimitController

然后testA里面记一下日志,log会自动帮助我们记录时间

    @GetMapping("/test/a")
    public String TestA(){
        log.info(Thread.currentThread().getName() + "\t" + "/test/a");
        return "======Test A========";
    }

用PostMan创建一个压测,访问testA接口,10个请求,100ms一次,没限流应该就是一秒十次完事,所以我们这里可以看看日志是不是一秒输出一次就行了
在这里插入图片描述
可以看到控制台输出,非常稳定的一秒一次
在这里插入图片描述

总结

至此,所有的流控规则就写完了,Sentinel可以流控规则覆盖场景可以说是非常全面了,具体使用那种规则要看实际的业务场景来定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sentinel是一个分布式系统的高可用性监控和自动化平台。它提供了实时监控、告警、自动化决策、统计和可视化等功能,以帮助用户快速定位和解决系统问题。 Sentinel的核心功能包括: 1. 流量控制和熔断:提供实时的流量控制和熔断机制,防止系统因为异常流量而崩溃。 2. 负载均衡和容错:提供负载均衡和容错机制,让系统能够更好地应对高并发和故障。 3. 实时监控和告警:提供实时的监控和告警功能,让用户能够及时发现系统问题并进行处理。 4. 自动化决策和处理:提供自动化的决策和处理功能,可以自动化地处理一些常见的问题,从而减少人工干预的时间和成本。 Sentinel的架构: Sentinel的架构分为三层:应用层、控制层和数据层。 1. 应用层:负责收集和处理应用程序的数据,包括请求和响应数据、日志和异常信息等。 2. 控制层:负责对应用程序进行监控和管理,包括流量控制、熔断、负载均衡、容错和告警等。 3. 数据层:负责存储和管理应用程序的数据,包括配置信息、监控数据和告警日志等。 Sentinel的工作流程: 1. 收集数据:Sentinel会收集应用程序的请求和响应数据、日志和异常信息等。 2. 统计分析:Sentinel会对收集到的数据进行统计和分析,得出系统的性能指标和问题。 3. 流量控制:如果系统的流量过大,Sentinel会根据配置的规则对流量进行控制,以保证系统的稳定性和可用性。 4. 熔断:如果系统出现了异常,Sentinel会根据配置的规则对服务进行熔断,以避免系统崩溃。 5. 负载均衡和容错:如果系统出现了故障,Sentinel会根据配置的规则进行负载均衡和容错处理,以保证系统的可靠性和可用性。 6. 告警:如果系统出现了问题,Sentinel会根据配置的规则进行告警处理,通知管理员及时处理问题。 Sentinel的优点: 1. 高可用性:Sentinel可以提供高可用性的监控和管理功能,保证系统的稳定性和可用性。 2. 实时性:Sentinel可以实时地监控系统的性能和问题,能够及时发现和处理问题。 3. 灵活性:Sentinel提供了丰富的配置选项,可以根据实际需求进行定制和调整。 4. 易扩展:Sentinel支持分布式部署和扩展,能够满足不同场景下的监控和管理需求。 5. 开源:Sentinel是一个开源的项目,能够充分利用社区的力量和资源,不断提升和完善自身的功能和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值