java - Java分布式程序的当前最佳实践

标签 java jms ipc rmi distributed-computing

我有兴趣实现一些跨机器的进程,即形成一个分布式程序。我要分发的是这些进程提供的功能,而不是数据。
那么目前Java分布式编程的规范是什么?
还是RMI?或者某种消息系统?
我最初想到了用于远程管理的 RMI 和一点 JMX,但想知道当前的最佳实践是什么。似乎 RMI 总是“埋藏”在另一层之下(例如 EJB,对吧?)

更新:
在回答和评论之后,似乎当前的趋势是使用消息系统?这不是在分布式设计中引入了“集中式”组件吗?

最佳答案

我认为 RMI 不再是可行的方法,如果 RMI 适合您的任务,只需使用 EJB 即可,因为您将从应用程序服务器获得许多功能,例如安全/访问控制、事务管理、数据库管理,等等。在 RMI 中实现这些是痛苦的并且浪费时间。

分布式编程的另一个选择是使用 GridGain ,一个强大的框架,您可以使用它轻松地在商用机器集群上运行您的程序。同样,您可能会考虑 Apache Hadoop

我会从 GridGain 入手,因为它非常容易安装,只需解压并运行,而且与您的应用程序集成也相对简单。

编辑

RMI 和消息系统有点不同,因为同步与异步通信的使用应取决于整体系统架构以及不同组件之间的交互方式。例如,当服务调用需要很长时间才能完成时,异步通信可能更合适。做批量操作或存档大数据。在这种情况下,服务客户端不持有系统资源(例如套接字和线程)

另一方面,当服务/功能需要很短的时间完成并且每个远程服务都依赖于前一个服务的结果时,同步通信可能更合适。

关于java - Java分布式程序的当前最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14297445/

相关文章:

java - 在无法识别的匿名类中实现的重写方法

macos - Oracle 的 JDK 7 for Mac 安装不一致,如何彻底摆脱旧的 Apple JDK?

java - ActiveMQ 未收到来自生产者的消息

java - 为什么我们特别使用JMS?

c++ - 父进程 "listening"到子消息

java - 为什么 AudioRecord 在设备进入休眠状态时不录制声音,即使我使用了 WakeLock?

java - 在运行时更改 persistenceUnit 属性

java - 如何在 JBossAS5 上配置 ConnectionFactory JMS?

c++ - IPC 共享内存与 posix 共享内存

c++ - boost::named_mutex:在最后一个进程关闭时安全清理