2011-06-22 52 views
1

我试图完成一些在概念方面很容易理解的东西。我想在不同的机器之间同步一段java代码。在不同机器上运行的程序有两个实例不能同时运行。分布式同步执行

我听说过zookeeper,jgroups和akka,但是在阅读文档时,对于我想要做的事情,似乎有点矫枉过正。有没有人有任何想法,如果有什么更直接的使用?

由于提前,

+0

“在不同机器上运行的程序有两个实例不能同时运行。”这两个程序的任何协调员都必须存储有关这些程序执行情况的状态。有什么选择可用于此目的? –

+0

我不确定我明白这个问题。我不担心运行实例的状态。我只是担心他们不会同时处理数据。 – rpvilao

+0

如果你担心这些进程是否同时处理数据,那么必须有一些通信协议可以反映某个协调器的进程状态。或者协调员必须能够在不请求这些信息的过程的情况下确定这一点,这需要协调员在某处存储此信息。无论哪种情况,负责同步的协调员都必须存储整个系统的同步状态。 OS,JVM等通过跟踪信号量,互斥锁等的使用并存储此信息来完成此操作。 –

回答

3

如果你提到的(也看看Terracotta)是你的需求,也许简单的数据库锁定太复杂了所有的技术?

SELECT FOR UPDATE语句将锁定给定的数据库记录,使其他客户端运行此查询来阻止。简单,但安全可靠。

+0

我想到了这一点,doesn这似乎不是一个好方法。是单点故障。无论如何感谢输入。 – rpvilao

+0

@rpvilao - 就像@VineetReynolds说的,如果你有其他要求,比如高可用性,你需要澄清你的问题。根据您的规格,某些解决方案可能过于简单,有些解决方案可能过于简单。 – manku

2

非常非常基本的解决方案是使用RMI

决定使用一台机器作为主机,该机器有一个使用锁的方法,只允许一个方法调用者通过。

在运行特殊的Java代码块之前,您必须通过RMI从所有其他从属实例调用此特殊方法。