我们得到了在集群模式下工作的高负载 Java 应用程序。
我需要为我们的客户添加下载和上传文件的功能。
为了存储文件,我要去用户 gridFs,不确定,这是最好的选择,但 mongo 可以集群,mongo 可以在差异节点之间复制数据。
这正是我所需要的。
不同的用户组应该限制不同的带宽。基于某些业务规则,我应该限制某些用户的下载速度。
我看到了很少的 solutions
它们中的大多数都以相同的方式工作。
Mongo 只是为我提供 InputStrem,我可以从该流中读取并写入 servlet 输出流。我不确定这是有效的方法。另外我担心,用户可能会在下载过程中创建大量并发线程,这会影响性能。
这可能是 servlet 容器的问题吗?
如果这可能是一个问题,如何避免?可能使用 nio ?
我更喜欢使用纯 java 解决方案。
任何帮助将不胜感激。
最佳答案
Leaky bucket 或 token bucket 算法可用于控制网络带宽。
编辑:我做了一些快速原型(prototype)设计并实现了利用 Servlet 3.0 异步处理的算法。 Results 都不错。完整的源代码可以在 GitHub 上找到。玩得开心!