1

I need to implement a web service which could provide requested files to other internal applications or components running on different networks. Files are dispersed across different servers in different locations and can be big as few gigabytes.

I am thinking to create a RESTful web service which will have implementation to discover the file, redirect the HTTP request to another web service on different location and send the file via HTTP.

Is it a good idea to send the file via HTTP or will it be better for the web service to copy the file to the location where requester component could access it?

4

2 回答 2

2

通过 HTTP 分发大文件的最大问题是您会遇到各种阻止它的限制。作为一个简单的示例,WCF 允许您配置最大有效负载大小,但您最多只能将其配置为 2 GB。您可能会在堆栈的所有层中遇到此类问题。我怀疑它们中的任何一个都是不可克服的(要解决上述限制,您可以流式传输文件的块,而不是整个文件,尽管这会引入它自己的问题),但是您可能会遇到很多超时和随机故障,这是通过调整这个或那个服务或客户端的配置来修复。

此外,在处理大文件时,您必须仔细考虑如何处理传输过程中不可避免的故障(例如网络掉线)。根据您使用的特定技术,它们可能具有一些“恢复”功能,但您需要在提交之前确保它是可靠的。

一种可能性是像Facebook 在分发大型二进制文件时所做的那样- 使用 BitTorrent。因此,您的网络服务提供文件的洪流,而不是文件本身。BitTorrent 的最大优势是它非常强大,并且可以很好地扩展。值得考虑,但这在很大程度上取决于您的环境和特定的工作负载。

于 2012-10-17T08:39:54.480 回答
1

如果您要服务的文件不经常更改或根本不更改,您可以使用许多策略,因为 RB 建议的策略,或者使用支持部分数据操作的纯 HTTP,请参阅RFC 2616

但是根据您的使用场景,我还建议您看一下Amazon Web Services - S3(简单存储服务),它可能已经完成了您正在尝试做的事情,它很便宜并且具有高可用性。

于 2012-10-18T11:02:26.963 回答