关于限制带宽?

215 天前
 0littleboy

用令牌桶实现了个限制带宽的版本,每个令牌代表一字节 请求想要通过令牌桶则需要阻塞字节个数令牌生产所需要的时间

问题是不够平滑,1000 MB 的上传请求,令牌生成速度如果是 1 MB / s 则需要等待 1000 s 客户端观察到的上传速度就是 0 ,理想状态是一直能看到有效的上传速度

v 友们何解?

711 次点击
所在节点    程序员
3 条回复
fregie
215 天前
桶里要有一个令牌个数的缓冲区
就是说默认先在桶里给一定数量的令牌,同时按一定的速率向桶里放新的令牌,请求来的时候从桶里拿
这样总体能限制住速率,同时又能应对一定情况的突发流量,也不会存在你说的请求来的时候需要等着桶里攒够令牌
xycost233
215 天前
1. 上传请求分段,通过一段上传一段,别等着拿到 1000M 全部的令牌再上传
2. 调整令牌桶控制粒度,啥场景需要精确到一个字节的带宽限制啊
3. 降低令牌的生产间隔,比如你之前是一秒刷新一次令牌桶,改成 10 毫米

以上三点都可以让令牌桶的流控更加平滑
datocp
214 天前
https://wiki.dd-wrt.com/wiki/index.php/Preventing_Brute_Force_Attacks

iptables limit 是早些年测过最平滑,指的是不会出现图片不显示的情况,当然有时间还是研究 tc 吧,掌握 shell ,动态插入基于源地址的限速也很简单。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/979847

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX