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

时间:2013-01-12 20:05:40

标签: java jms ipc rmi distributed-computing

我有兴趣实现跨越机器的一些过程,即形成分布式程序。这些流程提供的功能是我想分发而不是数据 那么Java目前的分布式编程规范是什么呢? 它仍然是RMI吗?还是某种消息系统?
我最初认为RMI和一些JMX用于远程管理,但想知道目前的最佳实践是什么。看起来像RMI总是在另一层下“埋头”(例如EJB对吗?)

更新
在得到答案和评论后,目前的趋势似乎是针对消息传递系统?这不是在分布式设计中引入“集中式”组件吗?

3 个答案:

答案 0 :(得分:3)

我认为RMI不再适合,如果RMI适合您的任务,只需使用EJB,因为您将从应用程序服务器获得许多功能,如安全/访问控制,事务管理,数据库管理,实施RMI中的那些是痛苦的,浪费时间。

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

我将从GridGain开始,因为它非常易于安装,只需解压缩和运行,并且与您的应用程序集成也相对简单。

修改

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

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

答案 1 :(得分:2)

我最近使用Cajo项目在几个java桌面(Swing)应用程序实例之间进行远程处理。该项目暂时没有看到更新,但它使用起来非常简单,而且工作正常,只需要少量工作。

这是一个围绕RMI的薄包装,所以它非常轻巧,速度非常快。

有关示例,请参阅文章"Cajo, the easiest way to accomplish distributed programming in Java"

答案 2 :(得分:2)

最佳实践通常是EJB,因为您在app server / Java EE堆栈中运行。

我喜欢异步消息传递解决方案。即使用JMS。您可以轻松地将ActiveMQ设置为network of brokers,然后依赖发布订阅模式。在这种情况下,将没有中心组件。还有其他经纪人这样做。

你看过AKKA了吗?它不是标准附近的任何东西,但如果你的应用程序本质上是非常分散的,那么nische概念就很有用。

另一个趋势,也许是以数据为中心的,是使用分布式内存/数据网格。如hadoop等。