限制Servlet中的下载文件带宽/速度


问题内容

我们得到了在集群模式下工作的高负载Java应用程序。

我需要增加为客户下载和上传文件的功能。对于存储文件,我不确定要去到用户gridFs,这是最好的选择,但是mongo可以集群,并且mongo可以在diff节点之间复制数据。那正是我所需要的。

应限制不同的用户组使用不同的带宽。根据一些业务规则,我应该限制某些用户的下载速度。我看到一些解决方案,

它们大多数以相同的方式工作。

  • 读取一堆字节
  • 睡眠线程
  • 重复

Mongo只是向我提供InputStrem,我可以从该流中读取并写入servlet输出流。我不确定这是否有效。同样,我担心用户在下载过程中会创建很多并发线程,这会损害性能。

servlet容器是否可能有问题?

如果这可能是一个问题,如何避免呢?可能使用nio吗?

我更喜欢使用纯Java解决方案。

任何帮助将不胜感激。


问题答案:

泄漏存储桶令牌存储桶算法可用于控制网络带宽。

编辑:我做了一些快速原型制作,并利用Servlet
3.0异步处理实现了算法。结果还不错。完整的源代码可以在GitHub找到。玩得开心!