2011-09-14 24 views
1

我需要模拟Java中有主系统和多个工作系统的系统。每个工作人员可以在本地处理其数据,但需要与主人通信以从其他节点读取数据。工人应该同时工作。Java中的分布式主 - 工作者体系结构模拟设计

如何模拟此系统?我是否需要为每个正在运行的工作者和主线程启动一个新线程?有另一种方法吗?

回答

2

如果你想这样做,一台机器上,然后我看到两个选项:

  1. 创建一个主站和一个工人的应用程序(请确保您可以运行这些的多个实例)。运行一个主应用程序和多个工作应用程序实例。
  2. 创建一个单一的应用程序,其中您有一个Master类的实例和Worker类的多个实例。让Master在单独的线程中运行,并让每个Worker也在其自己的线程中运行。

因此,第一个选项是将每个“节点”(master或worker)作为单独的进程运行,而第二个选项是将每个“node”作为单独的线程运行。

0

这是一个非常通用的问题,对许多架构解决方案都是开放的。我想介绍一下我以前用过的那个。我在这里使用了RMI来简化远程调用。

所有主从进程都是RMI服务。使用RMI守护进程(RMID)可以生成主服务器和从服务器,这些守护进程可以在发生JVM崩溃或任何其他“异常”原因导致服务中断的情况下具有“提升”服务的额外功能。一般RMI服务基于定义客户端和服务器之间契约的接口工作。比方说,例如,我必须写一个解决方程式的服务。

我们从创建两个服务开始:主从服务。这两个服务都实现/向客户端展示相同的接口。唯一的区别是,“主”服务将全权负责跨作业“分叉”给不同的奴隶代理人,获得响应(或者根据需要重新安排他们)并将其返回给客户端。主人是一个简单的RMI服务,它接受“方程式”列表并将其拆分到不同的客户端。很显然,这里的主控制器引用了它在RMI句柄方面管理的所有客户机(即主机和从机之间的通信又是一个RMI调用)。

在这里,我们还有很多配置主人“查找”奴隶的可能性,但我相信你可以很容易地解决这个问题。该体系结构具有基于网格的解决方案的优势,在这种解决方案中,您不受单个进程限制,无需为您完成所有工作,从而获得适用于JVM进程的单一堆大小的弹性和自由。

我真的没有使用它们,但RioJINI是你应该看看,如果你想用Java构建分布式系统。