Java:RMI与Web服务

10

我需要创建一个分布式应用程序,由多个客户端发送文件(及文件信息)到一个服务器,并向该服务器查询。

客户端必须从公司内部访问该Web服务器以发送文件。 但是,有时一些特定的查询必须在公司外部运行。

我认为,根据我的了解,使用RMI是将桌面客户端连接到索引引擎和存储引擎的更快(操作性能)方法。 而且,我认为制作一个Web服务,提供对搜索引擎的访问层也是一个不错的决策,因为它将在公司网络之外运行。

您认为这是否是一个好的方法?或者您是否有其他必须考虑的替代方案?

预先感谢您。


2
回答这个问题需要补充一些信息:是哪种客户端在调用您的服务?RMI 仅限于 Java 客户端。另一方面,Web 服务(我猜您指的是基于 SOAP over HTTP 的 Web 服务)更具互操作性(基于 XML)。 - manuel aldana
6个回答

8

RMI可以通过HTTP隧道传输(请参见这里),因此不要让这太影响你的决策。

如果两端都能使用RMI进行通信,那么RMI可能是你应该使用的;与Web服务相比,它更容易使用。


7

请注意,我最近开发了一个类似的解决方案,发现套接字是传输文件最有效和高效的方式,而RMI适用于简单的方法调用(如查询)。 在设置RMI时,我也遇到了困难,配置有时可能会令人困惑,并且关于这个主题的文档不多。

我确信RMI将为您提供更好的性能,但Web服务可能会更易于维护和灵活以满足未来的要求。


谢谢,我会小心的,配置时间似乎也是一项艰巨的工作。到目前为止,我已经很努力了...但是看起来只要有少量的测试数据,就能够正常运行。 - Sheldon
还发现这个插件在配置和调试RMI方面非常有用: http://www.genady.net/rmi/index.html - LeWoody

5

您为什么认为RMI更快?根据我的经验,它可能会很慢,难以配置,难以保护,并且通常很不好用。

由于Web服务通常只是基于HTTP的XML,因此您可以通常设计出更好的可扩展解决方案。


根据我的经验所见,但我不确定,这就是我为什么要问的原因。请看这篇论文,这是其中一些性能研究之一:http://mercury.it.swin.edu.au/ctg/AWSA04/Papers/gray.pdf,谢谢 :) - Sheldon
我没有直接的轶事证据,但是通常情况下,Web服务的性能比RMI差是有道理的(主要是由于将数据解析为XML并从XML中解析出来的额外开销,以及XML在二进制序列化方面的附加冗长性)。 - Jared
1
@Kevin Web服务可能远不止于“仅仅”是XML over HTTP。 - Thorbjørn Ravn Andersen

3
如果你想支持的API与HTTP不太匹配,我会选择使用RMI(但要注意不必要的往返)。
如果它可以很好地映射到HTTP,则选择REST,它基本上是将您的API实现为操作的HTTP Servlets。如果大部分流量是上传/下载你提到的文件加上几个API调用,那么这可能是最好的选择。
顺便说一下,你认为RMI比Web服务更快的经验与我的相符。(两者都可以由于往返不良而导致性能变慢,主要是由于API设计不良造成的。)

3

无论如何,这都是一个永无止境的争论。以下是我的谦虚意见:

  • Web服务确实允许松散耦合的架构。使用RMI时,即使有最小的更改(由于类序列UUID和其他原因),您也必须编译所有内容。
  • 由于HTTP是底层网络协议,WS允许与其他企业组件(ESB、SSO、身份管理、负载平衡、安全过滤器、安全证书)更容易地共存。
  • RMI中的反射(以及EJB中的反射)似乎比HTTP协议本身更昂贵。

如果您认为EJB更适合应用程序服务器环境,并且更容易根据您的文章与WS和CORBA进行比较,则EJB支持事务管理、bean管理;WS具有WS+扩展(安全性、事务):

  • 根据文章,EJB比WS慢:Remote EJB is 3x slower than WebService in 7.1
  • 编译/构建EJB时,我们必须在开发和生产环境中使用完全相同的应用程序服务器版本,包括补丁,以避免可疑的生产运行时错误(这看起来很容易 - 生产(数据中心)团队并不总是说他们有哪些补丁,当我们为应用程序进行修复时,我们总是需要重新询问确切的服务器版本)。
  • 如果由于小问题重建EJB,则客户端jar必须重建,因此使用客户端jar的应用程序需要重新部署,部分修复应用程序并不那么容易。

(这些都是我个人经历中的问题,也许其他人更幸运)

I would conclude that WebServices are more flexible, use less reflection, and hopefully faster if designed carefully. If RESTful is used in MVC controller as result, ESB can help with both offering transformations (less code, just transform) and security injection straight into HTTP headers (e.g. ivheader, ivgroup - if using ibm web seal, Tivoli access manager). Using SAML XACML is possible only when using WS as assertions work with XML. Therefore for distributed and dislocated enterprise applications WS are more flexible due to above mentioned.
Article you refer says that WS have no transactions but only proposals. The article is wrong or too old. See OASIS WSAT 1.0 and WSAT 2.0. Microsoft, JBoss, Oracle and few others support technology out of the box in their application servers. Apache Metro seems to support it was well (please verify).

好的比较建议。它帮助了我!谢谢 :) - user915303

1

RMI基本上是为小型应用程序设计的。是的,它更快,但随着时间的推移,当流量增加时,为了在应用程序中进行更多的增强,使用webservice比RMI更易于维护,如果您选择RESTful webservice,那将是最佳选择。

谢谢


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接