通过HTTPS在Java服务器之间进行大文件传输

bar*_*raz 5 java spring stream

我有一个中央服务器,许多分布式服务器需要以稍大的文件形式传输数据,500MB - 10GB +.服务器不在同一物理网络上,不能通过VPN相互连接.虽然我们正在尝试打开其他端口,但目前我们只能讨论443,HTTPS,这对我们的REST服务非常有用,但对于服务器之间的文件传输却很糟糕.

我知道这不像Stackoverflow那样具体,但我想知道:哪些方法可能比我尝试过的更好?

服务器A - >生成文件 - >通过https传输 - > DMZ - >代理传递 - >在服务器B接收

两台服务器都使用Java 1.8,Tomcat和Spring 4.1.4.RELEASE.DMZ只是Apache而且几乎不受我们的控制.

我尝试过的事情......

  1. 使用Spring的HttpInvokerProxyFactoryBean对服务进行RPC调用(这适用于较小的站点,但较大的站点通常在传输数据时丢弃连接)

  2. 使用Apache HttpPost的多部分表单帖子(这也有效,但是我们必须在apache/tomcat中配置文件限制,加上它的连接也不可靠)

  3. 使用名为RMIIO的库,如果配置正确,它基本上模拟HTTP上的RMI.这看起来很有希望,因为它从服务器请求流并从远程服务器写入流.我还没有真正通过HTTPS工作,而且该库是在2007年编写的(有些更新截至2016年7月),但感觉非常过时,没有高度维护,我怀疑有更好的方法来做这种现在的事情(不是我能找到它们)

  4. 看着gRPC,但意识到它只是一个二进制协议,如果我想获得流媒体效果,我必须基本上处理文件分块.

  5. 阅读有关使用Spring MVC开发非阻塞REST服务的文章,http://callistaenterprise.se/blogg/teknik/2014/04/22/c10k-developing-non-blocking-rest-services-with-spring-mvc/如果我们同时收到大量文件,我们会再次看起来很有趣,但我看不出它对单个文件传输有何帮助.

我看了很多其他的事情,并尝试了一些,但这一切似乎都是错的.当我读到有关大数据和Spark流或我看到的任何百万个流选项时,我觉得应该有类似的东西将一个文件从一个服务器传输到另一个服务器而不需要中间的代理.也许有,只是没有通过HTTPS.

如果知道传输的进度(两端)并且能够在出现连接问题或传输错误时能够恢复,那将会很高兴.

但任何方向或想法都会非常有用.感谢您的时间和意见.