首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >了解后端文件种子,以提供快速的客户端下载

了解后端文件种子,以提供快速的客户端下载
EN

Stack Overflow用户
提问于 2014-10-28 18:14:16
回答 1查看 463关注 0票数 3

我项目的主题是实现一个分布式服务器,它提供多个客户端多个文件供下载。服务器承载了几个文件,我们希望服务器应该实现一些最好的算法,以便让客户机快速地从其中下载数据。

我对项目实施的想法:

就像客户机通常使用一些下载管理器下载文件一样,类似地,必须存在一些服务器端管理器/代码/算法,这些管理器/代码/算法可以快速上传/种子文件,从而让客户端下载文件。除了选择要下载的文件外,不能有任何客户端的操作!

我应该如何在后端为这样的服务器编写代码,类似于前端客户端基于多线程的下载管理器?

如果客户端只将路径作为字符串发送到Java中的服务器以供下载,那么服务器种子/使文件如何利用客户端?

或者,如果我遗漏了什么/我的想法是完全错误的,请用另一个进程/算法来启发我,我必须在服务器端实现它。请记住,问这个问题的全部目的是后端服务器种子算法或等效的算法/方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-08 13:01:47

我想,你的这台服务器有一个良好的互联网连接与一个广泛的上游。如果是这样的话,那么当只有少数客户端正在下载很少的文件时,限制因素是这些客户端的带宽。所以你最多只能像你的客户的下游带一样快。因此,简单地使用现成的HTTP服务器库来提供下载就足够了。

在后端实现真正重要并能够提高下载性能的地方,很多用户正在连接到您的服务器并下载许多文件。首先,有以下几点需要考虑:

  • TCP有启动时间.当您第一次打开连接时,下载速度开始缓慢增长,直到达到最大值为止。为了尽量减少这一时间,在下载多个文件时,为一个文件下载打开的连接应该在下一个文件中重用。
  • 当带宽是限制因素时,同时下载许多文件(在客户端)是不合理的,因为客户端必须启动许多TCP连接,并且数据将在写入磁盘时被分割,或者(在预先分配时)磁盘在扇区之间跳转时会非常繁忙。
  • 您的服务器通常应该使用非阻塞的IO库(例如。java.nio,并避免在每个连接中创建线程,因为这会导致痛击,这再次严重地降低了服务器的性能。

如果您有大量客户同时从您的服务器下载,那么您可能会遇到的限制是:

  • 供应商的上游限制
  • 硬盘的读取速度(据我所知,SSD有大约500‘m/s)

您的服务器可以尝试在内存中保存最常见的请求文件,并从其中提供内容(DDR3内存达到17 of /s的速度。)。我怀疑您的服务器上只有很少的文件可以将它们全部缓存到服务器的RAM中。

因此,主要的工程任务在于巧妙地选择哪些内容应该缓存,哪些不应该缓存。这可以通过为某些文件分配更高的优先级,或者通过一个编码在接下来几分钟内下载的单个文件的概率的度量来实现。或者仅仅是大多数客户在这个时候下载的文件。

有了这些考虑,您就可以将下载服务器的限制推到某个特定的点,从这一点出发,可以通过将文件分发或复制到多个服务器来实现唯一的改进。

如果您正走向这样一个方向,即必须同时为数百万客户提供服务,那么您应该考虑从CDN购买这样的服务。它们专门用于快速传输,并且在大多数ASes中有许多上游服务器,这样每个客户端都可以从区域CDN服务器下载自己的文件。

我知道,我没有给出任何算法或代码示例,但我并不打算完全回答这个问题。我只是想给你们一些关于这个话题的重要指导和想法。我希望,你至少可以把这些想法中的一些用于你的项目。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26615545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档