配置
|
|
处理逻辑
流控处理逻辑入口为 RateLimitingMiddleware 类的 call() 方法:
主要看这句 delay, error = self._limiter.check_for_delay(verb, url, username),其中的 self._limiter 在 init 方法中初始化为配置文件中的 nova.api.openstack.compute.limits.WsgiLimiter 实例,查看该类的 check_for_delay 方法(该类没有实现这个方法,直接看其父类):
重点看 check_for_delay 方法中的循环处理,self.levels 为配置文件中 limits 转换的 dict。循环读取 limits 配置内容,调用 Limit 类的 call 方法做流量控制检查。
类 Limit 的 call 方法,请求的方法和 uri 如果符合 limits 配置项中的某一项,则按照该项配置要求做相应的检验。比如下面配置中的这一项 (POST, ““, ., 40, SECOND),call 方法则会校验每分钟的 POST 请求是否超过了100次。如果没有超过,则继续执行;如果超过,则返回异常提示信息给用户,请求超过流量限制,请过一段时间再试。