用令牌桶实现了个限制带宽的版本,每个令牌代表一字节 请求想要通过令牌桶则需要阻塞字节个数令牌生产所需要的时间
问题是不够平滑,1000 MB 的上传请求,令牌生成速度如果是 1 MB / s 则需要等待 1000 s 客户端观察到的上传速度就是 0 ,理想状态是一直能看到有效的上传速度
v 友们何解?
1
fregie 2023-10-08 16:59:49 +08:00
桶里要有一个令牌个数的缓冲区
就是说默认先在桶里给一定数量的令牌,同时按一定的速率向桶里放新的令牌,请求来的时候从桶里拿 这样总体能限制住速率,同时又能应对一定情况的突发流量,也不会存在你说的请求来的时候需要等着桶里攒够令牌 |
2
xycost233 2023-10-08 17:00:54 +08:00
1. 上传请求分段,通过一段上传一段,别等着拿到 1000M 全部的令牌再上传
2. 调整令牌桶控制粒度,啥场景需要精确到一个字节的带宽限制啊 3. 降低令牌的生产间隔,比如你之前是一秒刷新一次令牌桶,改成 10 毫米 以上三点都可以让令牌桶的流控更加平滑 |
3
datocp 2023-10-09 07:08:55 +08:00 via Android
https://wiki.dd-wrt.com/wiki/index.php/Preventing_Brute_Force_Attacks
iptables limit 是早些年测过最平滑,指的是不会出现图片不显示的情况,当然有时间还是研究 tc 吧,掌握 shell ,动态插入基于源地址的限速也很简单。 |