如何实现从文件生成器到服务器(Java)的巨大二进制文件的HTTP传输?
简单的说我们的系统由一个服务器和一个代理组成。代理生成一个巨大的二进制文件,可能需要将其转移到服务器。如何实现从文件生成器到服务器(Java)的巨大二进制文件的HTTP传输?
考虑:
- 系统必须现在文件应付高达1G,这很可能将增长至10G在2年内
- 传输必须通过HTTP,因为其他端口可能被关闭。
- 这不是文件共享系统 - 代理只需将文件推送到服务器。
- 代理和服务器都是用Java编写的。
- 二进制文件可能包含敏感信息,所以传输必须安全。
我要寻找的技术和资料库,帮助我一份转巨大文件。一些话题,这我知道的是:
- 压缩选择哪一个?我们不会将自己限制为gzip或deflate,只是因为它们是HTTP流量中最受欢迎的。如果存在一些不寻常的压缩方案,这对我们的任务产生更好的结果 - 那就这样吧。
- 拆分很明显,文件需要拆分并在几个并行会话中传输。
- 背景传输巨大的文件需要很长时间。它是否会影响解决方案,如果有的话?
- 安全是HTTPS的路要走吗?或者我们应该采取另一种方法,给定数据量?
- 现成的我完全准备好自己编写代码(应该很有趣),但是我无法避免是否有任何现成解决方案能够满足我的要求。
有没有人在他们的产品中遇到过这个问题,它是如何处理的?
谢谢。
EDIT
有些可能质疑HTTP的选择作为传输协议。问题是,即使位于同一个公司网络中,服务器和代理可能相互之间也是相当远程的。我们已经遇到了许多与客户只在其公司网络中的节点上保持HTTP端口打开相关的问题。它不会给我们太多的选择,但使用HTTP。使用FTP是好的,但它必须通过HTTP隧道传输 - 这是否意味着我们仍然具有FTP的所有优点,还是会将其瘫痪到其他替代方案更可行的地步?我不知道 - 请指教。
EDIT2
校正 - HTTPS始终是敞开的,有时(但不总是)HTTP是开放为好。但就是这样。
您可以在端口80上使用任何协议。使用HTTP是一个不错的选择,但您不必使用它。
压缩哪一个可供选择?我们不会将自己限制为gzip或deflate,只是因为它们是HTTP流量中最受欢迎的。如果存在一些不寻常的压缩方案,这对我们的任务产生更好的结果 - 那就这样吧。
最佳压缩取决于内容。为简单起见,我会使用Deflator,但是BZIP2可以给出更好的结果(需要一个库)
对于您的文件类型,您可能会首先对该类型进行某种压缩,可以使数据发送得更小。
分割显然,文件需要拆分并在几个并行会话中传输。
这对我来说并不明显。在并行下载数据通过抓住更多的可用带宽(即挤出相同带宽的其他用户),这可能是不期望的或甚至没有意义(如果没有其他用户)
背景Transfering一个巨大的文件提高性能花费很长时间。它是否会影响解决方案,如果有的话?
你会希望能够在任何时候重新开始下载。
安全性是HTTPS的路要走吗?或者我们应该采取另一种方法,给定数据量?
我确信它很好,不管数据量如何。
现成的我完全准备好自己编写代码(应该很有趣),但是我无法避免是否有任何现成的解决方案能够满足我的要求。
我会尝试使用现有的网络服务器,看看他们是否能胜任这项工作。如果没有一台可以完成上述所有功能的免费网络服务器,我会感到惊讶。
HTTP的这是一个真正不好的选择。只需使用适合您的数据的压缩软件压缩源文件,并使用文件传输协议/工具(其中有数百个可用的,一堆可用加密,一些用于并行传输大小写) – Mat 2011-12-25 08:44:50
我编辑了我的问题。 – mark 2011-12-25 08:51:34
如果您通过HTTP隧道传输FTP,则会遇到HTTP **和**所有FTP问题的所有问题。更糟的是,不要这样做。从你的描述来看,你有大量的敏感信息 - 这应该是高价值。如果您的客户不希望在这种情况下拥有安全文件传输的端口,并且更愿意为明文,无会话,不安全的协议打开端口,但这并不意味着他们需要的目的,那么对您而言不会有太大的帮助。 – Mat 2011-12-25 08:58:55