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

我需要为我们的客户添加下载和上传文件的功能。
为了存储文件,我要去用户 gridFs,不确定,这是最好的选择,但 mongo 可以集群,mongo 可以在差异节点之间复制数据。
这正是我所需要的。

不同的用户组应该限制不同的带宽。基于某些业务规则,我应该限制某些用户的下载速度。
我看到了很少的 solutions

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

  • 读取字节串
  • hibernate 线程
  • 重复

  • Mongo 只是为我提供 InputStrem,我可以从该流中读取并写入 servlet 输出流。我不确定这是有效的方法。另外我担心,用户可能会在下载过程中创建大量并发线程,这会影响性能。

    这可能是 servlet 容器的问题吗?

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

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

    任何帮助将不胜感激。

    最佳答案

    Leaky buckettoken bucket 算法可用于控制网络带宽。

    编辑:我做了一些快速原型(prototype)设计并实现了利用 Servlet 3.0 异步处理的算法。 Results 都不错。完整的源代码可以在 GitHub 上找到。玩得开心!

    10-06 10:20
    查看更多