基于nginx限速可以先参考下这篇文章:https://blog.csdn.net/hellow__world/article/details/78658041
基于openresty限速可以先参考下这篇文章:https://blog.csdn.net/cn_yaojin/article/details/81774380
下面贴出源站通过环境变量的方式直接设置openresty的QPS主要配置
lua_shared_dict nginx_limit_req_store 10m;
access_by_lua_block {
local limit_req = require "resty.limit.req"
local rate = tonumber(os.getenv("QPS"))
if rate > 1000 then
burst = rate - 1000
rate = 1000
else
burst = rate / 2
rate = rate / 2
end
local lim, err = limit_req.new("nginx_limit_req_store", rate, burst - 1)
if not lim then
ngx.log(ngx.ERR, "failed to instantiate a resty.limit.req object: ", err)
return ngx.exit(500)
end
踩坑记录:
1.rate参数是精确到ms,其最小单位是ms,但是最多可以限制请求1000r/s, 即1r/ms。设置再大,也不会是所想的2000r/s,也就是最多可以限制请求1000r/s。(通过测试得出)
2.burst是应对突发大量请求,以上配置,会瞬时提供处理(rate + burst)个请求的能力。
3.以上配置为什么rate和burst要中间换算一下?因为踩坑记录1所述。