在纯Java环境中,Web服务和RMI的优缺点是什么?
时间:2020-03-06 14:35:48 来源:igfitidea点击:
在开发由同一公司用Java编写的所有分布式应用程序时,我们会选择Web服务还是RMI?在性能,松散耦合,易用性...方面,优缺点是什么?有人会选择WS吗?我们可以使用RMI构建面向服务的体系结构吗?
解决方案
我会尝试这样考虑:
我们是否要在彼此之间运行独立的服务,并且将来某些时候非Java应用程序可能会访问这些服务?然后去网络服务。
我们是否只想将应用程序的一部分(注意单数)分布在多个服务器上?然后使用RMI,我们将不必离开Java世界就可以使所有工作紧密耦合在一起。
我会选择WS。
- WS / RMI不太可能成为瓶颈。
- 为何将来为其他可能的技术关闭大门?
- 如果客户端/服务器上的类版本不同步,则RMI可能有问题。
而且...我很可能会选择REST服务。
我的选择是:
标准的Java序列化专家:imho提供了最高的性能,易于实现(我正在使用Spring将本地接口公开为远程接口);缺点:序列化在不同的JVM版本之间不起作用
二进制序列化(例如,来自jetty的hessian)优点:与Java序列化具有相同的性能,并且可以在不同的jvm版本之间运行
WS:仅在不同平台java + .net之间需要互操作性的情况下,否则就显得过于轻量级了。
RMI是一种很好的快速发展的运输工具,但是我建议不要在生产环境中使用它。序列化兼容性问题会使事情变得尴尬,我们必须非常仔细地协调部署。
WebServices是低效率的,是的,但是仅通过硬件即可实现。另外,也可以使用普通的,轻量级的XML-over-HTTP,而不是全脂SOAP / WSDL。
如果我们不需要(与非Java互操作),而我们可能不需要,则RMI会更好。更少的代码,更少的配置,更少的带宽开销。
如果我们担心自己会需要它,那么可以选择使用EJB3. 它使用RMI,非常易于设置和部署,但是如果需要,还可以使我们轻松地将呼叫转换为Web服务。
无论我们做什么,都不要创造自己的东西。坚持一个标准。