列举一下sentinel默认拒绝限流的流程
1.判断前1s的流量(一个LeapArray维护)+1与设置的qps的大小,如果是>,则拒绝请求,否则放行请求。
2.对于放行的请求,LeapArray流量+1
上述的两个过程是没有任何加锁的。
那么两个请求过来,可能同时均先执行1,均通过,之后再同时执行2。
这种就出现了您刚刚描述的现象。 具体两个关键的代码位置com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController#canPass(com.alibaba.csp.sentinel.node.Node, int, boolean)和com.alibaba.csp.sentinel.slots.statistic.StatisticSlot#entry 此回答整理自钉群“Sentinel 开源讨论群-4群”。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。