流控规则中的匀速排队模式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过。它的中心思想是,以固定的间隔时间让请求通过。当请求到来的时候,如果当前请求距离上个通过的请求通过的时间间隔不小于预设值,则让当前请求通过;否则,计算当前请求的预期通过时间,如果该请求的预期通过时间小于规则预设的 timeout 时间 (最大排队时长),则该请求会等待直到预设时间到来通过(排队等待处理);若预期的通过时间超出最大排队时长,则直接拒接这个请求。
规则配置示例:当阈值设为 10 QPS 的时候,则代表一秒匀速的通过 10 个请求,也就是每个请求平均间隔恒定为 1000 / 10 = 100 ms
。注意排队等待模式不用于控制 QPS,匀速排队模式下 QPS 阈值配置不代表这一秒最多通过这么多,这里的阈值仅用于计算两个请求的时间间隔。 最大排队时长代表允许的最长排队时间,排队时超出这个时间的会直接拒绝。注意超时时间不要配置的太大,否则会让线程一直卡在那里。
常见问题 为什么 QPS 没到阈值就被限流了? 匀速排队模式下 QPS 阈值配置不代表这一秒最多通过这么多,这里的阈值仅用于计算两个请求的时间间隔。比如当阈值设为 10 的时候,则代表一秒匀速的通过 10 个请求,也就是每个请求平均间隔恒定为 1000 / 10 = 100 ms
。如果请求以一个尖刺的脉冲到达,比如同一时刻到达了 8 个请求,这一刻最多只能过一个请求,但排队等待最大时间仅 200ms,那意味着这 8 个请求排队时一定会有几个请求直接被拒绝(每个请求间隔 100ms,最大排队 200ms,超出直接拒绝)。 为什么请求量比较多的时候仍然不会触发排队超时? 这里要注意请求的并发,如果 请求并发量 小于 最大排队量,那就不会触发排队超时(可以理解为同个线程,第一个请求排队完成后第二个请求才会进入排队)。,此回答整理自钉群“AHAS用户沟通群”
AHAS流控降级的排队等待功能,可以把骤增的大量请求匀速分配,以固定的间隔时间让请求通过,起到“削峰填谷”的效果,从而避免流量骤增造成系统负载过高的情况。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。