前言
上一篇 SpringCloud Alibaba 入坑(三)Sentinel入门
上篇文章介绍了Sentinel的基本用法,本章我们开始学习重点:Sentinel的流控规则
什么是流控
流控就是流量控制,那么为什么要进行流控呢?
因为大型互联网应用都会有大量的用户流量,当遇到了某些特殊的时间节点,如:双十一秒杀、春节抢票等,大量的流量突然涌入系统,远远超过了服务器的处理能力,服务器可能直接宕机,造成整个系统不可用。
那么对这种问题,我们就需要对流量进行限制,对于超过限制的流量,我们可以采用熔断、降级、排队等待等方式来解决。
流控入门
下面我们通过边讲边练的方式,来讲解流控的基本概念。
首先我们再执行一下上篇文章的api接口:
然后我们进入Sentinel后台,在簇点链路中,可以看到/hello,在列表右边可以看到添加流控的按钮
基本流控规则
点下流控按钮,可以看到
在流控规则窗体里面,可以看到很多选项,那么这些都是些什么东东呢?
我们重点介绍下面三个:
-
资源名
这个比较好理解,就是api接口的名称了 -
阈值类型
阈值可以理解为最大值,如水的沸点是100度,水的温度阈值就是100。
那么这个阈值类型就是最大值的不同类型,有两种:- QPS (Query Per Seconds)每秒的请求数,1秒内对资源的请求次数,超过阈值后就启动限流
- 线程数 这个就是对资源访问的线程数,超过阈值就启动限流
-
单机阈值
这个就是根据上面选择的类型,设置的最大值了
流控测试
光看文字介绍可能还是不好理解,那么我们来动手操作试试。
先来演示QPS:阈值类型选择QPS,然后单机阈值设置为1,也就是说1秒内请求/hello接口的次数超过1次,就会启动限流,最后点击新增,下面就出现了添加的流控规则:
测试下,浏览器访问下/hello,慢慢点击是没事的,快速点击(1秒点击多次),就会出现下面的文字,意思是被Sentinel进行了限流。
然后我们在编辑下刚才的流控规则,把QPS改为线程数,阈值设置为3,点击保存。
然后我们浏览器测试刚才的接口,可以看到不管点多快,接口都可以正常访问,没有出现限流。
那么怎么才能按线程数实现限流呢?
我们可以使用JMeter进行测试,JMeter的基本使用这里就不介绍了,大家可以百度下。
- 添加线程组
- 设置线程数为5和永远循环,意思就是每次都会启动5个线程来访问上面的接口
- 添加取样器
配置接口访问的选项
- 可以添加个监听器,看访问结果
- 最后点击上面的启动测试按钮
结果是:出现了限流
总结
本文介绍了Sentinel的基本流控规则,这里有QPS和线程数两种,至于使用哪一种,那么需要看我们的具体业务和服务器资源是对请求量还是线程数敏感了,然后这里还有一些问题:
- 上面出现限流的文字是Sentinel自带的,能不能设置成我们自己的,或者用更好的方式提示用户呢?
- 还有流控规则里面还有个高级选项,这些选项又有什么作用呢?
我会在后面的博客中介绍,谢谢大家的阅读,如果觉得有用的话,请点个赞了:)
大家如果需要学习其他Java知识点,戳这里 超详细的Java知识点汇总