由于业务需要,需要动态调整当前正在进行请求的速率。理所当然想到在body_filter_by_lua 中做一些判断逻辑修改 ngx.var.limit_rate 来实现。
但是在实际操作过程中,遇到了问题:
比如前100MB 限速是2MB/s, 当数据传输超过100MB时修改限速1MB/s,此时速度会突然降为0,并且持续很长一段时间(50s)才开始以1MB/s 的速度开始传输。
看了下Nginx 限速这块的代码,实际上是全局的限速,在2M/s 传输100M 数据用了50s,此时修改成1MB/s 会sleep 50s,把全局速度平均到1M后才开始继续,这是导致sleep 50s 的根因。
请问下春哥和各位大神,这个问题有没有什么解决方法。尝试过当修改ngx.var.limit_date 时修改ngx.var.limit_rate_after 到当前的发送数据量,但是后者并非一个变量无法修改。