【问题标题】:What are the pros and cons of Web Services and RMI in a Java-only environment?在纯 Java 环境中 Web 服务和 RMI 的优缺点是什么?
【发布时间】:2010-09-12 08:34:02
【问题描述】:

在开发分布式应用程序时,都是由同一家公司用 Java 编写的,您会选择 Web Services 还是 RMI?在性能、松散耦合、易用性等方面的优缺点是什么?有人会选择WS吗?您可以使用 RMI 构建面向服务的架构吗?

【问题讨论】:

    标签: java web-services remoting rmi


    【解决方案1】:

    我会试着这样想:

    您是否希望在彼此之下运行独立的服务,并且这些服务可能会在未来某个时间被非 Java 应用程序访问?然后去网络服务。

    您是否只想将应用程序的某些部分(注意单数)分散到多个服务器上?然后选择 RMI,您不必离开 Java 世界就能让一切紧密耦合在一起工作。

    【讨论】:

    • 考虑它的好方法。也不要忘记必须运行 RMI Registry 以查找服务所涉及的额外复杂性和麻烦。这至少是一个额外的端口开放,最坏的问题是托管该注册表。
    【解决方案2】:

    我会选择 WS。

    • WS/RMI 不太可能成为您的瓶颈。
    • 为什么要在未来关闭其他可能的技术?
    • 如果客户端/服务器上的类版本不同步,RMI 可能会出现问题。

    而且...我很可能会选择 REST 服务。

    【讨论】:

    • 在实际测量之前,您无法判断它是否不太可能。
    【解决方案3】:

    如果您不需要它(与非 Java 互操作),而您可能不需要,RMI 会更好;更少的代码、更少的配置、更少的带宽开销。

    如果你害怕你需要它,一个选择是使用 EJB3;它使用 RMI,非常容易设置和部署,如果需要,还可以让您轻松将调用转换为 Web 服务。

    无论你做什么,不要创造你自己的东西;坚持一个标准。

    【讨论】:

    • 应用程序可能不在支持 EJB 的环境中运行
    【解决方案4】:

    我的选择是:

    标准 java 序列化 - 优点:恕我直言,提供最高性能,易于实现(我使用 Spring 将本地接口公开为远程接口);缺点:序列化在不同的 jvm 版本之间不起作用

    二进制序列化(例如来自 jetty 的 hessian) - 优点:与 java 序列化的性能相同,并且可以在不同的 jvm 版本之间工作

    WS:只有在不同平台java + .net之间需要互操作时才需要,否则就太有分量了。

    【讨论】:

      【解决方案5】:

      RMI 是一种很好的快速开发传输,但我建议不要在生产环境中使用它。序列化兼容性问题会使事情变得尴尬,您必须非常仔细地协调部署。

      WebServices 是低效的,是的,但只是通过硬件来实现。或者,使用普通的、轻量级的 XML-over-HTTP,而不是全脂 SOAP/WSDL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-04
        • 2011-01-02
        相关资源
        最近更新 更多