我们得到了高集负的java应用程序,它在集群模式下运行。
我需要为客户添加下载和上传文件的功能。 对于存储文件,我要去用户gridFs,不确定,这是最好的选择,但mongo可以集群,mongo可以在diff节点之间复制数据。 这正是我所需要的。
不同的用户群应受限于不同的带宽。根据一些业务规则,我应该限制某些用户的下载速度。 我看到这个
的solutions很少他们中的大多数都以相同的方式工作。
Mongo只是简单地为我提供了InputStrem,我可以从该流中读取并写入servlet输出流。我不确定这是有效的方法。另外我担心,用户可以在下载过程中创建大量的concurent线程,这可能会影响性能。
这可能是servlet容器的问题吗?
如果可能是一个问题,怎么可以避免?可能使用nio?
我更喜欢使用纯java解决方案。
任何帮助都将受到高度赞赏。
答案 0 :(得分:10)
Leaky bucket或token bucket算法可用于控制网络带宽。
编辑:我做了一些快速原型设计,并实现了利用Servlet 3.0异步处理的算法。 Results非常好。完整的源代码可以在GitHub找到。玩得开心!答案 1 :(得分:1)
另外我担心,用户可以在下载过程中创建大量的concurent线程,这可能会影响性能。
这可能是servlet容器的问题吗?
是的,它可以。
如果可能是一个问题,怎么可以避免?可能使用nio?
NIO本身不会帮助 。它肯定不会阻止低带宽响应长时间占用线程。
我认为您需要做的是在特殊的Web容器中实现下载。我不确定,但我认为使用异步模式的Servlet 3.0可以解决问题。