在开发分布式应用程序时,都是由同一家公司用 Java 编写的,您会选择 Web Services 还是 RMI?在性能、松散耦合、易用性等方面的优缺点是什么……?有人会选择WS吗?你能用 RMI 构建一个面向服务的架构吗?
5 回答
我会试着这样想:
您是否要在彼此之下运行独立的服务,并且这些服务可能会在未来某个时候被非 Java 应用程序访问?然后去网络服务。
您是否只想将应用程序的一部分(注意单数)分布在多个服务器上?然后选择 RMI,您不必离开 Java 世界就能让一切紧密耦合在一起工作。
我会选择WS。
- WS/RMI 不太可能成为您的瓶颈。
- 为什么在未来对其他可能的技术关闭大门?
- 如果客户端/服务器上的类版本不同步,RMI 可能会出现问题。
而且...我很可能会选择 REST 服务。
如果你不需要它(与非 Java 互操作),而你可能不需要,RMI 会更好;更少的代码,更少的配置,更少的带宽开销。
如果你害怕你会需要它,一个选择是使用 EJB3;它使用 RMI,非常易于设置和部署,但如果需要,还允许您轻松地将调用转换为 Web 服务。
无论你做什么,都不要创造你自己的东西;坚持一个标准。
我的选择是:
标准 java 序列化 - 优点:恕我直言,性能最高,易于实现(我使用 Spring 将本地接口公开为远程接口);缺点:序列化在不同的 jvm 版本之间不起作用
二进制序列化(例如来自 jetty 的 hessian) - 优点:与 java 序列化的性能相同,并且可以在不同的 jvm 版本之间工作
WS:只有在不同平台 java + .net 之间需要互操作时才需要,否则就太有分量了。
RMI 是一种很好的快速开发传输,但我建议不要在生产环境中使用它。序列化兼容性问题会使事情变得尴尬,您必须非常仔细地协调您的部署。
WebServices 是低效的,是的,但只是通过它的硬件。或者,使用普通的、轻量级的 XML-over-HTTP,而不是全脂 SOAP/WSDL。