我这里遇到了一个棘手的问题。我的目标是建立一个框架来集成不同的交通模拟模型。这种集成基于模拟之间链路连接、链路成本和车辆的共享。

为了进行分布式模拟,我计划有一个“协调器”(星形拓扑)。所有参与的模拟都只需向其注册,并仅与协调器对话。然后协调器协调每次模拟之间各种任务的执行。

分布问题的一个简单示例是当一个模拟“负责”某些对象(例如道路)时。另一个则“负责”其他道路。然而,这些道路是相互连接的(因此,我们需要这些模拟之间的同步,并且需要能够远程交换数据/调用方法)。

我查看了 RMI,认为它可能适合这项任务。(抽象出必须创建有线信号规则)。

这是理智的吗?这里的问题是模拟参与者需要集中 一些 他们的数据存储在“协调器”中,以确保模拟之间的显式同步。此外,一些模拟可能需要其他模拟的组件或方法。(因此产生了使用 RMI 的想法)。

我的基本方法是让“协调器”运行一个巨大的 RMI 注册表。每次模拟都只需查找注册表中的所有内容,确保每一步都使用正确的对象。

有人对走这条路有什么建议吗?

有帮助吗?

解决方案

您可能还需要检查出 Hazelcast 。 Hazelcast是一个开源事务,分布式/分区执行队列,主题,地图,设置,列表,锁和执行服务。这是超级容易的工作;只需添加hazelcast.jar到CLASSPATH并开始编码。几乎没有配置是必需的。

如果您有兴趣以分布式的方式执行你的Runnable,可调用任务,那么请在的 http://code.google.com/docreader/#p=hazelcast

Hazelcast 是下Apache许可证和企业级支持释放也是可用的。

其他提示

这是明智的?恕我直言没有。我会告诉你为什么。但首先,我将添加的免责声明,这是一个复杂的话题,所以任何答案已被视为几乎没有划伤表面。

首先,而不是重复自己,我会指出你的的 Java的网格的总结/集群技术的,我前一段时间写的。它是一种大多完整列表。

在星型拓扑结构是“自然”的“天真”(我的意思不是说在一个糟糕的方式)实现,因为点至点很简单,关键集中控制器逻辑也很简单。然而,不容错。它引入了可扩展性问题和单一的瓶颈。它引入了通信inefficiences(即点通过中心经由两步过程通信)。

你真的想这个恐怕是一个集群(而不是数据/计算网格)解决方案,我建议你看的兵马俑。理想情况下,你想看看 Oracle Coherence的但它无疑昂贵(相比免费)。它是一个奇妙的产品虽然。

这两个产品,可以使用多种方法,但两者的核心是治疗的高速缓存等的分布式映射。你把东西,你拿东西出来,你火了该改变的缓存代码。连贯性(与我更熟悉),在这点上秤飞驰很好。这些是多个“服务器”为基础的产品,虽然为一个真正的群集。

如果你正在寻找一个更分布式模型,那么也许你应该寻找更多的基于SOA的办法。

看一看 http://www.terracotta.org/

其分布式的Java虚拟机,所以它具有被集群应用的优点看起来不超过一个标准的Java应用程序不同。

我已经在应用中使用它和速度是非常可观的那么远。

让您使用消息队列的方式考虑?你可以使用JMS通信/一组服务器/节点之间的协调任务和结果。你甚至可以使用Amazon的SQS(简单队列服务:aws.amazon.com/sqs),让你的服务器运行在EC2上,允许您根据需要放大和缩小

只是我的2美分。

看看JINI,它可能是一些对你有用的。

那么,Jini的,或更具体的JavaSpaces是开始于一个简单的解决问题的方法的好地方。 JavaSpaces的可以让你实现一个主工人模式,即你的主人(在你的情况协调员)将任务写入Javaspace,并为职工查询和处理这些任务,写回结果的主人。因为你的问题不是尴尬的并行,和你的员工需要同步/交换数据,这会增加一些复杂性的解决方案。

使用的JavaSpaces将整个更多抽象添加到你的实现,它使用普通RMI(其用于通过Jini的框架在内部作为默认的“有线协议”)。

看一看这个文章前奏。

和扬Newmarch的 Jini的教程是一个不错的开始学习Jini的地方

作为对其他答案的补充,据我所知,这些答案都集中在网格和云计算上,您应该注意到模拟模型有一个独特的特征:模拟时间。

当并行和同步运行分布式仿真模型时,我看到两个选项:

  • 当每个仿真模型都有自己的仿真时钟和事件列表时,它们应该通过网络同步。
  • 或者,可以有一个模拟时钟和事件列表,它将为所有分布式(子)模型“计时”。

第一个选项已针对高级架构 (HLA) 进行了广泛研究,例如 http://en.wikipedia.org/wiki/IEEE_1516 作为首发。

然而,第二个选项对我来说似乎更简单并且开销更少。

GridGain 是一个很好的选择。他们有一个地图/减少“的分裂和聚合直接API支持”和“分布式任务会话”的实施。您可以浏览的范例,看看他们中的一些有适合你需要。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top