【问题标题】:Java File Transfer, EJB, SOAP or REST, performance comparisonJava 文件传输、EJB、SOAP 或 REST、性能比较
【发布时间】:2011-10-12 07:58:32
【问题描述】:

我需要使用 java 将一些文件从一台服务器传输到另一台服务器,我的性能是我的首要任务,这三个选项中的哪一个应该是我的正确选择。

【问题讨论】:

  • 您的文件有多大?什么是 Java 文件传输?
  • 您是否只需要传输文件,或者是否有任何额外的信息需要随它一起发送?
  • 文件大小最大为 10mb,请求中包含参数,响应中只有文件数据。
  • Java 文件传输只是标题,代表技术和问题领域。

标签: java performance web-services scalability


【解决方案1】:

我的 2 美分:

  1. EJB;假设您不打算通过 Web 服务包装您的 EJB,这将在 RMI 调用中结束,这意味着您的客户端必须了解 RMI。如果您在公共互联网上,这可能会成为一个问题,因为协议和端口可能会被某些中间体(防火墙等)阻止。您可能会遇到可伸缩性问题。如果涉及到 SOAP 或 REST 等 Web 协议,因为负载平衡器和 Web 服务器理解这些协议,横向扩展(集群)要容易得多。
  2. 肥皂;绝对是一个选项,因为文件大小可以高达 10mb,您应该考虑使用MTOM 来传输文件本身。在 SOAP 消息中嵌入文件可能需要您进行 base 64 编码,这取决于文件内容本身(例如二进制文件)。平均而言,base 64 enc 会产生 1.3 倍的开销(10mb > 13.33mb)。
  3. 使用 REST,您最终会遇到与使用 SOAP 相同的文件编码问题。

总结:这取决于,我会先看看 SOAP + MTOM 并做一些测试。您还可以考虑“不那么时髦”的协议,如 FTP、SFTP、FTPS。如果您需要保证交付,您可能需要查看托管文件传输 (MFT) 概念:http://en.wikipedia.org/wiki/Managed_file_transfer

【讨论】:

    【解决方案2】:

    我认为,使用 SOAP 将涉及对数据进行 base64 编码,这将使其大​​幅膨胀 33%!

    我不认为 RMI base64 编码,因此和带有二进制主体的 REST 传输将大致同样有效。

    REST 使用 HTTP,这是一种协议,其实现已经过大量调整和彻底测试,可用于传输大文件。用于 RMI 的协议 JRMP 和 IIOP 通常用于较小的请求,因此没有进行这种调整。因此,我倾向于使用 HTTP 而不是 JRMP 或 IIOP,因此我更倾向于使用 REST PUT 而不是 RMI。

    不过,我猜 RMI 和 HTTP 之间的差异会很小。

    但是,最重要的是,没有什么比基准更好的了。我敦促您快速测试一下使用所有三个选项传输大文件,并测量速度。

    【讨论】:

      【解决方案3】:

      当您谈论 EJB 时,我假设您实际上指的是 RMI(远程方法调用)。它使用对象序列化。如果它是您的应用程序的一个选项,这是最好的方法。

      使用 SOAP,您将承担 XML 创建/解析(计算方面)的开销。您还为将 XML 转换为对象或从对象转换代码而感到头疼。

      使用 REST,它最终会成为与 SOAP 相同的问题。但是,对于大多数公共 API,这似乎是每个人都在朝着的方向发展。

      【讨论】:

        猜你喜欢
        • 2010-09-11
        • 2010-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-25
        • 2015-10-22
        • 2012-06-14
        • 2021-06-26
        相关资源
        最近更新 更多