微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
微服务保护
文章目录
- 微服务框架
- 微服务保护
- 31 限流规则
- 31.5 流控效果【排队等待】
- 31.5.1 流控效果【排队等待】
- 31.5.2 案例
- 31.5.3 总结
31 限流规则
31.5 流控效果【排队等待】
31.5.1 流控效果【排队等待】
当请求超过QPS阈值时,快速失败和warm up 会拒绝新的请求并抛出异常。
而排队等待则是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行。后来的请求必须等待前面执行完成,如果请求预期的等待时间超出最大时长,则会被拒绝。
例如:QPS = 5,意味着每200ms【每个请求的预期等待时间】处理一个队列中的请求;timeout = 2000,意味着预期等待超过2000ms的请求会被拒绝并抛出异常
一个栗子:
下面是一个预期等待的时间线:
现在会有非常多的请求来
第一个到达的请求,它的预期等待时间肯定是0 ms
因为它前面没有,不用等直接执行,但是如果同一时刻又来了一个请求,
第二个请求就得等至少 200ms
以此类推
timeout = 2000 的情况下,最多就像这样,即队列中最多停留10 个
这个时候如果还有一个请求到来,
它的预期等待时间就会变成 2200
超过 2000 ms,直接被拒绝
这就起到了一个流量整型的作用
31.5.2 案例
【案例】流控效果-排队等待
需求:给/order/{orderId}这个资源设置限流,最大QPS为10,利用排队的流控效果,超时时长设置为5s
直接编辑之前的那个流控效果
保存
OK,直接使用JMeter 进行测试
QPS = 15 ,这样超过了 10 的阈值
如果是按照以前的普通方式,超过阈值就直接报错了,
看看现在,启动测试
全绿了,所有请求都通过了
看看实时监控
妙啊,这就是排队等待 的流控效果
31.5.3 总结
流控效果有哪些?
- 快速失败:QPS超过阈值时,拒绝新的请求
- warm up: QPS超过阈值时,拒绝新的请求;QPS阈值是逐渐提升的,可以避免冷启动时高并发导致服务宕机。
- 排队等待:请求会进入队列,按照阈值允许的时间间隔依次执行请求;如果请求预期等待时长大于超时时间,直接拒绝